NDK – Cómo usar una biblioteca .so generada en otro proyecto

He utilizado ndk con éxito para construir y usar un archivo .so en un proyecto. Necesito usar esta biblioteca en otro proyecto. Preferiría no copiar la fuente allí, solo usar la biblioteca. Intentar copiar y pegar todo el libs / armeabi / libcommon.so a la raíz del proyecto no funciona, creo que porque libs / armeabi es una ruta generada por Android.

Entonces, ¿cuál sería la mejor manera de hacerlo?

Estoy usando Eclipse-Galileo y ndk5.

Hay una manera mucho más simple de hacer todo esto.

Digamos que su biblioteca preconstruida se llama “libprebuilt.so”

En la carpeta del proyecto del nuevo proyecto que desea incluir solo la biblioteca precomstackda, haga algo como:

mkdir -p jni/libprebuilt cp libprebuilt.so jni/libprebuilt 

Luego, solo crea un archivo jni / libprebuilt / Android.mk:

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libprebuilt LOCAL_SRC_FILES := libprebuilt.so include $(PREBUILT_SHARED_LIBRARY) 

Luego, cuando hagas ndk-build, copiará esta biblioteca en libs / armeabi / … ¡eso es todo!

Descubrí una forma de hacerlo, así que publíquela aquí en caso de que alguien más se encuentre con ella.

  1. El código que se va a compartir (incluido el contenedor Java JNI, el código nativo, la biblioteca .so) debe estar en un proyecto separado. Convierta esto en un proyecto de Biblioteca haciendo clic con el botón derecho en el nombre del proyecto -> propiedades -> propiedades de Android -> marque “Es Biblioteca”. Este proyecto no se puede ejecutar ahora, pero puede ser referenciado por otros proyectos.

  2. En el proyecto que usará el objeto compartido, agregue una referencia al proyecto de Libarray haciendo clic derecho en el nombre del proyecto -> propiedades -> propiedades de Android -> Biblioteca / “Agregar”. Esto debería mostrar el proyecto de biblioteca creado en el paso anterior. Seleccionarlo

Ahora el .so se puede consultar fácilmente entre diferentes proyectos.

Hay un nombre de paquete dentro de todos los nombres de funciones JNI (Java Native Interface) (como JNIEXPORT void JNICALL Java_com_myapp_myclass_funct ). Así que supongo que debería cambiar el nombre de estos funkcions en la biblioteca y volver a comstackrlo. O tal vez usarlo como un paquete externo en su aplicación.