我可以使用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();
}
答案 0 :(得分:10)
@Adi Tiwari,我找到了原因。
Runtime.getRuntime.exec()
不直接执行shell命令,它使用参数执行可执行文件。
" echo
"是一个内置的shell命令。它实际上是可执行文件sh
的参数的一部分,其中包含选项-c
。
像ls
这样的命令是实际的可执行文件。
您可以在type echo
中使用type ls
和adb shell
命令来查看差异
所以最终的代码是:
String[] cmdline = { "sh", "-c", "echo $BOOTCLASSPATH" };
Runtime.getRuntime().exec(cmdline);