2012-02-02 10 views
7

Ho un progetto Android con un'attività nativa. Questa attività nativa utilizza una libreria condivisa denominata "main" (file libmain.so) per l'avvio. (con il codice di ndk/samples/attività nativa)Come utilizzare una libreria condivisa in attività nativa

Questa app funziona correttamente.

il file "principale" modulo Android.mk:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_MODULE := main 
LOCAL_SRC_FILES := main.cpp 

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM 

LOCAL_STATIC_LIBRARIES := android_native_app_glue game 

include $(BUILD_SHARED_LIBRARY) 

$(call import-module,android/native_app_glue) 

Ora voglio aggiungere un'altra libreria condivisa (ad esempio un motore di gioco) utilizzato dalla libreria "principale". Ho costruito un modulo "gioco" (libgame.so).

Ma quando collego il "principale" con il "gioco", in questo modo:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_MODULE := main 
LOCAL_SRC_FILES := main.cpp 

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../game 

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM 
LOCAL_LDLIBS += $(LOCAL_PATH)/../../libs/$(TARGET_ARCH_ABI)/libgame.so 

LOCAL_STATIC_LIBRARIES := android_native_app_glue game 

include $(BUILD_SHARED_LIBRARY) 

$(call import-module,android/native_app_glue) 

con il codice di cambiamenti!
l'applicazione non avviare più e non ho questo errore in Logcat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myproject/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/data/com.mycompany.myproject/lib/libmain.so 

Questo incidente è dovuto all'aggiunta di link per una libreria condivisa ...

Perché il collegamento a una libreria condivisa rendono il l'app non si sta caricando (crash)?
Come posso utilizzare una libreria condivisa in un progetto Android nativo (no-java/native-activity)?
(Suppongo che sia possibile ... altrimenti l'attività nativa è piuttosto limitata ...)

Grazie! :)

risposta

-1

credo è necessario elencare tutte le vostre librerie condivise nel file AndroidManifest.xml:

<meta-data android:name="android.app.lib_name" android:value="game" /> 
<meta-data android:name="android.app.lib_name" android:value="main" /> 

Non sono sicuro circa l'ordine delle librerie. Prova a cambiare l'ordine se non funziona.

+0

Grazie! Ma sei sicuro? Hai già provato questo? Ho provato questo e cambiando l'ordine ... il problema è lo stesso (crash) [http://pastie.org/3308037](http://pastie.org/3308037) – Gaetan

+0

Sto avendo lo stesso identico problema di tu. Questo non l'ha risolto – Halsafar

+0

Sì, la mia risposta non era corretta. Questo è considerato un bug: http://code.google.com/p/android/issues/detail?id=28329 Simple workaround sarebbe una sottoclasse NativeActivity con attività vuota che ha solo chiamate System.loadLibrary() per caricare tutte le librerie necessarie . –