NDK-Cómo utilizar un generated.so biblioteca en otro proyecto


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 simplemente usar la biblioteca. Intentar copiar y pegar todo 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 & ndk5.

Author: OceanBlue, 2011-04-15

3 answers

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

Digamos que su biblioteca prediseñada se llama "libprebuilt.so"

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

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

Entonces, 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 haga ndk-build, copiará esta biblioteca en libs/armeabi/ ... eso es todo!

 44
Author: gnychis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-20 19:19:15

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

  1. El código a ser compartido (incluyendo el Java JNI wrapper, native code, .so library), debe estar en un proyecto separado. Convierta esto en un proyecto de biblioteca haciendo clic con el botón derecho en nombre del proyecto properties> propiedades Android> Propiedades de Android > > marca de verificación "Es biblioteca". Este proyecto no se puede ejecutar ahora, pero puede ser referenciado por otros proyectos.

  2. En el proyecto que utilizará el objeto compartido, agregue una referencia al proyecto Libarray haciendo clic con el botón derecho en nombre del proyecto name> propiedades Android> Propiedades de Android Library> 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.

 20
Author: OceanBlue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-20 18:58:45

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 a recompilarlo. O tal vez usarlo como paquete externo en su aplicación.

 7
Author: Komi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-14 21:42:46