Java 如何从android应用程序执行shell命令?

Java 如何从android应用程序执行shell命令?,java,android,Java,Android,我想从我的android应用程序中执行android shell命令,以执行uiautomator测试jar 我试过以下几种选择。但他们都不是为我工作的 public void execute(String shellcommand) { Runtime rt = Runtime.getRuntime(); Process p = r.exec(new String[]{"/system/bin/sh", "-c", shellcommand}); } 也试

我想从我的android应用程序中执行android shell命令,以执行uiautomator测试jar

我试过以下几种选择。但他们都不是为我工作的

 public void execute(String shellcommand) {
        Runtime rt = Runtime.getRuntime();
        Process p = r.exec(new String[]{"/system/bin/sh", "-c", shellcommand});
 }
也试过

public void execute(String shellcommand) {
    Process su = Runtime.getRuntime().exec("su");
    DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());

    outputStream.writeBytes(shellcommand + "\n");
    outputStream.flush();

    outputStream.writeBytes("exit\n");
    outputStream.flush();
    su.waitFor();
}

请告诉我犯了什么错误?

试试这个,我还添加了一个输出读取过程。但您需要剪切shell命令:

ProcessBuilder pb = new ProcessBuilder("adb", "shell", "uiautomator", "runtest", "/data/local/tmp/MyJar.jar", "-c", "com.my.test.Class#testmethod", "-e someparameter someparameterName");
Process pc;
try {
    pc = pb.start();
    InputStream stdin = pc.getInputStream();
    InputStreamReader isr = new InputStreamReader(stdin);
    BufferedReader br = new BufferedReader(isr);
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
    InputStreamReader esr = new InputStreamReader(pc.getErrorStream());
    BufferedReader errorReader = new BufferedReader(esr);
    pc.waitFor();
} catch (IOException e) {
    e.printStackTrace();
    Assert.fail(e.getMessage());

} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Assert.fail(e.getMessage());
}

安卓5.0解决了你的问题。这是一个新的API,您可以使用它执行shell命令。请检查此处:

享受