0

我有带 root 的 Android 7 设备(它可以工作)

我想通过 OutputStream 执行 root 命令并通过 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 shell执行这个命令,我得到了很好的结果。为什么我得到 InputSream 充满\u0000

4

1 回答 1

0

Android 7+ 需要:

stdOut.flush();

在 writeBytes() 之后

于 2017-12-20T10:19:53.450 回答