Андроидное отклонение разрешения разрешений

У меня есть приложение, в котором я создаю процесс и вызываю команду dumpsys telephony.registry, чтобы получить информацию о состоянии мобильной сети.

String[] cmds={"dumpsys telephony.registry"};
Process p = Runtime.getRuntime().exec(cmds [0]+"\n");

а затем после этого проанализирую результат команды. Для "ls" или других команд он работает нормально. Для dupmsys я получаю Permission Denial: can't dump telephony.registry from pid-953, uid=10090. Я получаю те же результаты ошибок для dumpsys power или других команд dumpsys.

Я установил разрешения DUMP android.permission.DUMP в манифесте андроида, как предлагается здесь

Я думаю, что я делаю это правильно, так как Android предлагает эту функцию здесь

Я также сделал описанный ниже шаг , чтобы заставить eclipse разрешить мне предоставить мое разрешение на использование DUMP в манифесте.

Когда я выполняю команду dumpsys, я всегда получаю тот же результат

Permission Denial: can't dump telephony.registry from pid-953, uid=10090

Я что-то делаю неправильно? Почему андроидная ОС по-прежнему запрещает мне доступ к службе дампа?

PS Я установил min API 8, и я тестирую приложение на запущенном устройстве (ICS) API 15

Ответ 1

Почему андроидная ОС по-прежнему запрещает мне доступ к службе дампа?

Поскольку это разрешение помечено как android:protectionLevel="signature|system|development" (или signatureOrSystem с использованием старого синтаксиса) на Android 2.3+ и поэтому не может быть сохранено обычными приложениями Android SDK.

Ответ 2

Другой (хакерский) способ доступа к dumpsys без укорачивания вашего устройства - через оболочку adb.

Для этого потребуется разрешить отладку USB и найти порт службы adb.

  • Включить отладку USB на вашем устройстве. Этот параметр находится в SettingsDeveloper Options.

  • Подключите ваше устройство к ПК и выполните следующую команду из командной строки/командной строки ПК: adb tcpip 12345. Затем из оболочки вашего устройства выпустите команду adb connect localhost:12345 из вашего приложения. Теперь вы можете отключить устройство от USB. Кроме того, вы можете сканировать порты на своем устройстве один за другим без подключения USB, используя adb connect localhost:<portnum> и находить службу порта adb.

  • Авторизовать отладку USB из диалогового окна подтверждения всплывания, если будет предложено. Установите флажок "всегда", чтобы снова не требовать этот шаг.

  • Теперь, когда у вас есть доступ к службе adb, используйте adb shell dumpsys ... из вашего кода приложения, чтобы получить нужный дамп службы.

ПРИМЕЧАНИЕ. Для этого вам не требуется разрешение DUMP.

Ответ 3

Он сообщает о частных ценностях основных служб Android, которые вы никогда не сможете получить. Официальный документ говорит: "Не для использования сторонними приложениями".

Ответ 4

Добавить разрешение на ваш манифест "android.permission.DUMP". Я еще не пробовал, но он показывает в оболочке adb, что отсутствует это разрешение

Ответ 5

Команда разработчиков Android решила прекратить предоставление этих разрешений сторонним приложениям. Только системные приложения теперь могут их получить.

подробнее: https://code.google.com/p/acra/issues/detail?id=100