【问题标题】:Android java process returns 1 when executing "su"Android java进程在执行“su”时返回1
【发布时间】:2013-11-26 00:10:01
【问题描述】:

我正在尝试在测试期间写入 android 虚拟设备上的“/data/myFolder”文件夹,为此,我这样做了:

String[] cmd ={"su", "mkdir", dir};
    int out = 99;

    try {

        Process p = Runtime.getRuntime().exec(cmd);
        out = p.waitFor();
        BufferedInputStream in = new BufferedInputStream(p.getErrorStream());
        byte[] bytes = new byte[4096];
        while (in.read(bytes) != -1) {

        }

        in.close();
        logger.info("exit status:" + out);

    } catch (IOException e) {
        logger.severe("IOException " + e.getMessage());
        e.printStackTrace();
    } catch (InterruptedException e) {
        logger.severe("InterruptedException " + e.getMessage());
        e.printStackTrace();
    }
    if (out != 0) {
        logger.severe("Folder " + dir + " not created,exit status: " + out);
    }

或者我试过了

String cmd ={"su mkdir" + dir}; 

但是退出状态是 1 并且它没有创建任何文件夹。使用 adb shell 中的 su mkdir /data/myFolder 可以正常工作。 为什么是这个代码?什么意思? (我知道这意味着出了点问题,但是什么?没有找到任何关于 android mkdir 退出代码值的文档)。 谢谢

【问题讨论】:

  • 如果你在你尝试过的东西上加一个空格会发生什么:String cmd = "su mkdir " + dir;?
  • 我得到相同的错误代码 (1)
  • 当然可以。您仍在执行“su”,而不是“mkdir”。请在 Google 上搜索“su”命令的实际作用。
  • @Torben 你是对的,我正在执行 su 命令而不是 mkdir 作为 root。现在 String cmd = "mkdir "+ dir;进程 p = Runtime.getRuntime().exec(cmd);工作正常。

标签: java android mkdir exit-code


【解决方案1】:

我使用下面的代码来给出命令

try {
            Process sh = Runtime.getRuntime().exec("su", null, null);
            OutputStream os = sh.getOutputStream();
            byte[] mScreenBuffer = ("mkdir dir ")
                    .getBytes();
            os.write(mScreenBuffer);
            os.flush();
            os.close();
            sh.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }

【讨论】:

  • 像这样,我重定向 sdtOutput,然后将其写入“mkdir dir”。对我来说没有意义。
  • 请具体说明让您感到困惑的部分。
  • 不是让我感到困惑吗,问题是就像你写的那样,我将“mkdir dir”写入标准输出,我不执行“mkdir dir”命令。
  • 如果你看一下代码,它是 BufferedInputStream in = new BufferedInputStream(p.getErrorStream());它是输入和错误流
  • 我在说你的答案,你写了 OutputStream os = sh.getOutputStream();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2019-02-13
相关资源
最近更新 更多