ndk android android-ndk jni

ndk - android mk



NDK-Cómo usar una biblioteca.so generada en otro proyecto (3)

Descubrí una manera de hacer esto, así que publicarlo aquí en caso de que alguien más se tope con él.

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

  2. En el proyecto que usará el objeto compartido, agregue una referencia al proyecto 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. Selecciónalo

Ahora el .so puede ser referido fácilmente entre diferentes proyectos.

He usado ndk con éxito para compilar y usar un archivo .so en un proyecto. Necesito usar esta biblioteca en otro proyecto. Preferiría no copiar la fuente allí, sino usar la biblioteca.

Tratar de copiar y pegar las 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 un nombre de paquete dentro de todos los nombres de funciones de JNI (Java Native Interface) (como JNIEXPORT void JNICALL Java_com_myapp_myclass_funct ). Así que supongo que deberías cambiar el nombre de estos funkcions en la biblioteca y recompilarlo. O quizás usarlo como paquete externo en su aplicación.


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

Digamos que su biblioteca precompilada se llama "libprebuilt.so"

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

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

Luego, simplemente 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!