Cómo construir una biblioteca compartida sin JNI en Android?
Desarrollar una aplicación de Android, que necesita ser una biblioteca compartida. Ya he hecho la misma lib en Linux (usando gcc), así que quiero compilar la misma biblioteca compartida en Android (procesador ARM). Pero NDK sólo suporta JNI. Ahora quiero construir una biblioteca compartida separada sin interacción directa de JNI. Tengo un montón de archivos C y encabezados, por lo que no puedo escribir JNI para todo. Quiero construir mi biblioteca para procesadores ARM. ¿Cómo puedo hacer esto?
my stuture is ----->JNI ---->myfile.c(jni c code) ----->android.mk(here i call my two shared lib) folder1 --->include ----src ---->lib(here i will get my shared lib) folder 2 ----->include ----->src ----->lib(here i will get my 2nd shared lib)
Aquí quiero construir mi biblioteca compartida por separado y luego lo llamaré. ¿Es posible construir un shred lib sin JNI en Android?
- ¿Qué es el método Descriptor / signature para byte byte array usando JNI?
- Cómo conectar una biblioteca C a la aplicación de iOS
- ¿Cómo puedo capturar SIGSEGV (error de segmentación) y obtener un seguimiento de pila bajo JNI en Android?
- Llamar a un objeto java guardado a través de JNI desde un hilo diferente
- Acceda al objeto JNI a la capa de Java como puntero de referencia
- Señal fatal 11 (SIGSEGV)
- Comparar imágenes SIFT / SURF detalles en archivos .yml OpenCV?
- Accede al GPS en Android desde C ++
- ¿Cómo puedo copiar mis bibliotecas .so en el dispositivo Android?
- Módulos anidados ndk de Android
- Utilizar una clase simple de C ++ en Android NDK
- JNI de Android no encuentra archivos de encabezado de biblioteca estándar de C ++
- ¿Qué causa exactamente un error de "spin on suspend" en Android?
Android NDK no establece requisitos para el cumplimiento de JNI de los binarios construidos con él. Pero por lo general las aplicaciones de Android se escriben en Java, y cuando usan componentes nativos, el camino natural es usar JNI.
Android NDK proporciona un comando ndk-build rico y fácil de usar, que requiere que prepares al menos un archivo de Android.mk
que sea usado por su sistema make. En muchos casos vale la pena el esfuerzo de preparar dicho archivo basado en su makefile (s). Pero si el proyecto que porta desde otra plataforma utiliza funciones avanzadas de configure
o Cmake
, puede omitir completamente el Android.mk
y utilizar la cadena de herramientas independiente que forma parte del NDK, tal como se describe en la documentación oficial de NDK. Tenga en cuenta que Android no admite toda la glibc de Linux, sino un subconjunto llamado biónico . El apoyo STL tampoco es obvio, tienes que elegir una de las 7 opciones !
Puede detenerse aquí, obtener la biblioteca compartida o un archivo ejecutable y usarlos de manera tradicional en Linux. Usted puede construir su aplicación de Android en C ++ .
Pero el enfoque más fácil es construir una aplicación Java Android utilizando Android SDK, y llamar a algunos métodos nativos a través de JDK. Necesitará un contenedor .so
para eso, una biblioteca que exporta funciones JNI a Java y llama a las bibliotecas que no son JNI a su vez. En Android.mk
puede consultar estas bibliotecas con LOCAL_SHARED_LIBRARIES
. Puede encontrar la siguiente pregunta útil para esta parte: ndk build library fuera del árbol de origen del proyecto principal .
Tendrá que cargar las bibliotecas nativas "manualmente" en su código Java. El cargador del sistema solo busca referencias no resueltas en la carpeta /system/lib
.
El lugar convencional es el constructor estático de la clase Java que utiliza los métodos nativos. El orden de carga es importante. Si libone.so
depende de libtwo.so
, y libjni.so
depende de libone
y libtwo
, tendrás algo así como
{ System.Load("two"); System.Load("one"); System.Load("jni"); }
También debe asegurarse de que el constructor SDK de Android encuentre los archivos en el libs/armeabi
o libs-armeabi-v7a
cuando cree el archivo APK .
Es posible construir una biblioteca nativa sin escribir ningún C-código específico de JNI
. Android.mk
crear archivos de Android.mk
y Application.mk
para su biblioteca. Usted tiene un makefile
válido listo, así que usted puede utilizarlo para hacer un Android.mk
.
Application.mk
puede ser como sigue:
APP_OPTIM := release APP_PLATFORM := android-7 APP_STL := gnustl_static APP_CPPFLAGS += -frtti APP_CPPFLAGS += -fexceptions APP_CPPFLAGS += -DANDROID APP_ABI := armeabi-v7a APP_MODULES := <put-the-name-of-your-library-here>
Utilice ndk-build
para compilar la biblioteca.
- Cómo validar editar texto con para permitir que el usuario introduzca entero y flotar para el campo de precio en android
- Android: Fuera de memoria en una asignación de bytes (android.graphics.Bitmap)