我正在使用root设备。 有没有办法让linux命令作为超级用户执行而无需调用
Runtime.getRuntime().exec("su")
每一次?困扰我的是Toast,它每次都表示该应用已获得超级用户许可。我第一次发出su命令时会出现一个对话框,即使我每次执行命令时都选择记住该选项,我也会得到Toast。
答案 0 :(得分:2)
不确定要执行的内容和频率。但是你可以在OutputStream中执行多个命令,这样你就可以在一个数组或类似的命令中排队命令。
public void runCommandsAsRoot(String[] cmds) throws IOException {
Process proc = Runtime.getRuntime().exec("su");
DataOutputStream oStream = new DataOutputStream(proc.getOutputStream());
for (String cmd : cmds) {
oStream.writeBytes(cmd + "\n");
}
oStream.writeBytes("exit\n");
oStream.flush();
}
然后像这样调用它:
String[] commands = { "fistCommand", "secondCommand" };
runCommandsAsRoot(commands);
答案 1 :(得分:1)
在使用提供的默认su二进制文件时,没有办法。 chainxx和chainfire的SU应用程序都有选项,没有弹出窗口,但这是用户的选择。
当然你总是可以编译自己的su二进制文件并使用它,它是开源的。这可能会让安全问题产生一个开放的su二进制文件,用户可能不会喜欢这个。如果你这样做,你会想做一些像其他su二进制文件在其检查的位置,看看你的应用程序是否正在执行调用,如果不是拒绝操作。但是,这可能不是你应该做的事情。