2016-09-01 2 views
0

dans ndk, je veux construire la bibliothèque avec le même nom de MODULE pour différents ABI de différents fichiers source.Comment construire une bibliothèque avec le même nom de MODULE pour différents ABI de différents fichiers source dans ndk?

J'ai deux sources sous dir: armeabi-V7A et arm64-v8a

Voici mon 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) 

Voici mon Application.mk:

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

mais échoue:
Android NDK: Essayer de définir le module local 'session' dans jni/Android.mk.
Android NDK: Mais ce module était déjà défini par jni/Android.mk.

Comment y parvenir?

Répondre

0

La façon la plus simple serait d'utiliser le fait que votre fichier .so semblent être situés dans les sous-répertoires nommés après l'ABI:

LOCAL_PATH := $(call my-dir) 

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

Si cela avait pas été le cas, vous pouvez avoir vérifié la valeur de TARGET_ARCH_ABI et agi en conséquence. Par exemple:

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 

Il n'y a pas besoin de mettre TARGET_ARCH_ABI vous - il est mis pour vous par le système de construction.