0

我正在使用有根的 Android 设备。有没有办法让 linux 命令以超级用户身份执行而无需调用

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

每次?让我困扰的是每次都出现的 Toast 说应用程序已被授予超级用户权限。我第一次发出 su 命令时会出现一个对话框,即使我选择记住每次执行命令时的选择,我也会得到 Toast。

4

2 回答 2

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);
于 2012-06-29T19:17:37.507 回答
1

不,使用提供的默认 su 二进制文件时没有办法。chainxx 和 chainfire 的 SU 应用程序都有不弹出窗口的选项,但这是用户的选择。

当然,您总是可以编译自己的 su 二进制文件并使用它,它是开源的。这可能会给安全问题留下一个开放的 su 二进制文件,用户可能不会喜欢这样。如果你这样做,你会想要做一些类似其他子二进制文件如何操作的事情,它会检查你的应用程序是否在执行调用,如果不是拒绝操作。但同样,这可能不是你应该做的事情。

于 2012-06-29T19:13:43.000 回答