tools - Android Gradle plugin 0.7.0: "archivos duplicados durante el empaquetado de APK"
install gradle android studio (20)
A partir de la versión de Android Studio 0.8.14
Usted debe agregar:
android {
packagingOptions {
exclude ''META-INF/LICENSE.txt''
exclude ''META-INF/NOTICE.txt''
exclude ''...''
}
}
a su archivo build.gradle
.
Historia:
De acuerdo con el comentario 14 en este error: https://issuetracker.google.com/issues/36982149#comment14 trata de un error en v0.7.0 del complemento Gradle de Android, y se solucionará pronto en 0.7.1.
Aquí están las notas de ese error sobre la adición para 0.7.1:
0.7.1 está fuera con la solución para esto.
El DSL para excluir archivos es:
android {
packagingOptions {
exclude ''META-INF/LICENSE.txt''
}
}
Puede agregar tantas instrucciones de exclusión como desee. El valor es la ruta de archivo. No hay soporte comodín o glob todavía.
Los nombres de archivo "LICENCIA.txt" y "AVISO.txt" distinguen entre mayúsculas y minúsculas. Por favor intente con "license.txt" y "notice.txt" también.
Usando Android Gradle plugin 0.7.0 con el siguiente build.gradle
:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''com.android.tools.build:gradle:0.7.0''
}
}
apply plugin: ''android''
repositories {
maven { url "https://android-rome-feed-reader.googlecode.com/svn/maven2/releases" }
maven { url "http://dl.bintray.com/populov/maven" }
mavenCentral()
}
android {
compileSdkVersion 19
buildToolsVersion ''18.1.1''
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
}
buildTypes {
release {
runProguard true
proguardFile getDefaultProguardFile(''proguard-android-optimize.txt'')
}
}
productFlavors {
defaultFlavor {
proguardFile ''proguard-rules.txt''
}
}
sourceSets {
instrumentTest.setRoot(''src/instrumentTest'')
}
}
configurations {
apt
}
ext.androidAnnotationsVersion = ''2.7.1'';
dependencies {
compile ''com.android.support:support-v4:18.0.0''
compile ''com.viewpagerindicator:library:2.4.1@aar''
compile ''com.google.code.android-rome-feed-reader:android-rome-feed-reader:1.0.0-r2''
compile ''org.jdom:jdom:1.1.1-android-fork''
apt "com.googlecode.androidannotations:androidannotations:${androidAnnotationsVersion}"
compile "com.googlecode.androidannotations:androidannotations-api:${androidAnnotationsVersion}"
compile ''com.google.code.gson:gson:2.2.4''
compile ''com.j256.ormlite:ormlite-android:4.47''
compile ''com.j256.ormlite:ormlite-core:4.47''
compile ''org.springframework.android:spring-android-core:1.0.1.RELEASE''
compile ''org.springframework.android:spring-android-rest-template:1.0.1.RELEASE''
compile ''com.prolificinteractive:actionbarsherlock:4.3.1@aar''
compile ''com.google.code.geocoder-java:geocoder-java:0.15''
compile files(''libs/CWAC-Pager.jar'')
}
android.applicationVariants.all { variant ->
aptOutput = file("${project.buildDir}/source/apt_generated/${variant.dirName}")
println "****************************"
println "variant: ${variant.name}"
println "manifest: ${variant.processResources.manifestFile}"
println "aptOutput: ${aptOutput}"
println "****************************"
variant.javaCompile.doFirst {
println "*** compile doFirst ${variant.name}"
aptOutput.mkdirs()
variant.javaCompile.options.compilerArgs += [
''-processorpath'', configurations.apt.getAsPath(),
''-AandroidManifestFile='' + variant.processResources.manifestFile,
''-s'', aptOutput
]
}
}
da el error Duplicate files copied in APK META-INF/LICENSE.txt
:
WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorDebug as it may be conflicting with the internal version provided by Android.
In case of problem, please repackage it with jarjar to change the class packages
WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorRelease as it may be conflicting with the internal version provided by Android.
In case of problem, please repackage it with jarjar to change the class packages
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "aptOutput" on "com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@5705013c", value: "/Users/david/Developer...".
****************************
variant: defaultFlavorDebug
manifest: /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
aptOutput: /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/debug
****************************
Deprecated dynamic property "aptOutput" created in multiple locations.
****************************
variant: defaultFlavorRelease
manifest: /Users/david/Developer/.../build/manifests/defaultFlavor/release/AndroidManifest.xml
aptOutput: /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/release
****************************
:TravelGuard:compileDefaultFlavorDebugNdk UP-TO-DATE
:TravelGuard:preBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorDebugBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorReleaseBuild UP-TO-DATE
:TravelGuard:prepareComProlificinteractiveActionbarsherlock431Library UP-TO-DATE
:TravelGuard:prepareComViewpagerindicatorLibrary241Library UP-TO-DATE
:TravelGuard:prepareDefaultFlavorDebugDependencies
:TravelGuard:compileDefaultFlavorDebugAidl UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugRenderscript UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugBuildConfig UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugAssets UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugManifest UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugSources UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugJava
*** compile doFirst defaultFlavorDebug
/Users/david/Developer/.../src/main/java/com/travelguard/service/TravelGuardService.java:53: cannot find symbol
symbol : class TravelGuardPrefs_
location: class com.travelguard.service.TravelGuardService
TravelGuardPrefs_ travelGuardPrefs;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:14: cannot find symbol
symbol : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:16: cannot find symbol
symbol : class CategoryFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.CategoryFragment_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:17: cannot find symbol
symbol : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:25: cannot find symbol
symbol : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:44: cannot find symbol
symbol : class TravelGuardPrefs_
location: class com.travelguard.ui.CountriesActivity
TravelGuardPrefs_ travelGuardPrefs;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:18: cannot find symbol
symbol : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:19: cannot find symbol
symbol : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:21: cannot find symbol
symbol : class InstructionsFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.InstructionsFragment_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:36: cannot find symbol
symbol : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:40: cannot find symbol
symbol : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:41: cannot find symbol
symbol : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:55: cannot find symbol
symbol : class TravelGuardPrefs_
location: class com.travelguard.ui.MainActivity
TravelGuardPrefs_ travelGuardPrefs;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:17: cannot find symbol
symbol : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:23: cannot find symbol
symbol : class TravelGuardPrefs_
location: class com.travelguard.ui.TermsActivity
TravelGuardPrefs_ travelGuardPrefs;
^
Note: Starting AndroidAnnotations annotation processing
Note: AndroidManifest.xml file found: /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
Note: Number of files generated by AndroidAnnotations: 22
Note: Generating source file: com.travelguard.service.SmartTravellerService_
Note: Generating source file: com.travelguard.service.SmartTravellerWebservice_
Note: Generating source file: com.travelguard.service.TravelGuardPrefs_
Note: Generating source file: com.travelguard.service.TravelGuardService_
Note: Generating source file: com.travelguard.service.TravelGuardWebservice_
Note: Generating source file: com.travelguard.ui.AdviceActivity_
Note: Generating source file: com.travelguard.ui.CategoriesActivity_
Note: Generating source file: com.travelguard.ui.ContactDetailActivity_
Note: Generating source file: com.travelguard.ui.ContactListActivity_
Note: Generating source file: com.travelguard.ui.ContactTravelGuardActivity_
Note: Generating source file: com.travelguard.ui.CountriesActivity_
Note: Generating source file: com.travelguard.ui.InformationActivity_
Note: Generating source file: com.travelguard.ui.InstructionsActivity_
Note: Generating source file: com.travelguard.ui.MainActivity_
Note: Generating source file: com.travelguard.ui.TermsActivity_
Note: Generating source file: com.travelguard.ui.TravelGuardActivity_
Note: Generating source file: com.travelguard.ui.fragments.AdviceDetailFragment_
Note: Generating source file: com.travelguard.ui.fragments.AdviceFragment_
Note: Generating source file: com.travelguard.ui.fragments.AssistanceFragment_
Note: Generating source file: com.travelguard.ui.fragments.CategoryFragment_
Note: Generating source file: com.travelguard.ui.fragments.ContactFragment_
Note: Generating source file: com.travelguard.ui.fragments.InstructionsFragment_
Note: Time measurements: [Whole Processing = 913 ms], [Generate Sources = 358 ms], [Extract Manifest = 163 ms], [Process Annotations = 158 ms], [Extract Annotations = 120 ms], [Validate Annotations = 82 ms], [Find R Classes = 28 ms],
Note: Time measurements: [Whole Processing = 0 ms],
Note: Time measurements: [Whole Processing = 0 ms],
warning: The following options were not recognized by any processor: ''[androidManifestFile]''
Note: /Users/david/Developer/.../src/main/java/com/travelguard/ui/ContactDetailActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /Users/david/Developer/.../src/main/java/com/travelguard/service/SmartTravellerService.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:TravelGuard:preDexDefaultFlavorDebug UP-TO-DATE
:TravelGuard:dexDefaultFlavorDebug
:TravelGuard:processDefaultFlavorDebugJavaRes UP-TO-DATE
:TravelGuard:validateDebugSigning
:TravelGuard:packageDefaultFlavorDebug
Error: duplicate files during packaging of APK /Users/david/Developer/.../build/apk/TravelGuard-defaultFlavor-debug-unaligned.apk
Path in archive: META-INF/LICENSE.txt
Origin 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
Origin 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.2/397f4731a9f9b6eb1907e224911c77ea3aa27a8b/commons-codec-1.2.jar
:TravelGuard:packageDefaultFlavorDebug FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task '':TravelGuard:packageDefaultFlavorDebug''.
> Duplicate files copied in APK META-INF/LICENSE.txt
File 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
File 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 21.957 secs
Las cosas funcionaban bien esta mañana antes de actualizar Android Studio. ¿Algunas ideas?
EDITAR: Pude arreglarlo temporalmente ejecutando comandos como
zip -d spring-android-core-1.0.1.RELEASE.jar META-INF/notice.txt
Hasta que todos los errores duplicados desaparecieron.
¡Echa un vistazo al comentario de Sakiboy !
Respuesta obsoleta
Desde Gradle 0.9.1 se soporta lo siguiente:
android.packagingOptions {
pickFirst ''META-INF/LICENSE.txt''
}
Más información en las notas de lanzamiento de Gradle .
Creo que necesitas incluir solo estas opciones en build.gradle :
packagingOptions {
exclude ''META-INF/DEPENDENCIES''
exclude ''META-INF/NOTICE''
exclude ''META-INF/LICENSE''
}
ps la misma respuesta de mi publicación en: Error :: archivos duplicados durante el empaquetado de APK
El mismo problema cuando exporto la biblioteca httclient-4.3.5 en Android Studio 0.8.6 necesito incluir esto:
packagingOptions{
exclude ''META-INF/DEPENDENCIES''
exclude ''META-INF/NOTICE''
exclude ''META-INF/NOTICE.txt''
exclude ''META-INF/LICENSE''
exclude ''META-INF/LICENSE.txt''
}
La biblioteca contiene el contenido del siguiente jar:
commons-codec-1.6.jar
commons-logging-1.1.3.jar
fluent-hc-4.3.5.jar
httpclient-4.3.5.jar
httpclient-cache-4.3.5.jar
httpcore-4.3.2.jar
httpmime-4.3.5.jar
El mismo problema cuando usé ''org.springframework.android:spring-android-rest-template:2.0.0.M1'' en Android Studio 1.0.1. Necesito incluir esto en build.gradle
android{
...
packagingOptions{
exclude ''META-INF/notice.txt''
exclude ''META-INF/license.txt''
}
...
}
El problema es que la carpeta META-INF no se filtrará, por lo que varias entradas de NOTICE
o LICENSE
causan duplicados cuando se crean y se intenta copiarlos juntos.
Corrección rápida sucia:
Abra el archivo .jar
en su .gradle/caches/...
(con una herramienta compatible con zip) y elimine o cambie el nombre de los archivos en la carpeta META-INF
que causan el error (generalmente NOTICE
o LICENSE
). (Sé que eso también está en el OP, pero para mí no estaba muy claro hasta que leí el foro de Google)
EDITAR:
Esto fue corregido en 0.7.1. Solo agregue los archivos confilcting para excluir.
android {
packagingOptions {
exclude ''META-INF/LICENSE''
}
}
Eliminando .txt después de que la LICENCIA eliminó mi error:
packagingOptions {
exclude ''META-INF/LICENSE''
}
En Android Studio 1.1.0 necesitaba nombres en minúsculas:
packagingOptions{
exclude ''META-INF/license.txt''
exclude ''META-INF/notice.txt''
}
En mi caso tuve que incluir varias exclusiones adicionales. Parece que no le gustan las expresiones regulares que habrían hecho de esto una buena frase.
android {
packagingOptions {
exclude ''META-INF/DEPENDENCIES.txt''
exclude ''META-INF/DEPENDENCIES''
exclude ''META-INF/dependencies.txt''
exclude ''META-INF/LICENSE.txt''
exclude ''META-INF/LICENSE''
exclude ''META-INF/license.txt''
exclude ''META-INF/LGPL2.1''
exclude ''META-INF/NOTICE.txt''
exclude ''META-INF/NOTICE''
exclude ''META-INF/notice.txt''
}
}
En mi caso, solo necesito agregar al archivo build.gradle del proyecto:
android {
packagingOptions {
exclude ''META-INF/notice.txt''
exclude ''META-INF/license.txt''
}
...
}
Es importante saber en qué archivo se encuentra este error (en su ejemplo es META-INF / LICENSE.txt), en mi caso estaba en META-INF / LICENSE [sin ".txt"], y luego en el archivo META-INF / ASL2.0, así que agregué a mi build.gradle estas líneas:
android {
packagingOptions {
exclude ''META-INF/LICENSE''
exclude ''META-INF/ASL2.0''
}
}
Muy importante (!) -> agregue el nombre del archivo en el mismo estilo, que lo ve en el mensaje de error: el texto distingue entre mayúsculas y minúsculas, y hay una diferencia entre * .txt y * (sin "txt") .
Es más que un error
Bajo apply plugin: ''android-library''
Agrega esto ::
android {
packagingOptions {
exclude ''META-INF/ASL2.0''
exclude ''META-INF/LICENSE''
exclude ''META-INF/NOTICE''
}
}
En el caso de archivos duplicados, es fácil, mire dentro del JAR
debajo del directorio META-INF
y vea qué está causando el error. Podría ser múltiple. En mi caso el plugin de Couchbase Lite. A medida que agregue más complementos, necesitará más excepciones.
Este error todavía existe en 0.8 + / 1.10
Con jackson
compile ''com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.2.2''
Tenía que incluir, así como la sugerencia anterior antes de que se compilara
exclude ''META-INF/services/com.fasterxml.jackson.core.JsonFactory''
Esto funciona para mí:
android {
packagingOptions {
exclude ''LICENSE.txt''
}
}
Lo mismo aquí con
dependencies {
compile ''org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0''
}
packagingOptions {
exclude ''META-INF/DEPENDENCIES''
exclude ''META-INF/LICENSE''
exclude ''META-INF/NOTICE''
}
Perdí como 2 días por ese extraño error ... ¿Por qué sigue sucediendo esto en gradle 1.0.0? Eso es muy preocupante para los novatos ... De todos modos, gracias por esa información, pensé que estaba en mi código :)
Los archivos "LICENCE.txt" y "NOTICE.txt" distinguen entre mayúsculas y minúsculas. Así que para SPring biblioteca de Android tuve que añadir
android {
packagingOptions {
exclude ''META-INF/LICENSE.txt''
exclude ''META-INF/NOTICE.txt''
exclude ''META-INF/license.txt''
exclude ''META-INF/notice.txt''
}
}
Noté este comentario de confirmación en AOSP, la solución será excluir algunos archivos usando DSL. Probablemente cuando se libere 0.7.1.
commit e7669b24c1f23ba457fdee614ef7161b33feee69
Author: Xavier Ducrohet <--->
Date: Thu Dec 19 10:21:04 2013 -0800
Add DSL to exclude some files from packaging.
This only applies to files coming from jar dependencies.
The DSL is:
android {
packagingOptions {
exclude ''META-INF/LICENSE.txt''
}
}
Si desea hacer su parte como desarrollador, utilizando bibliotecas de código abierto, debe intentar incluir todas esas licencias de código abierto en su apk
. Para hacer esto, puede usar el método de merge en sus packagingOptions
.
Ejemplo:
packagingOptions {
// This will get include every license and notice regardless of what dir it’s in.
merge ''**/LICENSE.txt''
merge ''**/NOTICE.txt''
merge ''**/notice.txt''
merge ''**/license.txt''
merge ''**/NOTICE''
merge ''**/LICENSE''
merge ''**/notice''
merge ''**/license''
merge ''**/LGPL2.1''
// This will exclude any README files, regardless of the dir or the file type.
exclude ''**/README.*''
}
Esta respuesta es mejor que usar pickFirst
porque ese método solo elige la primera licencia que encuentra e ignora el resto, por lo que es inútil en este caso.
En resumen, use el método de merge
para incluir todas esas licencias de las bibliotecas de código abierto de kickass que ha estado usando.
Más información sobre Gradle
PackagingOptions .
packagingOptions {
exclude ''META-INF/DEPENDENCIES.txt''
exclude ''META-INF/DEPENDENCIES''
exclude ''META-INF/dependencies.txt''
exclude ''META-INF/LICENSE.txt''
exclude ''META-INF/LICENSE''
exclude ''META-INF/license.txt''
exclude ''META-INF/LGPL2.1''
exclude ''META-INF/NOTICE.txt''
exclude ''META-INF/NOTICE''
exclude ''META-INF/notice.txt''
}
packagingOptions {
exclude ''META-INF/DEPENDENCIES.txt''
exclude ''META-INF/LICENSE.txt''
exclude ''META-INF/NOTICE.txt''
}