0

我正在编写使用存储在项目资产文件夹中的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 结果。我很困惑为什么这不能以编程方式工作。我的错在哪里?

4

0 回答 0