私はルートを持つAndroid 7デバイスを持っています(動作します)
OutputStream を介してルート コマンドを実行し、InputStream を介して結果に関するメッセージを取得したいと考えています。
private void getSu() {
if (mProcess != null) return;
try {
mProcess = Runtime.getRuntime().exec("su");
} catch (IOException e) {
e.printStackTrace();
}
}
private void getStdOut() {
if (mStdOut != null) return;
getSu();
mStdOut = new DataOutputStream(mProcess.getOutputStream());
}
private void getStdIn() {
if (mStdIn != null) return;
getSu();
mStdIn = new BufferedReader(new InputStreamReader(mProcess.getInputStream()));
}
その後、「マウント」コマンドを実行して、このコマンドの結果を読み取ろうとしています。
getSu();
getStdOut();
getStdIn();
String[] mountLine = getMount(mStdOut, mStdIn, "/system");
private String[] getMount(@NonNull DataOutputStream stdOut, @NonNull BufferedReader stdIn, String string) {
String[] res=null;
try {
stdOut.writeBytes("mount");
stdOut.writeBytes("\n");
String str;
while ((str=stdIn.readLine()) != null) {
if (str.contains(string)) {
res = str.split(" ");
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return res;
}
このコードは、以前は Android 6 で動作していました。しかし、Android 7では、InputSreamが\u0000でいっぱいになります
このコマンドをadb シェル経由で実行しようとしたところ、素晴らしい結果が得られました。InputSream が\u0000でいっぱいになるのはなぜですか?