Android NDK:如何dynamic获取Android.mk中的编译器体系结构

我正在尝试configurationAndroid.mk以交叉编译本机代码,以支持不同的芯片组,即armeabi,mips和x86。 我知道我可以通过以下方式configurationApplication.mk来编译不同芯片组的源代码:

APP_ABI := all 

这将触发Android-NDK的构build脚本来编译所有芯片组的源代码。 不过,我想dynamic地告诉Android.mk寻找不同的芯片组编译的静态库依赖关系。

 # Get the architecture info ARCH := ???? include $(CLEAR_VARS) LOCAL_MODULE:= mylib LOCAL_SRC_FILES:= build/lib/libxxx_$(ARCH).a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) include $(PREBUILT_STATIC_LIBRARY) 

这可能吗? 如果是这样,谁能build议如何做?

更新 :我在Application.mk中尝试了这样的事情:

  APP_ABI := armeabi armeabi-v7a mips x64 

与Android.mk:

 # Get the architecture info ARCH := $(APP_ABI) include $(CLEAR_VARS) LOCAL_MODULE:= mylib LOCAL_SRC_FILES:= build/lib/libxxx_$(ARCH).a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) include $(PREBUILT_STATIC_LIBRARY) 

但它与以下错误:

  The LOCAL_SRC_FILES for a prebuilt static library should only contain one item 

这是有道理的。 我想通过Application.mk中的APP_ABI:= all并且能够dynamic引用它。 有任何想法吗?

Solutions Collecting From Web of "Android NDK:如何dynamic获取Android.mk中的编译器体系结构"

TARGET_ARCHvariables保存正在构build的当前ABI的值。 您可以使用以下方式:

 ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS := $(COMMON_FLAGS_LIST) else LOCAL_CFLAGS := -mfpu=vfp -mfloat-abi=softfp $(COMMON_FLAGS_LIST) endif 

如果在APP_ABI := armeabi-v7a armeabi mips x86指定了APP_ABI := armeabi-v7a armeabi mips x86APP_ABI := all ,您将获得每个单独的ABI值。

检查TARGET_ARCH_ABI

 ifeq($(TARGET_ARCH_ABI), armeabi-v7a) # v7a-specific stuff endif