Android NDK - 构建试图链接不存在的预建库

时间:2017-10-05 17:52:54

标签: android android-ndk

我刚刚继承了一些遗留代码,它们目前能够在我们的构建服务器上构建,并且我试图让它在Android Studio上运行,并且它遇到了构建失败的问题,因为它试图指向一个(不存在的)预构建库的MIPS版本。

我收到以下错误:

libraryname: LOCAL_SRC_FILES points to a missing file.
Check that .../libraryname/mips/libraryname.so exists.

此文件不存在,但我不明白为什么构建工具正在寻找它。

我的Application.mk文件有这个条目:

APP_ABI := armeabi armeabi-v7a x86 x86_64

我的Android.mk文件有此条目(库名称一般化):

include $(CLEAR_VARS)
LIBRARY_NAME_PATH := libraryname/$(TARGET_ARCH_ABI)
LOCAL_MODULE := modulename
LOCAL_SRC_FILES := $(LIBRARY_NAME_PATH)/mobulename.so
include $(PREBUILT_SHARED_LIBRARY)

令人困惑的是,TARGET_ARCH_ABI似乎没有设置在任何地方,所以我不确定那里发生了什么。

其他说明,当我使用NDK-build从命令行构建它时,它工作得很好,只创建了所请求的4个体系结构。

正如我所提到的,不需要任何代码更改,因为这个确切的代码在我们的构建服务器上成功构建。我假设我只是配置错误。

1 个答案:

答案 0 :(得分:0)

传统上,NDK使用APP_ABIS设置(通常在 Application.mk 文件中定义)来选择要构建的体系结构列表。 NDK支持32位和64位模式下的ARM,Intel和MIPS处理器。

Android Studio ignores APP_ABIS使用的gradle插件,您必须在 build.gradle 中定义 abiFilters ,以指定要构建的体系结构。

当您的项目使用预构建的第三方库时,这一点尤为重要,因为在您的情况下,这些库通常仅适用于所有可能架构的子集。

ndk-build 在循环中调用 Android.mk 脚本,每次将$(TARGET_ARCH_ABI)设置为所选的体系结构,arm64-v8a之一 x86_64 mips64 armeabi-v7a armeabi x86 mips