2014-06-15 6 views
0

내 안드로이드 응용 프로그램에서 android shell 명령을 실행하여 uiautomator 테스트 jar을 실행하려고합니다.android app에서 shell 명령을 실행하는 방법은 무엇입니까?

다음 옵션을 시도했습니다. 하지만 그들 중 어느 쪽도 ...

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(); 
} 

내가하고있어 어떤 실수 알려주세요?

답변

0

이것을 시도해보십시오. 출력 읽기 프로세스도 추가되었습니다. 그러나 쉘 명령을 줄여야합니다.

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()); 
} 
관련 문제