我正在试图将手臂预编译的二进制文件附加到我的私有Android应用程序中。
如果你不介意的话,我会告诉你我的应用程序。它只需要修改iptables规则,因为我的gprs与我的机器人通信。它是Android的遥控器,如果我拒绝所有流量而不是我的机器人,我会得到更好的结果。
所以我用我的cyanogenmod版本11 iptables编译了iptables,但是使用-save -restore支持,因为我想在完成机器人的控制后恢复规则..
问题是我一直在谷歌搜索很多时间,我刚刚发现droidwall似乎只在'res'顶部目录中创建一个'原始'目录,一旦安装,我可以看到在adb shell上的文件夹'app_bin'在/ data / data的路径中。 但是当我安装我的应用程序时,用那些创建的dirs我甚至看不到某个奇怪路径中的二进制文件......真的,这是一个非常罕见的情况吗?我在网络上找不到任何文档...
非常感谢,
希望你觉得它有用。
阿贝尔。
编辑(可能的解决方案)
我已经从android_firewall项目下载了代码,它似乎是从apk资源复制到bin目录:
./ src / com / jtschohl / androidfirewall / Api.java:final String app_iptables = dir +“/ iptables_armv5”; ./src/com/jtschohl/androidfirewall/Api.java://检查iptables_armv5 ./src/com/jtschohl/androidfirewall/Api.java:file file = new File(ctx.getDir(“bin”,0),“iptables_armv5”); ./src/com/jtschohl/androidfirewall/Api.java:copyRawFile(ctx,R.raw.iptables_armv5,file,“755”);
我要去试试。保持新闻......
答案 0 :(得分:0)
是的,这是溶剂。文件夹名称“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();
}
}
希望有所帮助,
欢呼声;阿贝尔。