我刚刚继承了一些遗留代码,它们目前能够在我们的构建服务器上构建,并且我试图让它在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个体系结构。
正如我所提到的,不需要任何代码更改,因为这个确切的代码在我们的构建服务器上成功构建。我假设我只是配置错误。
答案 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