请参阅使用 ANT 脚本构建 Android NDK。
aapt如果 Ant 不自动复制二进制文件,您可以将二进制文件添加到 APK libs/armeabi,请参阅Ant 脚本中 aapt 元素的文档。
我相信该文件将被正确提取到/data/data/your.package.full.name/lib具有可执行权限的 .
Ant 构建涉及一个称为“ ApkBuilder ”的步骤,它仅添加来自libs/armeabi该匹配模式的文件,^.+\.so$或者gdbserver- 后者仅用于调试构建。
但是将可执行文件重命名为“myexecutable.so”是不够的:设备上的 APK 安装程序不会提取此文件。
将可执行文件重命名为“ lib myexecutable .so ”就足够了:该文件将由设备上的APK 安装程序包管理器解压缩为/data/data/your.package.full.name/lib,并具有可执行权限。
我个人喜欢给这个不是真正的图书馆一些特殊的名字,例如lib...ffmpeg...so。
UPDATE 6 年和 12 个 API 级别后,这种方法仍然有效。但是对于 Android App Bundle,包管理器的默认行为不是从 APK 中提取本机库,而是就地使用它们。在此处以及对此答案的评论中,您会找到一些解决方法。一个特别吸引人的是将可执行文件称为"/path/to/MyApp.apk!lib...ffmpeg...so",但我没有测试过这种表示法不适用于System.exec()。请参阅IssueTracker进行讨论。
请注意,现在wrap.sh有一个特殊例外。