Adición de archivos .so a jniLibs en Android Studio: archivos duplicados durante el envasado de APK

Siguiendo varios conjuntos de instrucciones, parece que debo añadir bibliotecas nativas a app/src/main/jniLibs y se app/src/main/jniLibs automágicamente. Sin embargo cuando hago esto (para OpenCV) consigo lo siguiente:

 Error:duplicate files during packaging of APK /.../app/build/outputs/apk/app-debug-unaligned.apk Path in archive: lib/armeabi/libopencv_java.so Origin 1: /.../app/src/main/jniLibs/armeabi/libopencv_java.so Origin 2: /.../build/intermediates/exploded-aar/AppName/.libraries/opencv/unspecified/jni/armeabi/libopencv_java.so You can ignore those files in your build.gradle: android { packagingOptions { exclude 'lib/armeabi/libopencv_java.so' } } Error:Execution failed for task ':app:packageDebug'. > Duplicate files copied in APK lib/armeabi/libopencv_java.so File 1: /.../app/src/main/jniLibs/armeabi/libopencv_java.so File 2: /.../app/src/main/jniLibs/armeabi/libopencv_java.so 

Agregar la sección de exclude no funciona. Sólo hay una copia del archivo, pero de alguna manera se está haciendo referencia dos veces, y parece que la segunda ( build ) incluir es algo generado automáticamente. ¿Que puedo hacer?

En el caso de archivos duplicados de bibliotecas (* .so), la opción de exclusión no ayudará, ya que no podemos excluir completamente los binarios nativos. Hay una opción más en packagingOptions. Es 'pickFirst'. Podemos evitar el error de archivos duplicados e incluir el primero de los encuentros del compilador.

 packagingOptions { pickFirst 'lib/armeabi/libopencv_java.so' } 

ndk-build generaba duplicados de todos los paquetes de OpenCV. Quité todas las bibliotecas .so de mi aplicación, aparte de mi biblioteca de aplicaciones reales, y luego se empaquetó bien.

También tuve este problema. Parece que es porque la documentación y varios temas de conversación sobre la configuración de OpenCV para Android dicen que poner las bibliotecas JNI en la ruta / src / main / jniLibs o / src / main / libs. El problema es que la carpeta / src / es para el código fuente, no para las bibliotecas. La solución es mover la carpeta / main / de / src / a la raíz del proyecto, que es cómo Google documenta esta estructura de proyecto: https://developer.android.com/tools/projects/index.html

También tengo las siguientes configuraciones en build.gradle:

 android { sourceSets { main { jni.srcDirs = [] //disable automatic ndk-build call jniLibs.srcDir 'main/libs' } } } 
  • Grabación de procesamiento en vivo de OpenCV en Android
  • Cómo forzar una cámara de Android a mostrar en modo vertical, o para que yo haga la rotación en su lugar
  • OpenCV en Android Studio
  • Detección de elipse con OpenCV
  • Filtrado de MatOfDMatch
  • Cómo calcular la diferencia entre 2 fotogramas entrantes de la cámara (CV abierto)
  • Opencv aumenta la precisión del umbral
  • Animar la imagen de la cara - usando deformación?
  • Opencv manager package no se ha encontrado ?? Cómo instalar automáticamente?
  • Captura de vista previa de la cámara para su uso en OpenCV. Conversión a RGB y Mat Gris. Java. Androide
  • OpenCV: detección de puntos / discos circulares de dominó
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.