2012-02-02 17 views
7

Tengo un proyecto de Android con una actividad nativa. Esta actividad nativa usa una biblioteca compartida llamada "main" (archivo libmain.so) para comenzar. (con el código de ndk/samples/native-activity)Cómo usar una biblioteca compartida en actividad nativa

Esta aplicación funciona bien.

el módulo de archivo "principal" 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) 

Ahora quiero añadir otra biblioteca compartida (por ejemplo, un motor de juego) que utiliza la biblioteca "principal". He creado un módulo de "juegos" (libgame.so).

Pero cuando enlazo el "principal" con el "juego", como este:

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 el código de cambios!
la aplicación no empezar ya y tengo este error en 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 

Esta caída se debe a la adición de un enlace a una biblioteca compartida ...

Por qué vincular a una biblioteca compartida crea la la aplicación no se carga (bloqueo)?
¿Cómo puedo usar una biblioteca compartida en un proyecto nativo de Android (no-java/native-activity)?
(supongo que puede ser posible ... de lo contrario la actividad nativa es bastante limitada ...)

Gracias! :)

Respuesta

-1

Creo que usted debe listar todas las bibliotecas compartidas en el archivo AndroidManifest.xml:

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

No estoy seguro sobre el orden de las bibliotecas. Intenta cambiar el orden si no funciona.

+0

Gracias! Pero, ¿estás seguro? ¿Ya has probado esto? He intentado esto y he cambiado el orden ... el problema es el mismo (crash) [http://pastie.org/3308037](http://pastie.org/3308037) – Gaetan

+0

Tengo exactamente el mismo problema que tú. Esto no lo solucionó. – Halsafar

+0

Sí, mi respuesta fue incorrecta. Esto se considera un error: http://code.google.com/p/android/issues/detail?id=28329 Solución simple sería la subclase NativeActivity con actividad vacía que solo tiene llamadas System.loadLibrary() para cargar todas las bibliotecas necesarias . –

Cuestiones relacionadas