2

armeabi と armeabi7a の両方でコンパイルする必要がある小さな C++ ライブラリがあります。また、armeabi 用にコンパイルするだけで十分な非常に大きな C++ ライブラリもあります。現在、両方のアーキテクチャ用に (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_ABIAPP_ABI := armeabi armeabi-v7aます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

それだけです-ファイルにはarmeabi-v7aapkが含まれていませんlibbiglib.so

于 2013-10-14T11:44:59.993 に答える