gpt4 book ai didi

android - 如何在 apk 中打包 native 命令行应用程序?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:48 25 4
gpt4 key购买 nike

我想将一个 Android 原生命令行应用程序打包成一个 apk。我有使用 jni/Android.mk 的 ndk-build 构建的应用程序。输出在 libs/armeabi/ 中。我也有 ant 的 apk 构建。但是,apk 似乎没有选择命令行应用程序。如果我解压缩 apk,应用程序不在其中。

我需要做什么才能让 ant 包含预构建的命令行应用程序?

此外,我需要做什么才能让 ant 运行 ndk-build? (这已经回答:Android NDK build with ANT script)

最佳答案

参见 Android NDK build with ANT script

如果 Ant 没有从 libs/armeabi 自动复制它,您可以使用 aapt 将二进制文件添加到 APK,请参阅 Documentation for aapt element in Ant script

我相信该文件将被正确提取到 /data/data/your.package.full.name/lib,具有可执行权限。

Ant 构建涉及一个名为“ApkBuilder”的步骤,它只添加来自 libs/armeabi 的文件,这些文件匹配模式 ^.+\.so$gdbserver - 后者仅用于调试构建。

但是将可执行文件重命名为 “myexecutable.so” 是不够的:设备上的 APK 安装程序不会提取此文件。

将可执行文件重命名为 "libmyexecutable.so" 即可:此文件将由 APK 提取安装程序 设备上的包管理器到 /data/data/your.package.full.name/lib,具有可执行权限。

我个人喜欢给这个实际上不是图书馆的名字起一个特殊的名字,例如lib...ffmpeg...so.

更新 6 年和 12 个 API 级别后,这种方法仍然有效。但是对于 Android App Bundle,包管理器的默认行为不是从 APK 中提取原生库,而是就地使用它们。 Here 并在此答案的评论中,您会找到一些解决方法。特别吸引人的是将可执行文件引用为"/path/to/MyApp.apk!lib...ffmpeg...so",但我没有测试过 此符号不适用于 System.exec()。请参阅 IssueTracker 进行讨论。

请注意,现在 wrap.sh 有一个特殊的 exception

关于android - 如何在 apk 中打包 native 命令行应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17383552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com