我需要在有根的 android 设备上以编程方式运行 adb 命令。
以下不工作,没有例外只是不工作:
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
另外,如果我想以特定用户角色运行命令,我该如何执行?
我需要在有根的 android 设备上以编程方式运行 adb 命令。
以下不工作,没有例外只是不工作:
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
另外,如果我想以特定用户角色运行命令,我该如何执行?
你可以使用这个:
Process p = Runtime.getRuntime().exec( "su" );
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes(command1 + "\n");
os.writeBytes(command2 + "\n");
os.writeBytes("exit\n");
os.flush();
由于您的设备已获得 root 权限,因此您必须使用su
command 才能使用已获得 root 权限的设备的命令。我使用此解决方案从我们的应用程序重新启动我们的根设备,并且它有效。正如您在代码中看到的那样,您可以添加多个命令。希望它有效。
更新:
您也可以使用命令数组。像这样:
Process proc = Runtime.getRuntime()
.exec(new String[] { "su", "-c", command1,command2,"exit" });
proc.waitFor();
或者,如果需要,您可以使用额外的 exec 命令:
Runtime runtime = Runtime.getRuntime();
runtime.exec("su");
runtime.exec("export LD_LIBRARY_PATH=/vendor/lib:/system");
runtime.exec("pm clear "+PACKAGE_NAME);
这个样本也可以,我以前用过。
我想在第二部分回答您的问题,即如何以特定用户角色运行命令?为此,您可以使用 android 内置的以下 Linux 命令。
run-as : Usage:
run-as <package-name> [--user <uid>] <command> [<args>]
例如
run-as com.example.root.app --user u0_a86 env