36

我正在尝试将 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 并能够动态引用它。有任何想法吗?

4

2 回答 2

35

检查TARGET_ARCH_ABI

ifeq($(TARGET_ARCH_ABI), armeabi-v7a)
  # v7a-specific stuff
endif
于 2012-09-27T06:23:50.083 回答
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 x86APP_ABI := all在您的中,Application.mk您将获得每个单独的 ABI 值。

于 2012-09-27T10:32:31.257 回答