2017-07-29 114 views
0

我正在嘗試創建一個終端模擬器。 我的代碼是Android Nougat,Runtime.exec不會工作

ProcessBuilder builder = new ProcessBuilder("/system/bin/sh"); 
builder.redirectErrorStream(true); 
builder.directory(f); 
p = builder.start(); 

stdOut = p.getInputStream(); 
stdIn = p.getOutputStream(); 

stdIn.write(("ls\n").getBytes()); 
stdIn.write(("echo EOF\n").getBytes()); 

while(true) { 
    int n; 
    try { 
     n = stdOut.read(); 
    } catch (Exception | Error e) { 
     return; 
    } 

    if(n == -1) continue; 

    char c = (char) n; 
    if(c == '\n') { 
     if(line.equals("EOF")) break; 
     else { 
      if(write) outputable.onOutput(line); 
      outputMsg[0] = outputMsg[0] + "\n" + line; 
      line = ""; 
     } 
    } else { 
     line = line + c; 
    } 
} 

此代碼在Android 6.0,5.0,4.0,3.0 ... 工作 它不能在牛軋糖(7.0)工作。 沒有錯誤,沒有例外,沒有。它只是掛在這條線:

n = stdOut.read(); 

InputStream .read()應該掛,只有當沒有什麼可用的流。 有人知道解決方案嗎?

回答

0

我使用Chainfire的庫libsuperuser解決了我的問題。 不是一個解決方案,但至少是一種解決方法。而且,如果他願意,還可以調查代碼,尋找決定性的差異。

這不是我的情況,libsuperuser就像一個魅力。