- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Android 应用程序需要运行我编写的自定义二进制应用程序。我已经使用 ndk 构建了二进制文件并将其打包在 res/raw 下的 apk 中
我做了这样的事情来首先运行 su 进程。
Process process;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
之后我该怎么做才能从资源中运行二进制文件?这里还有另一个问题建议使用 AssetManager,但我不明白如何做。我检查了一些带有二进制文件的开源应用程序(android-wifi-tether 等),但我在其源代码中的任何地方都没有看到 AssetManager,也不明白他们是如何做到的。
最佳答案
有一种令人讨厌的 hacky 方法可以欺骗 Android 为您做这件事(我成功地做到了)。
安装应用程序时,Android 会将适合您架构的库从 libs/$ARCH/libfoo.so
复制到 /data/data/$PACKAGE/libs
给你。棘手的一点是它将仅复制lib$SOMETHING.so
形式的文件。它甚至会保留执行权限。
因此,如果您将 su
可执行文件重命名为 libsu.so
,Android 将为您完成所有工作。然后,您可以使用 Activity 提供的路径找到它。
但是,请注意! Android 不是为运行独立应用而设计的,Zygote 确实不太适合 fork 。我发现 Runtime.exec()
存在竞争条件并且可能会崩溃。我发现的唯一可靠技术是使用 JNI 实现一个小库,该库执行 fork 和 exec,而不触及 fork 和 exec 之间的任何其他数据。我在这里确实有关于此的所有详细信息的问题,但我找不到它。
我现在无法访问任何代码,但如果您需要,我可以在周一为您找到一些代码。
关于android - 如何在我的 Android 应用程序中运行打包的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839767/
我是一名优秀的程序员,十分优秀!