2017-07-29 7 views
0

私は端末エミュレータを作成しようとしています。 私のコードでは、それはヌガー(7.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にを働くこのコード... です。 エラーなし、例外なし、何もありません。それはちょうど、この行にハング:ストリームで利用可能な何もないときにのみ

n = stdOut.read(); 

InputStream .read()がハングアップする必要があります。 誰かが解決策を知っていますか?

答えて

0

チェーンファイアのライブラリlibsuperuserを使用して私の問題を解決しました。 解決策ではありませんが、少なくとも回避策はあります。そして、彼が望むなら、決定的な違いを探して、コードを調べることもできます。

これは私の場合ではありませんが、libsuperuserはチャームのように動作します。

関連する問題