Отказ в разрешении 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.

  1. Включите отладку по USB на вашем устройстве. Эта опция находится под Settings -> Developer Options,

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

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

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

ПРИМЕЧАНИЕ: вам не нужно DUMP разрешение на это, чтобы работать.

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

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

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

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

Другие вопросы по тегам