2016-09-01 6 views
0

ndkで、別のソースファイルから異なるABI用の同じモジュール名を持つライブラリを構築したいと思います。ndkの異なるソースファイルから異なるABIの同じモジュール名でライブラリをビルドする方法は?

私はdirの下に2つのソースがあります。ここでarmeabi-v7aとarm64-v8a

は私のAndroid.mkである:ここでは

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := session 
LOCAL_SRC_FILES := armeabi-v7a/libsession.so 
TARGET_ARCH_ABI := armeabi-v7a 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := session 
LOCAL_SRC_FILES := arm64-v8a/libsession.so 
TARGET_ARCH_ABI := arm64-v8a 
include $(PREBUILT_SHARED_LIBRARY) 

は私Application.mkです:

APP_STL := gnustl_static 
APP_CPPFLAGS := -frtti -fexceptions 
APP_ABI := armeabi-v7a arm64-v8a 
APP_PLATFORM := android-21 

しかし失敗する:
Android NDK:jni/Android.mkにローカルモジュール 'session'を定義しようとしています。
Android NDK:このモジュールは、すでにjni/Android.mkによって定義されています。

これを達成する方法は?

答えて

0

最も簡単な方法は、あなたの.soファイルがABIにちなんで名付けられたサブディレクトリに配置されているように見えるという事実を使用することです:それはあなたがチェックしていたかもしれないケースがなかったら

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := session 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libsession.so 
include $(PREBUILT_SHARED_LIBRARY) 

を値はTARGET_ARCH_ABIとなり、それに応じて動作します。たとえば:

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) 
LOCAL_SRC_FILES := foo/libfoo.so 
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a) 
LOCAL_SRC_FILES := bar/libbar.so 
endif 

は自分でTARGET_ARCH_ABIを設定する必要はありません - それはビルドシステムによって自動的に設定されています。

関連する問題