Пустой InputStream для Android Porcess с "su"

У меня устройство 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()));
}

После этого я пытаюсь выполнить команду "mount" и прочитать результаты этой команды.

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?

1 ответ

Android 7+ необходимо:

stdOut.flush();

После записи Bytes()

Другие вопросы по тегам