我正在尝试配置Android.mk以交叉编译本机代码以支持不同的芯片组,即armeabi,mips和x86。我知道我可以用以下方式配置Application.mk来编译不同芯片组的源代码:
APP_ABI := all
这将触发Android-NDK的构建脚本来编译所有芯片组的源代码。但是,我想动态地告诉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)
这可能吗?如果是这样,有人可以建议如何这样做吗?
更新:我在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并且能够 动态引用它。有什么想法吗?
答案 0 :(得分:33)
检查TARGET_ARCH_ABI
:
ifeq($(TARGET_ARCH_ABI), armeabi-v7a)
# v7a-specific stuff
endif
答案 1 :(得分:29)
有TARGET_ARCH
变量保存正在构建的当前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 := all
或Application.mk
,您将获得每个单独的ABI值。