从 priv-app 应用程序运行 shell 命令
Posted
技术标签:
【中文标题】从 priv-app 应用程序运行 shell 命令【英文标题】:Run shell command from priv-app application 【发布时间】:2018-03-10 06:43:43 【问题描述】:我正在尝试从我添加到 AOSP (7.1.1) 的系统/priv-app 中运行 shell 命令
我尝试运行的命令是:ip link add dev can0 type can来开启can总线。
我已将映像构建为 -engstrong> 和 -userdebug 版本。 该命令在 adb shell 中运行良好,并按预期成功打开 CAN 总线。
我的问题是我收到以下错误:
无法运行程序“su”:错误=13,权限被拒绝
当我在系统特权 java 应用程序中尝试以下代码时:
//ArrayList<String> commands is passed into the method
try
if (null != commands && commands.size() > 0)
Process suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
for (String currCommand : commands)
os.writeBytes(currCommand + "\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
BufferedReader stderr = new BufferedReader(new InputStreamReader(suProcess.getErrorStream()));
String line = "";
String errString = "";
while ((line = stderr.readLine()) != null) errString += line + "\n";
suProcess.waitFor();
if (suProcess.exitValue() != 0)
throw new Exception(errString);
//Handle exception
【问题讨论】:
ls -l /system/xbin/su
输出是什么?
-rwsr-x--- 1 root shell 18000 2017-09-25 07:55 /system/xbin/su
我试图在 init.rc 中对这个文件进行 chmod 修改以赋予用户执行权限,但这似乎也不起作用。
所以 su
归 root
和 shell
- 分组所有。您的 system
-grouped 应用程序无权执行它...我会尝试:1)shell
进入,获取 su
和 chmod
二进制文件是世界可执行的(您可能需要用adb remount
重新挂载/system
中的rw
); 2) 如果可以接受,请安装SuperSU
或通过它们获得su
的替代方案; 3)想不出一个:)
看看***.com/a/46018625/1028256 - 可能是SE强制状态阻止了对su的访问。
【参考方案1】:
你可以尝试这样做:
Process mProcess = new ProcessBuilder()
.command("/system/xbin/su")
.redirectErrorStream(true).start();
DataOutputStream out = new DataOutputStream(mProcess.getOutputStream());
【讨论】:
感谢您的回复,但是我仍然收到与此方法相同的错误 "D ERR: Cannot run program "/system/xbin/su": error=13, Permission denied"以上是关于从 priv-app 应用程序运行 shell 命令的主要内容,如果未能解决你的问题,请参考以下文章