如何在 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 项目中包含二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章

在android NDK中包含本地头文件时的未定义引用

在 CMAKE 中包含来自 Android 项目的不同文件夹的静态库

Android NDK 示例构建错误 linux

Android Studio编译开源项目(含NDK开发)常见报错

如何在 android 库 gradle 项目中包含依赖项?

如何在Android主项目中包含库项目中使用的aar文件