Android Studio, Gradle, OpenCV y NDK

Estoy tratando de probar OpenCV Android, en Android Studio, estoy confundido acerca de cómo incluir el NDK.

Lo que quiero hacer es ejecutar las muestras que vienen con OpenCV. De las 6 muestras siempre me las arreglé para ejecutar 4 con éxito. Las excepciones eran la detección de rostros y la actividad nativa.

Sospecho que la razón es que no he configurado mi NDK correctamente.

Busque en Google encontré un montón de discusiones pero realmente no las entiendo. Esta es mi primera vez que estoy tratando de trabajar tanto con el NDK como con OpenCV, y mi comprensión de Gradle es limitada.

He establecido una variable de entorno en mi .bash_profile

Export ANDROID_NDK = pathTo / android-ndk-r9

No entiendo cómo conseguir esto al estudio.

Veo referencia a jniFolder pero no entiendo cuáles son y debo cuidar en este momento. Stackoverflow.com/questions/17767557

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> pkgTask.jniFolders = new HashSet<File>() pkgTask.jniFolders.add(new File(projectDir, 'native-libs')) 

}

¿Qué se supone que debo hacer con esta pasta al final de mi archivo build.gradle?

En resumen, mis preguntas son.

  1. ¿Cómo puedo obtener Android Studio para leer la variable NDK?
  2. ¿Qué son exactamente los jniFolders?
  3. ¿Es suficiente con pegar al final de mi archivo build.gradle?

Discusiones de Grupos de Google sobre Gradle y NDK


Para cualquier persona que viene a través de esto esto es cómo lo resolví aparte de Xaviers anwser. Primero leí OVERVIEW.html que viene con el NDK, en el directorio docs. Luego compilé los archivos .mk y .cpp en un archivo .so. Hice esto inplace en el directorio de jni de la muestra Esto creó el archivo .so en la carpeta de las libras que copié al destino según lo dado por Xavier.

Si tienes bibliotecas que construyes con el ndk y quieres ponerlas en un proyecto androide habilitado para gradle (usando la versión 0.7. + Del plugin), solo puedes ponerlas en

 src/main/jniLibs/<abi>/libfoo.so 

por ejemplo:

 src/main/jniLibs/armeabi-v7a/libfoo.so src/main/jniLibs/x86/libfoo.so 

Y se empaquetarán automáticamente.

Si desea conservarlos en la carpeta libs nativo, puede colocar lo siguiente en su archivo gradle:

 android { sourceSets.main { jniLibs.srcDirs = ['native-libs'] } } 

Todo esto realmente es decir gradle donde la carpeta jniLibs para el conjunto de fuentes principal es (en relación con la raíz del proyecto).

El fragmento que mostró está haciendo algo diferente. Está diciendo a la tarea del paquete que incluya también algunas bibliotecas nativas. Se trataba de un hack que solía funcionar en una versión anterior utilizando API no documentada de la tarea que ya no son compatibles.

  • JNI- java.lang.UnsatisfiedLinkError: Método nativo no encontrado
  • Reconocimiento y seguimiento de objetos en movimiento más rápido en Android
  • Cómo unir png con alpha / transparencia en un marco en tiempo real
  • El círculo de Hough no detecta los ojos del iris
  • Problema al usar OpenCV2.3.1 con la actividad de Android Native
  • OpenCV para Android - formación SVM con descriptores SURF
  • Falló la aserción de OpenCV nMatToBitmap
  • OpenCV de Android: No se encontró identificador de recurso para el atributo 'camera_id' en el paquete
  • OpenCV para programas de ejemplo de Android que muestran error
  • ¿Cuándo necesitamos el NDK para OpenCV Android
  • Diferencia entre OpenCV y OpenCL
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.