2011-10-28 20 views
7

Tengo una biblioteca compartida libfoo.so y necesito usarla en mi aplicación de Android.cómo incluir bibliotecas compartidas precompiladas en apk con eclipse

Mi primer intento fue tener en Android.mk:

include $(CLEAR_VARS) 
LOCAL_MODULE := test 
LOCAL_SRC_FILES := test.cpp 
LOCAL_LDLIBS := -L$(PATH_TO_FOO) -lfoo 
include $(BUILD_SHARED_LIBRARY) 

en mi actividad, que tienen:

statis 
{ 
    System.loadLibrary("foo"); 
} 

Esto construye correctamente, sin embargo, me di cuenta de que duerma creado apk incluyen libtal. entonces (también veo que no está copiado a libs/armeabi). Supongo que por esa razón tengo UnsatisfiedLinkError al ejecutar mi aplicación.

vi en algunos otros mensajes que tengo que agregar $ (PREBUILD_SHARED_LIBRARY), por lo que añadir lo siguiente a mi Android.mk:

include $(CLEAR_VARS) 
LOCAL_MODULE:= foo 
LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so 
include $(PREBUILD_SHARED_LIBRARY) 

Pero ahora estoy consiguiendo el error de compilación:

foo: LOCAL_SRC_FILES points to a missing file. 

Estoy seguro de que la ruta es correcta. Tenga en cuenta que libfoo.so tenía originalmente el número de versión al final, aunque tuve que eliminarlo (y dejar solo .so) desde que se quejó ndk-build.

¿Qué estoy haciendo mal?

Respuesta

5

El incluyen parece estar mal escrito:

include $(PREBUILD_SHARED_LIBRARY) 

debería ser

include $(PREBUILT_SHARED_LIBRARY) 
1

En eclipse, agrego una biblioteca estática copiando el archivo en la ruta project/libs/armeabi/y reconstruyo el proyecto después de limpiarlo. Esto incluye el .so en la apk.

+0

Esto no funciona para mí (ADT22, Indigo, NDK-r9). La lib se elimina en la compilación. – WindRider

5

¡Encontré la solución! LOCAL_SRC_FILES no puede tener rutas absolutas o relativas, solo el nombre del archivo. La ruta debe establecerse en LOCAL_PATH.

Así que en mi caso, en lugar de:

LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so 

que tengo ahora:

LOCAL_PATH := $(FOO_PATH) 
LOCAL_SRC_FILES := libfoo.so 

y esto funciona bien.

+0

hey ... ¿puedes poner algo de luz sobre eso? Estoy enfrentando el mismo problema. Tengo 3 archivos .so para cargar, ¿qué debo escribir en el archivo .mk? –

+2

Votación a la baja. LOCAL_SRC_FILES definitivamente puede contener rutas relativas. –

+0

sí estuvo de acuerdo, puede tener caminos relativos. – pauld

Cuestiones relacionadas