android dumpsys权限拒绝

时间:2013-07-05 16:29:51

标签: android shell dump

我有一个应用程序,我在其中创建一个进程并调用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命令的相同错误结果。

我在android Manifest中设置了DUMP权限android.permission.DUMP,如建议的here

我认为我正在这样做,因为Android提供此功能here

我还完成了here描述的步骤,强制eclipse允许我在清单中提供我的应用程序DUMP权限。

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

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

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

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

5 个答案:

答案 0 :(得分:4)

通过 adb shell ,可以通过另一种(hacky)方式访问dumpsys而无需根据您的设备进行操作。

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

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

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

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

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

  5. 注意:您无需DUMP权限即可使用。

答案 1 :(得分:2)

  

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

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

答案 2 :(得分:1)

Android开发团队决定停止向第三方应用授予这些权限。现在只有系统应用才能获得它们。

更多详情:https://code.google.com/p/acra/issues/detail?id=100

答案 3 :(得分:0)

它报告您通常无法获得的核心Android服务的私有值。 Official document说“不供第三方应用程序使用”。

答案 4 :(得分:-1)

在您的清单上添加权限&#34; android.permission.DUMP&#34;。我还没有尝试过,但它在adb shell上显示它缺少该权限