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 的设备上测试应用程序
为什么 android 操作系统仍然拒绝我访问转储服务?
因为该权限在 Android 2.3+ 上被标记为android:protectionLevel="signature|system|development"(或signatureOrSystem使用旧语法),因此普通 Android SDK 应用程序无法持有。
还有另一种(hacky)方法可以在dumpsys不植根设备的情况下访问- 通过adb shell。
这将需要允许 USB 调试,并找到 adb 服务的端口。
在您的设备上启用 USB 调试。此选项位于Settings-> 下Developer Options。
将您的设备连接到 PC,然后从 PC 的 shell/命令行运行以下命令:
adb tcpip 12345. 然后,从您的设备外壳,adb connect localhost:12345从您的应用程序发出命令。您现在可以断开设备与 USB 的连接。或者,您可以在没有 USB 连接的情况下逐个扫描设备上的端口,使用adb connect localhost:<portnum>并找到 adb 服务正在侦听的端口。
如果出现提示,请从弹出的确认对话框中授权 USB 调试。选中“始终”复选框以不再需要此步骤。
现在,当您可以访问 adb 服务时,使用adb shell dumpsys ...您的应用程序代码来获取您需要的任何服务转储。
注意:您不需要DUMP许可即可工作。
| 归档时间: |
|
| 查看次数: |
11864 次 |
| 最近记录: |