如何在 Android NDK 项目中包含二进制文件?
Posted
技术标签:
【中文标题】如何在 Android NDK 项目中包含二进制文件?【英文标题】:How to include a binary file with Android NDK project? 【发布时间】:2014-04-09 15:54:17 【问题描述】:我知道这是不好的做法,但是在 android NDK 项目中包含二进制文件的最佳方式是什么?该文件应该可以使用系统命令执行。
我不想将它手动复制到设备上,而是在我的 .apk 中分发。
【问题讨论】:
将可执行文件复制到 res/raw 作为构建过程的一部分。可以从应用程序访问那里的资源,并使用 .apk 进行复制 正在运行的系统(命令)或 popen(命令)现在冻结。有什么想法吗? 【参考方案1】:将可执行文件重命名为"lib_myexecutable_.so"
并放入项目根目录下的libs/armeabi
文件夹即可:该文件将被设备上的包管理器解压为/data/data/your.package.full.name/lib
,具有可执行权限。
如果使用ndk-build
构建myexecutable
,所有./libs/$(TARGET_ARCH_ABI)
目录都会被刷新。
要自动执行重命名操作,请在您的 Android.mk
中使用以下内容:
... # whatever you have to define the executable
include $(BUILD_EXECUTABLE)
# immediately after this,
all: .libs/$(TARGET_ARCH_ABI)/lib_myexecutable_.so
.libs/$(TARGET_ARCH_ABI)/lib_myexecutable_.so: $(LOCAL_INSTALLED)
<tab>$(call host-mv, $<, $@)
【讨论】:
使用您的建议进行编译会删除“lib_myexecutable_.so”。有什么建议我做错了吗? 如果myexecutable
是由ndk-build
构建的,就会发生这种情况。在这种情况下,您可以自动化该过程,请参阅更新。以上是关于如何在 Android NDK 项目中包含二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章
在 CMAKE 中包含来自 Android 项目的不同文件夹的静态库
Android Studio编译开源项目(含NDK开发)常见报错