0

私はルートを持つ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でいっぱいになるのはなぜですか?

4

1 に答える 1