我正在使用有根的 Android 设备。有没有办法让 linux 命令以超级用户身份执行而无需调用
Runtime.getRuntime().exec("su")
每次?让我困扰的是每次都出现的 Toast 说应用程序已被授予超级用户权限。我第一次发出 su 命令时会出现一个对话框,即使我选择记住每次执行命令时的选择,我也会得到 Toast。
我正在使用有根的 Android 设备。有没有办法让 linux 命令以超级用户身份执行而无需调用
Runtime.getRuntime().exec("su")
每次?让我困扰的是每次都出现的 Toast 说应用程序已被授予超级用户权限。我第一次发出 su 命令时会出现一个对话框,即使我选择记住每次执行命令时的选择,我也会得到 Toast。
不确定您要执行什么和频率。但是您可以在一个 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);
不,使用提供的默认 su 二进制文件时没有办法。chainxx 和 chainfire 的 SU 应用程序都有不弹出窗口的选项,但这是用户的选择。
当然,您总是可以编译自己的 su 二进制文件并使用它,它是开源的。这可能会给安全问题留下一个开放的 su 二进制文件,用户可能不会喜欢这样。如果你这样做,你会想要做一些类似其他子二进制文件如何操作的事情,它会检查你的应用程序是否在执行调用,如果不是拒绝操作。但同样,这可能不是你应该做的事情。