【问题标题】:Understanding command through adb shell and through code - Android通过 adb shell 和代码理解命令 - Android
【发布时间】:2016-12-13 22:16:29
【问题描述】:

我正在尝试向应用授予 BATTERSTATS 权限。当我从 PC 运行命令时 - 它工作得很好:

adb shell pm grant com.example.sample.myapplication android.permission.BATTERY_STATS

但是从 Android 应用运行时,相同的 pm grant 命令不起作用:

java.lang.Process process = Runtime.getRuntime().exec("pm grant com.example.sample.myapplication android.permission.BATTERY_STATS");

是否需要root权限才能授予此权限? 如果是这样,为什么不需要root设备通过adb shell运行它?

我是 Android 新手,请更清楚地解释一下里面发生了什么以及如何进行。

【问题讨论】:

  • 你为什么要在运行时执行它?只需将权限添加到清单
  • 如果您在应用程序运行时执行命令,您可以在 adb shell 中使用的命令通常需要 root。如果您想在运行时授予权限,您应该阅读以下内容:developer.android.com/training/permissions/requesting.html
  • @cricket_007 我已经在我的清单中给出了它,但它仍然无法正常工作..

标签: android linux shell adb adb-shell


【解决方案1】:

您使用adb shell 运行的命令将以shell(UID=2000) 用户权限执行。您从 java 代码运行的命令将使用您的应用程序的 UID 权限执行。因此差异。

【讨论】:

  • 感谢您的回答....您能解释一下 bref .....这意味着 shell(UID=2000) 可以访问超级用户权限或什么。 ..用一些文档探索更多
  • 我对 shell 不是很了解。您能否阐明如何解决该问题,以便使用 UID=2000 执行 java 代码?或者这不可能吗?(正如您在我发布的问题中看到的那样)我希望对 dpm 命令执行相同的操作,更改我的应用程序 UID 权限会有所帮助吗?如果是这样,我将如何去做?谢谢
  • 你知道为什么从 adb 运行任何 wm 命令(例如 wm size)但从 java 返回 Can't find service: window(而不是一些权限/用户错误)。不同的用户没有解释为什么命令失败并显示can't find而不是权限错误...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 2011-10-16
  • 2011-10-24
  • 1970-01-01
  • 2019-11-10
相关资源
最近更新 更多