我正在尝试从我添加到AOSP(7.1.1)的system/priv-app中运行shell命令。我想要运行的命令是: ip link add dev can0 type can,以打开CAN总线。我已经将镜像构建为-eng和-userdebug版本。在adb shell中运行命令正常执行,并成功打开了CAN总线。但是,我的问题是我会收到以下错误:
当我在系统特权java应用程序中尝试以下代码时。Cannot run program "su": error=13, Permission denied
//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
su
是由root
和shell
拥有的。你的应用程序属于system
组,没有执行它的权限... 我会尝试以下几个方法:1) 进入shell
,获取su
并将二进制文件设置为全局可执行(可能需要使用adb remount
重新挂载/system
为读写权限);2) 如果可以接受的话,安装SuperSU
或其他替代品来获得通过它们授予su
的权限;3) 暂时想不到其他方法 :) - Onik