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' } } } 
  • System.LoadLibrary (libname) se estrella en el chipset Nvidia Tegra 2 (Android Samsung Tab) en código Javacv
  • Gire VideoCapture en OpenCV en Android
  • Ejemplo de OpenCV Template Matching en Android
  • Configurar el modo de escena de la cámara para OpenCV en Android
  • OpenCV instalador independiente opencv
  • OpenCV referencias indefinidas
  • Resolver avisos NDK obsoletos en Android Studio
  • Error de enlace no satisfecho - OpenCV para Android No nativo
  • NDK ¿La manipulación del mapa de bits usando el color azul de OpenCv es anaranjada?
  • Reconocimiento de imágenes con SURF con OpenCV en Android
  • Representación del modelo 3D de realidad aumentada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.