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?
- ¿Es el cambio de contexto utilizando un tiempo significativo?
- configuración de vídeo opencv a pantalla completa android
- Construcción de TBB con la muestra de OpeCV android
- Cómo agregar punto a MatOfPoint2f?
- ¿Cómo comprobar si dos imágenes son similares o no usando openCV en java?
- En la transformación Circle Hough, ¿cuál es la razón inversa de la resolución del acumulador (dp) y cómo afecta la detección de círculos?
- Todas mis preguntas sobre opencv_traincascade
- Cómo detectar los bordes largos de la pared para preparar la máscara y recolorar
- Aplicación de Android que utiliza tecnología de reconocimiento de imagen
- (OpenCV) no puede encontrar Core.line en Android Studio
- OpenCV Manager Error al detectar hardware en Galaxy S5
- Abrir muestra de muestras de CV para OpenCV Manager descargar
- Cómo hacer tostadas de otro hilo (sans runOnUiThread)
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' } } }
- Extracción de nombres de archivo de los URI de contenido SAF
- Error al cargar el formulario de imagen en Chrome móvil