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 x86またはを指定すると、すべての個別の ABI 値が取得さAPP_ABI := allれます。Application.mk

于 2012-09-27T10:32:31.257 に答える