将二进制文件附加到android应用程序

将二进制文件附加到android应用程序,android,binary,add,precompiled,Android,Binary,Add,Precompiled,我在尝试将arm预编译的二进制文件附加到我的私有android应用程序上,这让我伤了脑筋 如果你不介意,我告诉你我的应用程序。它只需要修改iptables规则,因为我的gprs通信与我的机器人。这是安卓系统的遥控器,如果我拒绝所有流量而不是我的机器人的流量,我会得到更好的结果 所以我用cyanogenmod的11版iptables编译了一个iptables,但是支持-save-restore,因为我想在完成机器人的控制后恢复规则 问题是,我已经在谷歌搜索了很长一段时间,我刚刚找到了droidwa

我在尝试将arm预编译的二进制文件附加到我的私有android应用程序上,这让我伤了脑筋

如果你不介意,我告诉你我的应用程序。它只需要修改iptables规则,因为我的gprs通信与我的机器人。这是安卓系统的遥控器,如果我拒绝所有流量而不是我的机器人的流量,我会得到更好的结果

所以我用cyanogenmod的11版iptables编译了一个iptables,但是支持-save-restore,因为我想在完成机器人的控制后恢复规则

问题是,我已经在谷歌搜索了很长一段时间,我刚刚找到了droidwall,它似乎只在“res”top dir中创建了一个“raw”目录,一旦安装,我可以在adb shell上看到/data/data路径中的文件夹“app_bin”。 但是当我安装我的应用程序时,使用这些dir-created,我甚至看不到某些奇怪路径中的二进制文件。。。真的,这是一个非常罕见的病例吗?我在网络上找不到任何文档

非常感谢

希望对您有所帮助

亚伯

编辑(可能的解决方案)

我已经从android_firewall项目下载了代码,它似乎正在从apk资源复制到bin目录:

./src/com/jtschohl/androidfirewall/Api.java:最终字符串app_iptables=dir+“/iptables_armv5”; ./src/com/jtschohl/androidfirewall/Api.java://Check-iptables\u-armv5 ./src/com/jtschohl/androidfirewall/Api.java:File File文件=新文件(ctx.getDir(“bin”,0),“iptables_armv5”); ./src/com/jtschohl/androidfirewall/Api.java:copyRawFile(ctx,R.raw.iptables_armv5,文件“755”)


我要试试看。继续关注新闻…

是的,这是解决方案。文件夹名“app{TYPE}”是调用函数getDir(%%TYPE},MODE_PRIVATE)返回的名称

下面的代码实现了所需的功能:

   private static void copyRawFile(Context ctx, int resid, File file, String mode) throws IOException, InterruptedException {
           final String abspath = file.getAbsolutePath();
           // Write the iptables binary
           final FileOutputStream out = new FileOutputStream(file);
           final InputStream is = ctx.getResources().openRawResource(resid);
           byte buf[] = new byte[1024];
           int len;
           while ((len = is.read(buf)) > 0) {
               out.write(buf, 0, len);
           }
           out.close();
           is.close();
           // Change the permissions
           Runtime.getRuntime().exec("chmod " + mode + " " + abspath).waitFor();
       }

       private boolean assertBinaries(Context ctx, boolean showErrors) {
           try {
               File file = new File(ctx.getDir("bin", MODE_PRIVATE), "xtables_multi");
               if (!file.exists()) {
                   copyRawFile(ctx, R.raw.xtables_multi, file, "755");
               }
               file = new File(ctx.getDir("bin", MODE_PRIVATE), "iptables_new.sh");
               if (!file.exists()) {
                   copyRawFile(ctx, R.raw.iptables_new, file, "755");
               }
           } catch(Exception e) {
               if (showErrors) {
                   alert(ctx, R.string.error_assertbinaries + " " + e);
               }
               return false;
           }
        return true;
       }

       public static void alert(Context ctx, CharSequence msg) {
           if (ctx != null) {
               Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show();
           }
       }
希望有帮助

干杯;亚伯