update udacity studio para fundamentals descargar configurar advanced java android gradle

java - udacity - ¿Cómo resuelvo "Duplicar archivos copiados en APK META-INF/*"



udacity android advanced (6)

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 de Apache License 2.0, por ejemplo).

Hay más de una biblioteca. Cuando hago la compilación con gradle o con Android Studio obtengo el siguiente error de compilació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 license.txt (Notice.txt u otros archivos que podrían interferir así) del paquete agregando 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 (por ejemplo, Apache License 2.0 ), se deben incluir los archivos de licencia y aviso.

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


Agregue lo siguiente en el archivo build.gradle respectivo

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'' }


Creo que solo debe incluir 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'' } }


Enfrenté el mismo problema con mi solicitud. Debe asegurarse de no haber agregado ninguna biblioteca dos veces. Si ha seguido la documentación de Firebase https://firebase.google.com/docs/android/setup

Entonces no debe agregar la biblioteca de Firebase dentro de Android Studio, es decir, archivo-> estructura de proyecto-> nube-> firebase

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

Al final, limpie y vuelva a ejecutar su aplicación.


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

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

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


Puede agregar varias licencias en gradle, vea esto


Seguramente funcionará

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