android dumpsys权限拒绝

mal*_*he4 4 shell android dump

我有一个应用程序,我在其中创建一个进程并调用dumpsys telephony.registry命令来获取有关移动网络状态的信息。

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

然后我解析命令的结果。对于"ls"或其他命令它工作正常。对于 dupmsys 我得到Permission Denial: can't dump telephony.registry from pid-953, uid=10090. 对于dumpsys power或 其他 dumpsys 命令,我得到相同的错误结果。

我已经android.permission.DUMP按照此处的建议android Manifest 中设置了 DUMP 权限

我认为我这样做是正确的,因为 Android在这里提供了这个功能

我还完成了此处描述的步骤以强制 eclipse 允许我在清单中授予我的应用程序 DUMP 权限。

当我执行 dumpsys 命令时,我总是得到相同的结果

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

难道我做错了什么?为什么 android 操作系统仍然拒绝我访问转储服务?

PS 我已经设置了最小 API 8,我正在运行 (ICS) API 15 的设备上测试应用程序

Com*_*are 6

为什么 android 操作系统仍然拒绝我访问转储服务?

因为该权限在 Android 2.3+ 上被标记为android:protectionLevel="signature|system|development"(或signatureOrSystem使用旧语法),因此普通 Android SDK 应用程序无法持有。


Eli*_*ist 5

还有另一种(hacky)方法可以在dumpsys不植根设备的情况下访问- 通过adb shell

这将需要允许 USB 调试,并找到 adb 服务的端口。

  1. 在您的设备上启用 USB 调试。此选项位于Settings-> 下Developer Options

  2. 将您的设备连接到 PC,然后从 PC 的 shell/命令行运行以下命令: adb tcpip 12345. 然后,从您的设备外壳,adb connect localhost:12345从您的应用程序发出命令。您现在可以断开设备与 USB 的连接。或者,您可以在没有 USB 连接的情况下逐个扫描设备上的端口,使用adb connect localhost:<portnum>并找到 adb 服务正在侦听的端口。

  3. 如果出现提示,请从弹出的确认对话框中授权 USB 调试。选中“始终”复选框以不再需要此步骤。

  4. 现在,当您可以访问 adb 服务时,使用adb shell dumpsys ...您的应用程序代码来获取您需要的任何服务转储。

注意:您不需要DUMP许可即可工作。