Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过adb shell和代码理解命令-Android_Android_Linux_Shell_Adb_Adb Shell - Fatal编程技术网

通过adb shell和代码理解命令-Android

通过adb shell和代码理解命令-Android,android,linux,shell,adb,adb-shell,Android,Linux,Shell,Adb,Adb Shell,我正在尝试为应用程序授予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.

我正在尝试为应用程序授予
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权限才能授予此权限? 如果是这样的话,为什么不要求设备通过
adb shell运行它呢


我是Android新手,请更清楚地解释一下内部发生了什么以及如何继续

使用
adb shell运行的命令将以
shell(UID=2000)
用户权限执行。从
java
代码运行的命令将使用应用程序的
UID
权限执行。因此不同之处在于。

使用
adb shell运行的命令将以
shell(UID=2000)
用户权限执行。从
java
代码运行的命令将使用应用程序的
UID
权限执行。这就是区别。

为什么要在运行时执行该操作?如果您在应用程序的运行时执行命令,只需将权限添加到可在adb shell require root中使用的命令。如果您想在运行时授予权限,您应该阅读以下内容:@cricket_007我已经在清单中给出了它,但它仍然不起作用。您为什么要在运行时执行它?如果您在应用程序的运行时执行命令,只需将权限添加到可在adb shell require root中使用的命令。如果您想在运行时授予权限,您应该阅读以下内容:@cricket_007我在清单中给出了它,但它仍然不起作用..谢谢您的回答..您能解释一下bref..这意味着shell(UID=2000)拥有超级用户权限或什么…使用一些文档进行更多探索我对shell不是很了解。您能澄清一下如何解决这个问题,以便在UID=2000的情况下执行java代码吗?或者这是不可能的?(正如你在我发布的问题上读到的)我希望对dpm命令执行同样的操作,更改我的应用UID权限会有帮助吗?如果是这样,我将如何着手这样做?感谢您知道为什么运行任何wm命令(例如,
wm size
)都可以从adb运行,但返回的是java中的
找不到service:window
(而不是某些权限/用户错误)。不同的用户不会解释命令失败的原因,因为
找不到
而不是权限错误…谢谢你的回答…你能解释一下bref吗…这意味着shell(UID=2000)拥有超级用户权限,或者什么…用一些文档探索更多我对shell不是很了解。您能澄清一下如何解决这个问题,以便在UID=2000的情况下执行java代码吗?或者这是不可能的?(正如你在我发布的问题上读到的)我希望对dpm命令执行同样的操作,更改我的应用UID权限会有帮助吗?如果是这样,我将如何着手这样做?感谢您知道为什么运行任何wm命令(例如,
wm size
)都可以从adb运行,但返回的是java中的
找不到service:window
(而不是某些权限/用户错误)。不同的用户没有解释命令失败的原因,原因是
找不到
而不是权限错误。。。