【发布时间】: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)想不出一个:) -
看看stackoverflow.com/a/46018625/1028256 - 可能是SE强制状态阻止了对su的访问。
标签: android shell android-source