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