¿Cómo puedo resolver “Archivos duplicados copiados en APK META-INF / *”

Estoy trabajando en una aplicación comercial de Android. También estoy usando algunas bibliotecas con licencia bajo diferentes tipos de licencia, algunas de las cuales indican lo siguiente:

Si la biblioteca tiene un archivo “AVISO” con notas de atribución, debe incluir ese AVISO cuando distribuya

(Uno de ellos tiene licencia bajo Apache License 2.0, por ejemplo).

Hay más de una biblioteca. Cuando hago la comstackción con gradle o con Android Studio, obtengo el siguiente error de comstackción:

* What went wrong: Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt 

Las respuestas que encontré hasta ahora en Internet y stackoverflow sugieren eliminar el archivo license.txt (notice.txt u otros archivos que podrían interferir de esta manera) desde el paquete añadiendo al archivo build.gradle lo siguiente:

 packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' } 

Ver por ejemplo: Android Studio 0.4 Archivos duplicados copiados en APK META-INF / LICENSE.txt

De acuerdo con la licencia de esas bibliotecas ( Apache License 2.0, por ejemplo), los archivos de licencia y notificación deben incluirse .

Mi pregunta: ¿Cómo puedo agregar varios archivos relacionados con la licencia (como license.txt , notice.txt , etc.) de gradle a mi proyecto para cumplir con las licencias ( detalles técnicos: los textos de las licencias se concatenarán)?

Hay una solución si solo tiene una licencia con el nombre license.txt (léase: todas las copias de license.txt son idénticas):

 packagingOptions { pickFirst 'META-INF/license.txt' } 

De lo contrario, Google también lanzó un complemento de Gradle para administrar las licencias de dependencias. Mira aquí . No lo intenté, pero parece que es capaz de agregar todas las dependencias e incluso generar una actividad que muestre todas esas licencias.

Agregue los siguientes en el respectivo archivo build.gradle

 packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/MANIFEST.MF' } 

Me enfrenté al mismo problema con mi aplicación. Debe asegurarse de no haber agregado ninguna biblioteca dos veces. Si siguió la documentación de firebase https://firebase.google.com/docs/android/setup

Entonces no deberías agregar la biblioteca de firebase dentro de android studio, es decir file-> project structure-> cloud-> firebase

Tienes que hacer solo uno de los dos para usar firebase en tu aplicación de Android.

Al final, limpia y vuelve a ejecutar tu aplicación.

Puedes agregar licencias múltiples en gradle ver esto

Creo que debes incluir solo estas opciones en build.gradle:

 android { packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' } } 

Sin duda, funcionará

packagingOptions {excluye ‘META-INF / LICENSE.txt’ excluye ‘META-INF / NOTICE.txt’}