无法使用Runtime.exec()在Android Java代码中执行shell命令“echo”

时间:2014-08-08 08:42:18

标签: java android shell echo runtime.exec

我可以使用Runtime.exec()执行shell命令,例如" getprop"和" ls system"他们工作得很好。

但是,当我使用" echo $BOOTCLASSPATH"," echo \\$BOOTCLASSPATH"或" echo HelloWorld",它不会在标准输出中显示。

logcat显示:

I/AndroidRuntime( 4453): VM exiting with result code -1.

这是我的代码:

try {
    java.lang.Process proc = Runtime.getRuntime().exec("echo -e \\$BOOTCLASSPATH");
    String line = null;

    InputStream stderr = proc.getErrorStream();
    InputStreamReader esr = new InputStreamReader (stderr);
    BufferedReader ebr = new BufferedReader (esr);
    while ( (line = ebr.readLine()) != null )
        Log.e("FXN-BOOTCLASSPATH", line);

    InputStream stdout = proc.getInputStream();
    InputStreamReader osr = new InputStreamReader (stdout);
    BufferedReader obr = new BufferedReader (osr);
    while ( (line = obr.readLine()) != null )
        Log.i("FXN-BOOTCLASSPATH", line);

    int exitVal = proc.waitFor();
    Log.d("FXN-BOOTCLASSPATH", "getprop exitValue: " + exitVal);
} catch (Exception e) {
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:10)

@Adi Tiwari,我找到了原因。 Runtime.getRuntime.exec()不直接执行shell命令,它使用参数执行可执行文件。 " echo"是一个内置的shell命令。它实际上是可执行文件sh的参数的一部分,其中包含选项-c。 像ls这样的命令是实际的可执行文件。 您可以在type echo中使用type lsadb shell命令来查看差异 所以最终的代码是:

String[] cmdline = { "sh", "-c", "echo $BOOTCLASSPATH" }; 
Runtime.getRuntime().exec(cmdline);