android n代码执行su,Android以编程方式执行su命令不起作用

你写道,你需要在su"下执行各种命令。注意使用" Runtime.exec()"最着名的SuperSU根应用程序的开发者Chainfire不鼓励。

很有诱惑力使用Runtime.getRuntime()。exec(" su -c [command]");但你应该知道[command]应该是一个参数,因此可能需要引用。不幸的是,引用[command]参数以及将参数作为单独的变量传递给Runtime.exec()或ProcessBuilder都不能在所有Android版本中保持一致,因此应该完全避免使用此构造。这样做并非不可能 - 但是存在高风险的问题。

请参阅How to SU文件。所以你可能想在这里遵循他的建议:

3.2。拨打电话

调用su的常用方法可以避免上面列出的已知问题,方法是创建一个交互式shell和管道命令。这是通过调用Runtime.getRuntime()。exec(" su");以及从返回的Process对象检索输入和输出流来完成的。这样做是一段相当简单的代码,但包括调试日志并检查它在这里重现有点长。

核心代码位于此处:[libsuperuser :: Shell.java @ GitHub]。 Shell.run()是一个运行shell代码的通用调用,下面更具体的(静态)实用函数是你可能最终使用的函数:

List Shell.SH.run(String command)

List Shell.SH.run(List commands)

List Shell.SH.run(String[] commands)

List Shell.SU.run(String command)

List Shell.SU.run(List commands)

List Shell.SU.run(String[] commands)

SH变体用于非root shell,其中SU变体用于root shell。这些调用返回一个包含shell命令输出的List。如果没有输出,则列表为空,但不为空。如果发生错误,结果仅为null - 包括用户未授予您的应用程序访问权限。这些是阻止电话。

请注意,在调试编译中,所有shell STDIN / STDOUT / STDERR都将记录到logcat,如果从主线程调用,这些调用将(故意)使应用程序崩溃。其原因将在第4节中讨论。何时调用su。

你可能感兴趣的:(android,n代码执行su)