2

我有一个必须为 armeabi 和 armeabi7a 编译的小型 c++ 库。我还有一个非常大的 c++ 库,只需要为 armeabi 编译。现在它们正在为两种架构编译(使用 NDK),但这使我的 .apk 非常大。是否可以针对仅针对 armeabi 编译的大库?我该怎么做?

我的文件夹结构是这样的:

/jni/biglib/
/jni/smalllib/
/jni/Application.mk
/jni/Android.mk

我的 /jni/Application.mk 文件包含:

APP_ABI := armeabi-v7a armeabi
APP_OPTIM := release

我的根 /jni/Android.mk 文件结合了每个库的 Android.mk 文件:

LOCAL_PATH := $(call my-dir)
LOCAL_C_INCLUDE := $(LOCAL_PATH)/include

include $(addprefix $(LOCAL_PATH)/, $(addsuffix /Android.mk, \
    biglib \
    smalllib \
))
4

1 回答 1

4

这绝对是可能的。有一些代码片段可以帮助您(没有针对 biglib 和 smallib 的 Android.mk 的确切内容,我无法为您提供更多帮助)。

1) 更改APP_ABIto APP_ABI := armeabi armeabi-v7ain 的顺序Application.mk

2)修改你的根Android.mk

LOCAL_PATH := $(call my-dir)
LOCAL_C_INCLUDE := $(LOCAL_PATH)/include

# biglib is not built for armeabi-v7a
ifneq "$(TARGET_ARCH_ABI)" "armeabi-v7a"
  include $(LOCAL_PATH)/biglib/Android.mk
endif

# ----- cut here -----
# Place this snippet to every module which needs biglib, or where convenient.
# Now you will link against armeabi version of biglib.
ifeq "$(TARGET_ARCH_ABI)" "armeabi-v7a"
  LOCAL_LDFLAGS += $(LOCAL_PATH)/../obj/local/armeabi/libbigLib.so
endif
# ----- cut here -----

include $(LOCAL_PATH)/smalllib/Android.mk

仅此而已- 您的apk文件现在不包含libbiglib.soarmeabi-v7a

于 2013-10-14T11:44:59.993 回答