从 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总线。

我已将映像构建为 -eng​​strong> 和 -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 修改以赋予用户执行权限,但这似乎也不起作用。 所以 surootshell- 分组所有。您的 system-grouped 应用程序无权执行它...我会尝试:1)shell 进入,获取 suchmod 二进制文件是世界可执行的(您可能需要用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 命令的主要内容,如果未能解决你的问题,请参考以下文章

Android实例-全屏显示程序

shell从入门到精通(10)信号捕获和处理

在多个输入文件上运行shell程序[重复]

[ubuntu setting]双击运行程序或shell

android framework之priv-app,系统特权app权限那些坑

android framework之priv-app,系统特权app权限那些坑