2

保護されたフォルダーの内容を読み取る必要がある小さなアプリケーションを開発しているため、su を ls および入力ストリームと組み合わせて使用​​する必要があるという結論に達しました。

ただし、readLine 関数が出力の最後に到達すると、ハングアップします。これは、最後の行に EOL マークが含まれていないためだと思います...

コード:

 p = Runtime.getRuntime().exec("su");
 outputS = new DataOutputStream(p.getOutputStream()); 
 inputS = new DataInputStream(p.getInputStream());
 errorS = new DataInputStream(p.getErrorStream());


 outputS.writeBytes("ls /datadata" + "\n");
 outputS.flush();

 while((s = inputS.readLine()) != null)
 {
      Log.i("DS", s);
 }
 Log.i("DS", "done");

どうすればこれを回避できますか? 文字を読み取ってから-1を待ってみましたが、上記と同じように機能しませんでした。システムコールなしでこれを行うのが理想的ですが、残念ながらAndroidでは、このフォルダーの内容を一覧表示またはコピーできません...

これを読んでくれてありがとう、Quint

編集:以下の回答のおかげで、問題を解決できました。何をしても、adbシェルを使用するときと同じように「su」タスクを終了してください。受け入れられた回答に記載されている方法を使用するか、必要なことを行った後に手動で「終了」を実行できます。exit を実行すると、不明な理由でエラーストリームに 2 つの空の行が生成されます。

4

1 に答える 1

1

suさらにコマンドが実行されるのをまだ待っています

suコマンドを1つだけ実行して、終了するように指示できます。変化する

p = Runtime.getRuntime().exec("su");

p = Runtime.getRuntime().exec(new String[]{"su", "-c", "ls /datadata"});

outputS...行を削除します

于 2011-09-05T08:13:24.690 に答える