默认情况下以超级用户身份执行linux命令

时间:2012-06-29 18:52:05

标签: java android linux rooted-device

我正在使用root设备。 有没有办法让linux命令作为超级用户执行而无需调用

Runtime.getRuntime().exec("su")

每一次?困扰我的是Toast,它每次都表示该应用已获得超级用户许可。我第一次发出su命令时会出现一个对话框,即使我每次执行命令时都选择记住该选项,我也会得到Toast。

2 个答案:

答案 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二进制文件在其检查的位置,看看你的应用程序是否正在执行调用,如果不是拒绝操作。但是,这可能不是你应该做的事情。