-1

我需要在有根的 android 设备上以编程方式运行 adb 命令。

以下不工作,没有例外只是不工作:

Process process = Runtime.getRuntime().exec(command);
process.waitFor();

另外,如果我想以特定用户角色运行命令,我该如何执行?

4

2 回答 2

3

你可以使用这个:

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 权限,因此您必须使用sucommand 才能使用已获得 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);

这个样本也可以,我以前用过。

于 2018-03-13T08:30:01.887 回答
3

我想在第二部分回答您的问题,即如何以特定用户角色运行命令?为此,您可以使用 android 内置的以下 Linux 命令。

run-as : Usage:
    run-as <package-name> [--user <uid>] <command> [<args>]

例如

run-as com.example.root.app --user u0_a86 env 
于 2018-03-23T05:58:27.130 回答