请参阅使用 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有一个特殊例外。