我正在编写使用存储在项目资产文件夹中的busybox二进制库的应用程序。在运行时我将这个库复制到/data/data/com.myapp/
文件夹,我使这个文件可执行,然后尝试执行一些应该从这个二进制库中可用的 util cmds。但我没有得到想要的结果。我使用下一个功能:
private void shellCmd()
{
try {
Process process = null;
/* I used this to make the file executable */
// process = Runtime.getRuntime().exec("/system/bin/chmod 777 "
// + this.getFilesDir().getPath() + "/busybox");
// process = Runtime.getRuntime().exec("/system/bin/ls -l "
// + this.getFilesDir().getPath() + "/busybox");
/* this exec function doesnt execute(there is no prompt into logcat)*/
process = Runtime.getRuntime().exec( this.getFilesDir().getPath() + "/busybox ping -4 46.173.103.134");
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
Log.w("groupAB",output.toString());
Log.i("groupAB", "finish");
process.waitFor();
return;
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
但是,当我尝试使用 adb 执行相同的 cmd 时,"adb shell /data/data/com.myapp/busybox ping -4 46.173.103.134"
我得到了正确的 ping 结果。我很困惑为什么这不能以编程方式工作。我的错在哪里?