[英]Execute jar cvf command by java code ( using Runtime.exec() method )
[英]Unable using Runtime.exec() to execute shell command “echo” in Android Java code
我可以使用Runtime.exec()
來執行像“ getprop
”和“ ls system
”這樣的shell命令,它們工作正常。
但是,當我使用“ echo $BOOTCLASSPATH
”,“ echo \\\\$BOOTCLASSPATH
”或“ echo HelloWorld
”時,它不會在stdout中顯示它。
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();
}
@Adi Tiwari,我找到了原因。 Runtime.getRuntime.exec()
不直接執行shell命令,它使用參數執行可執行文件。 “ echo
”是一個內置的shell命令。 它實際上是帶有選項-c
的可執行文件sh
的參數的一部分。 像ls
這樣的命令是實際的可執行文件。 您可以在adb shell
使用type echo
和type ls
命令來查看差異。
所以最終的代碼是:
String[] cmdline = { "sh", "-c", "echo $BOOTCLASSPATH" };
Runtime.getRuntime().exec(cmdline);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.