Uso de bibliotecas pre-construidas y jni en Android Studio

Estoy usando android studio 1.0.2 y estoy tratando de crear una biblioteca de android que utiliza ndk y nativas funciones. Esta es básicamente la arquitectura de mi proyecto:

MyProject ---| MyAndroidApp ---| MyAndroidLibrary ---| jni ---| jniLibs 

En mi biblioteca de Android, tengo un solo envoltorio de c ++ que llama a funciones de una biblioteca compartida. He creado esta biblioteca con ndk-build (funciona perfectamente con eclipse). He añadido esta biblioteca en la carpeta / arquitecturas jniLibs (arm64-v8a, armeabi, armeabi-v7a, mips, mips64, x86 y x86_64). He definido los siguientes sabores en mi MyAndroidLibrary / build.gradle:

 productFlavors { x86 { flavorDimension "abi" ndk { abiFilter "x86" } } arm { flavorDimension "abi" ndk { abiFilter "armeabi-v7a" } } mips { flavorDimension "abi" ndk { abiFilter "mips" } } fat { flavorDimension "abi" } } 

Sin embargo, cuando intento llamar a mis funciones de la biblioteca del código de jni, consigo un error de referencia undefined. En otras palabras, mi biblioteca compartida parece no estar cargada en el lado jni. Pero, cuando quito la llamada de esta función y exploro el .aar que se crea en la salida, puedo recuperar la biblioteca .so.

No estoy muy familiarizado con gradle cosas, así que no estoy seguro de lo que realmente construir.

Lo que estoy buscando es un equivalente estricto de que Android.mk, utilizando gradle:

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mysharedlib LOCAL_SRC_FILES := ../shared/mysharedlib.so LOCAL_EXPORT_C_INCLUDES := ../shared/includes/mysharedlib.h include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := jni LOCAL_SRC_FILES := jni.cpp LOCAL_C_INCLUDES += ../shared/includes/mysharedlib.h LOCAL_LDLIBS := -llog LOCAL_SHARED_LIBRARIES := mysharedlib include $(BUILD_SHARED_LIBRARY) 

Me gustaría llamar a funciones de una biblioteca pre-construida en mi código jni, por ejemplo:

 #include "MyDLL.h" JNIEXPORT jint JNICALL Java_com_iskn_dbapi_DBAPI_getNegative(JNIEnv *env, jclass obj, jint integer) { return MyDLL::getNegative(integer); } 

Gracias por sus respuestas.

Actualmente, el complemento gradle no admite dicha configuración NDK. Ignora a Android.mk existente y genera uno propio (muy limitado) sobre la marcha. Usted puede ver aquí cómo genera (mirar en el método writeMakefile ) y evaluar por su cuenta cómo limitado es un conjunto de opciones, que afectan a su generación.

Prácticamente, para lograr lo que necesita, la mejor manera sería desactivar completamente el gradle limitado NDK apoyo y llamar ndk-build explícitamente. Lea aquí para más detalles.

  • Android ICS 4.0 NDK NewStringUTF se está estrellando la aplicación
  • ¿Cómo acceder a recursos (como sonido, imágenes, etc) directamente desde código nativo usando Android-NDK?
  • ¿El enlace JavaScript de JNI de Android pasa eficientemente TypedArray / ArrayBuffer a Java como una matriz?
  • ¿Utilizar un archivo mapeado en memoria como un archivo de intercambio?
  • Android NDK: ¿Cómo limpiar el código nativo después de reiniciar la actividad?
  • Pasar el puntero de C a Java se convierte en NULL
  • Cómo depurar código nativo en un proyecto de biblioteca de Android?
  • ¿Qué es JNI Graphics o cómo usarlo?
  • Libusb_open_device_with_vid_pid falló al intentar acceder al dispositivo USB
  • Comparar imágenes SIFT / SURF detalles en archivos .yml OpenCV?
  • Ejecutar código en el subproceso principal / UI en Cocos2dx
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.