使用“su”清空Android的InputStream

时间:2017-12-18 15:45:47

标签: java android shell root android-shell

我有带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

1 个答案:

答案 0 :(得分:0)

Android 7+需要:

stdOut.flush();

writeBytes()

之后