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.
- Detección de objetos android opencv
- Reconocimiento de rostro inestable con OpenCV
- Todas mis preguntas sobre opencv_traincascade
- Muestra de detección de caras de opencv
- Confusión entre los tipos de datos OpenCv4Android y C ++
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.
- ¿Cómo puedo obtener Android Studio para leer la variable NDK?
- ¿Qué son exactamente los jniFolders?
- ¿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.
- ¿Cómo Funciona OpenCV ORB Feature Detector?
- Problema de orientación de la cámara OpenCV
- Detección de objetos Android OpenCV
- Cómo encontrar las esquinas de un objeto Rect en openCV?
- Convertir Vec4i a Java openCV
- Qt Android proyecto con OpenCV - tbb errores de compilación
- ¿Es el cambio de contexto utilizando un tiempo significativo?
- TemplateMatching mattoBitmap opencv para android
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.