【问题标题】:Android Nougat, Runtime.exec won't workAndroid Nougat,Runtime.exec 不起作用
【发布时间】:2017-07-29 21:00:00
【问题描述】:

我正在尝试创建一个终端模拟器。 我的代码是

ProcessBuilder builder = new ProcessBuilder("/system/bin/sh");
builder.redirectErrorStream(true);
builder.directory(f);
p = builder.start();

stdOut = p.getInputStream();
stdIn = p.getOutputStream();

stdIn.write(("ls\n").getBytes());
stdIn.write(("echo EOF\n").getBytes());

while(true) {
    int n;
    try {
        n = stdOut.read();
    } catch (Exception | Error e) {
        return;
    }

    if(n == -1) continue;

    char c = (char) n;
    if(c == '\n') {
        if(line.equals("EOF")) break;
        else {
            if(write) outputable.onOutput(line);
            outputMsg[0] = outputMsg[0] + "\n" + line;
            line = "";
        }
    } else {
        line = line + c;
    }
}

此代码适用于 Android 6.0、5.0、4.0、3.0... 它不适用于牛轧糖 (7.0)。 没有错误,没有例外,什么都没有。它只是挂在这一行:

n = stdOut.read();

InputStream.read() 只有在流中没有可用内容时才应该挂起。 有人知道解决方案吗?

【问题讨论】:

    标签: java android shell runtime


    【解决方案1】:

    我使用 Chainfire 的库 libsuperuser 解决了我的问题。 不是解决方案,但至少是一种解决方法。而且,如果他愿意,也可以调查代码,寻找决定性的差异。

    那不是我的情况,libsuperuser 就像一个魅力。

    【讨论】:

      猜你喜欢
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 2017-12-02
      • 2017-07-18
      • 2013-10-13
      • 1970-01-01
      相关资源
      最近更新 更多