我有一个应用程序,在其中创建进程并调用dumpsys telephony.registry命令以获取有关移动网络状态的信息。
String[] cmds={"dumpsys telephony.registry"};
Process p = Runtime.getRuntime().exec(cmds [0]+"
");
然后,我解析命令的结果。 对于"ls"或其他命令,它可以正常工作。 对于dupmsys,我得到Permission Denial: can't dump telephony.registry from pid-953, uid=10090。 对于dumpsys power或其他dumpsys命令,我得到相同的错误结果。
我已经在android Manifest中设置了DUMP权限android.permission.DUMP
我认为我这样做是对的,因为Android在此提供了此功能
我还完成了此处描述的步骤以强制Eclipse允许我在清单中授予我的应用程序DUMP许可。
当我执行dumpsys命令时,我总是得到相同的结果
Permission Denial: can't dump telephony.registry from pid-953, uid=10090
难道我做错了什么? 为什么Android OS仍然拒绝我访问转储服务?
PS,我已经设置了最小API 8,并且正在运行设备的设备(ICS)上测试该应用程序
API 15
还有另一种(hacky)方式来访问dumpsys而不通过root访问设备-通过adb shell。
这将需要允许USB调试,并找到adb服务的端口。
在设备上启用USB调试。此选项位于Settings-> Developer Options下。
将设备连接到PC,然后从PC的外壳程序/命令行运行以下命令:
adb tcpip 12345。然后,从设备外壳中,从应用程序中发出命令adb connect localhost:12345。现在,您可以从USB断开设备的连接。
或者,您可以使用adb connect localhost:逐个扫描没有USB连接的设备上的端口,并找到adb服务正在监听的端口。
如果出现提示,请从弹出的确认对话框中授权USB调试。选中"始终"复选框以不再需要此步骤。
现在,当您有权访问adb服务时,请从应用程序代码中使用adb shell dumpsys ...来获取所需的任何服务转储。
注意:您不需要DUMP权限即可工作。
Why does android OS still deny me access to the dump service ?
因为该权限在Android 2.3+上被标记为android:protectionLevel="signature|system|development"(或使用旧语法的signatureOrSystem),因此普通的Android SDK应用程序无法保留该权限。
我以为android清单中的权限可以给开发人员这个选项。我有办法吗?还是Android不允许我使用dumpsys呢?
@ malcolmthe4:"我有办法吗?" -引导您的设备并在系统分区上安装您的应用程序。
我曾尝试在dumpsys命令之前运行su。我知道它可以工作,但是这仅将我限制在有根设备上。...没有其他方法吗?我阅读了此gist.github.com/vnu/3258553如何使用平台密钥对应用程序进行签名?
@ malcolmthe4:"如何使用平台密钥对应用程序进行签名?" -编译自己的ROM mod并将该ROM mod安装在自己的设备上。您在该ROM mod中用于编译固件的签名密钥将是您需要用来对应用程序进行签名的签名密钥,以使其符合signature级权限。
好!因此dumpsys仅适用于su和自定义rom。我将尝试在没有dumpsys的情况下实现我想要的功能。不管怎么说,还是要谢谢你!!! :)
它报告了您通常无法获得的核心Android服务的私有价值。官方文件说"不供第三方应用程序使用"。
android开发团队决定停止向第三方应用授予这些权限。现在只有系统应用程序可以获取它们。
更多详细信息:https://code.google.com/p/acra/issues/detail?id = 100
在清单" android.permission.DUMP"上添加权限。我还没有尝试过,但它在adb shell上显示它缺少该权限