我希望在/dev/local
命名为native(我通过adb推送它),以root权限运行二进制文件。
为了实现这一点,我写了以下代码:
try {
root=Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(root.getOutputStream());
DataInputStream osRes = new DataInputStream(root.getInputStream());
os.writeBytes("/data/local/native\n");
os.flush();
TextView output=(TextView)findViewById(R.id.textview);
output.append(osRes.readLine());
root.waitFor();
} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(this, e.toString() , Toast.LENGTH_SHORT).show();
}
这给了我NullPointerException
。所以,我尝试将其更改为:
try{
root=Runtime.getRuntime().exec("su");
root.waitFor();
DataOutputStream os = new DataOutputStream(root.getOutputStream());
DataInputStream osRes = new DataInputStream(root.getInputStream());
os.writeBytes("/data/local/native\n");
os.flush();
TextView output=(TextView)findViewById(R.id.textview);
output.append(osRes.readLine());
root.waitFor();
} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(this, e.toString() , Toast.LENGTH_SHORT).show();
}
有了这个,我得到了BrokenPipe错误。
请帮助我,我想运行具有root权限的二进制文件,有没有其他方法或者我做错了什么?
答案 0 :(得分:1)
尝试运行su -c /path/to/executable
。
答案 1 :(得分:0)
我已多次回答并帮助其他人。请试试这个:
Usage: Run(new String[]{"/system/bin/sh", "-c", "su"});
public String Run(String[] cmd) {
StringBuffer theRun = null;
try {
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
theRun = output.append(buffer, 0, read);//output
}
reader.close();
process.waitFor();
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return theRun.toString();//return output
}
此外,此链接很有用:http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/
答案 2 :(得分:-1)
我知道我的答案很晚,但如果你仍然面对这个问题,我就是这样做的。我还必须使用root权限运行二进制文件。我尝试了几种方法,比如将二进制文件放在/ system / app文件夹中,系统应用程序从这里运行,因此具有root权限。但它没有用。因此,我必须修改su.c文件并重新编译内核,如THIS站点中所述。如果重新编译内核不是一个选项,您可以尝试在roottool(如busybox)中进行相同的更改并重新编译。您现在可以使用“busybox su -c”而不仅仅是“su -c”。