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' } } } 
  • ¿Cómo realizar el recorte automático para el documento Reconocer la imagen con la cámara?
  • OpenCV2.4 con la actividad de Android Native
  • ¿Cómo reducir los partidos en el reconocimiento de patrones de OpenCV?
  • Detección de logo de OpenCV - ¿Qué usar?
  • OpenCV Native Samples no están construyendo
  • Procesamiento de imágenes OpenCV en el servicio de Android
  • Cómo obtener GNU C en las preferencias
  • Reconocimiento facial en Android
  • Mejora del rendimiento de OpenCV Android: seguimiento rápido de objetos
  • Documentación de OpenCV para Android
  • Incluir OpenCV en el paquete de aplicaciones de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.