Андроидное отклонение разрешения разрешений
У меня есть приложение, в котором я создаю процесс и вызываю команду 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 на вашем устройстве. Этот параметр находится в Settings
→ Developer 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