将二进制文件附加到android应用程序
我在尝试将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”)将二进制文件附加到android应用程序,android,binary,add,precompiled,Android,Binary,Add,Precompiled,我在尝试将arm预编译的二进制文件附加到我的私有android应用程序上,这让我伤了脑筋 如果你不介意,我告诉你我的应用程序。它只需要修改iptables规则,因为我的gprs通信与我的机器人。这是安卓系统的遥控器,如果我拒绝所有流量而不是我的机器人的流量,我会得到更好的结果 所以我用cyanogenmod的11版iptables编译了一个iptables,但是支持-save-restore,因为我想在完成机器人的控制后恢复规则 问题是,我已经在谷歌搜索了很长一段时间,我刚刚找到了droidwa
我要试试看。继续关注新闻…是的,这是解决方案。文件夹名“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();
}
}
希望有帮助
干杯;亚伯