如何在有根android设备上以编程方式运行ADB命令
我需要在有根的android设备上以编程方式运行adb命令 以下情况不起作用,没有例外,只是不起作用:如何在有根android设备上以编程方式运行ADB命令,android,command-line,adb-shell,cosu,Android,Command Line,Adb Shell,Cosu,我需要在有根的android设备上以编程方式运行adb命令 以下情况不起作用,没有例外,只是不起作用: Process process = Runtime.getRuntime().exec(command); process.waitFor(); 另外,如果我想以特定的用户角色运行命令,如何执行它?您可以使用以下方法: Process p = Runtime.getRuntime().exec( "su" ); DataOutputStream os = new DataOutputStre
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();
由于您的设备是根设备,您必须使用su
命令为根设备使用命令。我使用这个解决方案从我们的应用程序中重新启动我们的根设备,它成功了。您可以添加代码中显示的多个命令。希望它能起作用
更新:
您也可以使用命令数组。像这样:
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>]
请简要说明这段代码的作用。@Keivanebati感谢您的提醒。我编辑了这篇文章。你不需要像p.exec()一样执行这个过程吗@普拉提提:没必要。在exec中使用su命令时,shell将成为进程。因此,它将接受所有新命令。但我为不同的情况添加了另一个示例。@ckaraboran,我按照您的指导进行了尝试,我遇到了这个错误,请检查无法运行程序“su”:错误=13,权限被拒绝,我需要在Android应用程序中执行ADB shell命令。接受你的建议。
run-as com.example.root.app --user u0_a86 env