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.

¿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.

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).

  • Codificación de vídeo en Android mediante cv :: Mat y MediaCodec
  • ¿Cómo puedo copiar mis bibliotecas .so en el dispositivo Android?
  • Cómo especificar el archivo de encabezado c en el archivo android.mk
  • Multiprocesamiento en Android
  • La muestra Hello-jni no funciona en Android Studio 2.0 Vista previa
  • Cómo depurar una aplicación en Android con GDBSERVER?
  • ¿Por qué no se está copiando libgnustl_shared.so desde mi APK?
  • ¿Cómo hacer una llamada correcta desde Android a una función no estática en Java? (Cocos2Dx en la mezcla)
  • Firma digital de una biblioteca compartida en Android
  • ¿Cómo importar correctamente una biblioteca de Android con código JNI?
  • Java: acceso al campo final estático en JNI
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.