【问题标题】:Need to execute multiple commands on Runtime.getRunTime().exec需要在 Runtime.getRunTime().exec 上执行多个命令
【发布时间】:2015-03-27 19:43:59
【问题描述】:
public void uninstallApp(String packageName){
       try {

                String[] command = new String[4];
                command[0] = "su";
                command[1] = "mount -o remount,rw /system";
                command[2] = "rm " + packageName;
                command[3] = "reboot";
                Runtime run = Runtime.getRuntime();
                run.exec(command);

                Log.d("DELETED", packageName);

    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.e("ERROR ON DELETE", e.getMessage());
    }
}

这是我的代码。此方法接收 apk 的路径,我需要做的是执行这些命令但不会丢失权限。我的意思是,如果我在一个进程中执行“su”,然后在另一个进程中执行“mount”。 “mount”没有“su”访问权限。所以我需要在一个进程中执行所有这些命令。那是行不通的。 :\

【问题讨论】:

  • 请正确缩进您的代码。您似乎在catch 之前有一个虚假的}。请确保您发布的代码有效。
  • 在这种情况下你能定义“不工作”吗?
  • 传递给 exec() 的数组不是多条命令,是一条命令,是命令行参数。
  • 哦,我修复了额外的 } 。但这不是问题。当我说“它不起作用”时,我的意思是它不执行任何操作。 ci_ 你说的数组不是多个命令。我应该如何执行多个命令?
  • 另请参阅When Runtime.exec() won't,了解有关正确创建和处理流程的许多好技巧。然后忽略它引用exec 并使用ProcessBuilder 创建进程。

标签: android runtime.exec


【解决方案1】:

找到解决方案

StringBuilder cmdReturn = new StringBuilder();

try {
    ProcessBuilder processBuilder = new ProcessBuilder("su","-c mount -o remount,rw /system ; rm " + packageName + " ; reboot");
    Process process = processBuilder.start();

    InputStream inputStream = process.getInputStream();
    int c;
    while ((c = inputStream.read()) != -1) {
        cmdReturn.append((char) c);
    }

    Log.d("CMD RESPONSE", cmdReturn.toString());

} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

【讨论】:

    【解决方案2】:

    您不需要使用 ProcessBuilder 模式。只需按顺序将您的命令添加到字符串数组中:

    Process process = Runtime.getRuntime().exec(new String[]{"su", "-c", command1, command2});

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2017-01-03
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多