保護されたフォルダーの内容を読み取る必要がある小さなアプリケーションを開発しているため、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 つの空の行が生成されます。