Runtime.exec()
を使用して、「getprop
」や「ls system
"そしてそれらはうまく機能します。
ただし、「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()
は、シェルコマンドを直接実行するのではなく、引数を使用して実行可能ファイルを実行します。 「echo
」は組み込みのシェルコマンドです。これは実際には、オプション-c
を指定した実行可能ファイルsh
の引数の一部です。 ls
のようなコマンドは実際の実行可能ファイルです。 type echo
でtype ls
およびadb Shell
コマンドを使用して、違いを確認できます。
つまり、最終的なコードは次のとおりです。
String[] cmdline = { "sh", "-c", "echo $BOOTCLASSPATH" };
Runtime.getRuntime().exec(cmdline);