将二进制库嵌入到Android应用程序中

时间:2013-03-13 19:25:16

标签: android shell sh

我正在编写使用存储在项目资源文件夹中的busybox二进制库的应用程序。在运行时我将这个库复制到/data/data/com.myapp/文件夹,我使这个文件可执行,而不是尝试执行一些应该可以从这个二进制库中获得的util cmd。但我没有得到理想的结果。我使用下一个功能:

    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 shell /data/data/com.myapp/busybox ping -4 46.173.103.134"方式使用adb执行相同的cmd时,我得到了corect ping结果。我很困惑为什么这不能用编程方式工作。我的错在哪里?

0 个答案:

没有答案