Отказ в разрешении Android Dumpsys
У меня есть приложение, в котором я создаю процесс и вызываю 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 предлагает эту функцию здесь
Я также выполнил описанный здесь шаг, чтобы заставить затмение дать мне разрешение приложения DUMP в манифесте.
Когда я выполняю команду dumpsys, я всегда получаю один и тот же результат
Permission Denial: can't dump telephony.registry from pid-953, uid=10090
Я делаю что-то неправильно? Почему ОС Android все еще отказывает мне в доступе к службе дампа?
PS Я установил min API 8, и я тестирую приложение на API под управлением устройства (ICS) 15
5 ответов
Почему ОС Android все еще отказывает мне в доступе к службе дампа?
Потому что это разрешение помечено как android:protectionLevel="signature|system|development"
(или же signatureOrSystem
используя старый синтаксис) на Android 2.3+, и поэтому не могут быть сохранены обычными приложениями Android SDK.
Есть другой (хакерский) способ доступа dumpsys
без рутирования вашего устройства - через adb shell.
Для этого потребуется разрешить отладку по 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
разрешение на это, чтобы работать.
Он сообщает о частных ценностях основных служб Android, которые вы никогда не сможете получить. Официальный документ гласит: "Не для использования сторонними приложениями".
Команда разработчиков Android решила прекратить предоставлять эти разрешения сторонним приложениям. Теперь их могут получить только системные приложения.
подробнее: https://code.google.com/p/acra/issues/detail?id=100
Добавьте разрешение на ваш манифест "android.permission.DUMP". Я еще не пробовал, но он показывает на оболочке ADB, что это разрешение отсутствует