Vinculación de bibliotecas de terceros (libs.a) con NDK
Estoy construyendo un apk de Android que usa algunas bibliotecas nativas de un tercero, estas libs están en Static Object Code Library (archivos .a) y necesito escribir un wrapper JNI para acceder a estas funciones en Java.
Esas libs ya están compiladas con un compilador cruzado y son de forma nativa para Android.
- Embalaje RAW AAC en el contenedor m4a?
- FindClass no puede encontrar la clase Java personalizada
- Cómo devolver array int de Java a JNI
- SQLite con Android NDK
- ¿Utilizar un archivo mapeado en memoria como un archivo de intercambio?
¿Cómo puedo compilar mis fuentes JNI enlazando a las funciones de los archivos .a libs?
Este es mi Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS := -llog LOCAL_MODULE := ndk1 LOCAL_SRC_FILES := native.c include $(BUILD_SHARED_LIBRARY)
Cuando compilo, recibo sólo el archivo native.c compilado.
- Java.lang.UnsatisfiedLinkError: No se pudo cargar eposprint: findLibrary returned null
- Cómo utilizar la API de malla experimental con Project Tango
- Cómo imprimir los mensajes de registro con el marco de Android
- JNI: Del código C a Java y JNI
- Android NDK desborda la tabla de referencia local JNI de dalvik
- Utilizar C ++ con Android ndk / jni
- Android: error al cargar la biblioteca
- Cómo obtener el tiempo de computación en NDK
Para hacer eso.
Tengo que declarar estas libs como módulos. Como el siguiente.
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := curl LOCAL_SRC_FILES := libcurl.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY)
Con un archivo libcurl.a en la misma carpeta que este archivo Android.mk y un / include fodler con los encabezados.
Ahora en el módulo principal sólo declarar la lib y el Android NDK se encargará del resto.
LOCAL_PATH := $(call my-dir) include $(call all-subdir-makefiles) include $(CLEAR_VARS) LOCAL_LDLIBS := -llog -ldl LOCAL_MODULE := rmsdk LOCAL_SRC_FILES := curlnetprovider.cpp native.c LOCAL_STATIC_LIBRARIES := curl include $(BUILD_SHARED_LIBRARY)
Nota .. debe incluir el archivo Android.mk del módulo antes de usarlo. Lo hago con la llamada all-subdir-makefiles.
Tus libs tienen que ser compilados para tu objetivo específico (Arm), para hacer eso creo que tienes que usar la cadena de herramientas como se describe en docs / STANDALONE-TOOLCHAIN.html (en tu carpeta ndk-r5).
- No se puede importar android.support.design.widget.NavigationView
- FORTIFY_SOURCE: FD_SET: descriptor de archivo> = FD_SETSIZE. Llamar a abortar ()