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?
- Bibliotecas no del sistema en los indicadores de vinculador
- Cómo hacer tostadas de otro hilo (sans runOnUiThread)
- Correspondencia de plantillas en Android usando openCV
- Android JavaCV dilema, NoClassDefFoundError lanzado dentro del método 'dibujar' cuando se crea IplImage
- Conversión de OpenCV C ++ a Java para problemas de detección de formas
- Umbral en Android con opencv
- Mejora del rendimiento de OpenCV Android: seguimiento rápido de objetos
- Cómo detectar los bordes largos de la pared para preparar la máscara y recolorar
- Programación Android Camera.PreviewCallback (con OpenGL y OpenCV)
- Reconocimiento de imágenes con SURF con OpenCV en Android
- Detección de bordes con OpenCV (Canny)
- OpenCV - Java: función inRange
- Guardar los vectores de características de ORB usando OpenCV4Android (java API)
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