的Android NDK - 建立试图链接不存在的预建图书馆
问题描述:
我只是继承了一些遗留代码,这是目前能够建立我们构建服务器上,我试图让它在Android Studio中运行,它是有问题的地方构建失败是因为它试图指向预构建库的(不存在的)MIPS版本。的Android NDK - 建立试图链接不存在的预建图书馆
我得到以下错误:
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建造的命令行,它工作得很好,只有创建要求4级架构。
正如我提到的,应该不需要改动任何代码,因为这确切的代码被成功我们构建服务器上建立。我假设我只是有一些配置错误。
答
传统上,使用NDK APP_ABIS
设置(通常在Application.mk文件中定义)来选择要构建的体系结构列表。 NDK今天支持32位和64位模式的ARM,Intel和MIPS处理器。
使用过Android Studio ignores APP_ABIS
,你必须在你的的build.gradle定义abiFilters的gradle这个插件指定的架构来构建。
,这一点尤其重要,当你的项目使用预置的第三方库,因为很多时候,在你的情况下,这些库只提供给所有可能的体系结构的一个子集。
NDK-建立调用在一个循环中Android.mk脚本,每次设定$(TARGET_ARCH_ABI)
所选择的架构,的arm64-v8a
x86_64
mips64
armeabi-v7a
armeabi
x86
mips