Android Gradle plugin 0.7.0: "archivos duplicados durante el empaquetado de APK"

324

Usando el complemento Android Gradle 0.7.0 con lo 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 solucionarlo temporalmente ejecutando comandos como

zip -d spring-android-core-1.0.1.RELEASE.jar META-INF/notice.txt

hasta que desaparecieron todos los errores duplicados.

David Lawson
fuente
Ver también stackoverflow.com/questions/20673888/…
Scott Barta
2
Esto parece ser el código de error.google.com/p/android/issues/detail?id=61573 . No sé por qué solo comenzó a ser problemático para usted en esta versión.
Scott Barta
atrapado con el mismo problema. Decidí permanecer en Android Studio 0.3.7 y gradle plugin 0.6.3 hasta que se solucione el error
mente
66
Debes estar libre de tus palabras: no estás usando Gradle 0.7.0, es el complemento de Android Gradle. Que usa gradle (con wrapper) en la versión 1.9.0. Las palabras incorrectas conducirán a confusión, además del contexto dado.
onigunn
1
Tenga en cuenta la pickFirstopción disponible desde Gradle 0.9.1 .
JJD

Respuestas:

475

A partir de Android Studio versión 0.8.14

Deberías agregar:

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

a su build.gradlearchivo

Historia:

Según el comentario 14 en este error: https://issuetracker.google.com/issues/36982149#comment14, este es un error en v0.7.0 del complemento Android Gradle, y se solucionará pronto en 0.7.1.

Aquí están las notas de ese error sobre la adición de 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 declaraciones de exclusión como desee. El valor es la ruta del archivo. Aún no hay comodines ni soporte global.

Los nombres de archivo "LICENSE.txt" y "NOTICE.txt" distinguen entre mayúsculas y minúsculas. Pruebe también con "license.txt" y "notice.txt".

Scott Barta
fuente
12
¡Gracias! También tuve que excluir 'META-INF / NOTICE.txt';)
Climbatize
71
Día a día me sorprende cómo los programadores podrían haber sido remotamente productivos antes de que llegara el stackoverflow. Gracias por la solución! Tuve que excluir META-INF / LICENCIA y / AVISO en su lugar. (Sin texto, incluso en el último gradle).
Domenukk
3
¿Qué archivo debo editar y dónde puedo encontrarlo? gracias Eyal
eyal
2
@ um.anusorn Sean le ha dado un buen ejemplo para un archivo gradle que excluye estos archivos de las bibliotecas durante el empaquetado. Esto es lo que tengo en el mío: packagingOptions {excluir 'META-INF / LICENSE' excluir 'META-INF / NOTICE' excluir 'META-INF / DEPENDENCIES' excluir 'META-INF / license.txt' excluir 'META-INF / dependenices.txt 'excluir' META-INF / notice.txt '}
praneetloke
44
Todavía error frecuente en v0.12 de herramientas integradas. Solo digo
Nilzor
149

En mi caso, tuve que incluir varias exclusiones adicionales. Parece que no le gustan las expresiones regulares, lo que habría hecho de esta 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'
    }
}
vincentjames501
fuente
Solo necesitaba LICENSEy NOTICEdespués agregué commons-lang3.
theblang
Este me ayudó (tengo AndroidAnnotations + Spring REST template). Al tener que agregar tales hacks, este producto IntelliJ comienza a parecerse terriblemente a Eclipse ...
javaxian
No sé cuál afecta, pero esto es realmente útil.
CopperCash el
No funcionó para mí, todavía muestra Advertencia: dependencia org.apache.httpcomponents: httpclient: 4.3 se ignora para la depuración ya que puede estar en conflicto con la versión interna proporcionada por Android. En caso de problemas, vuelva a empaquetarlo con jarjar para cambiar los paquetes de clase
VVB
46
packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
}
usuario3121011
fuente
44
Necesitaba el .txtsufijo
theblang
1
Algo más que estoy haciendo me trajo de vuelta aquí, y no necesitaba el .txtsufijo. Supongo que YMMV (o MMMV dependiendo de la época del año)
theblang
31

¡Echa un vistazo al comentario de Sakiboy !


Respuesta desactualizada

Desde Gradle 0.9.1 se admite lo siguiente:

android.packagingOptions {
    pickFirst 'META-INF/LICENSE.txt'
}

Más información en las notas de la versión de Gradle .

JJD
fuente
3
Esta es una mejor solución ya que los desarrolladores tienen la obligación de incluir estos archivos cuando usan software de código abierto.
Louth
1
Buena opción, pero este comentario es totalmente incorrecto. Solo se incluirá la licencia de la biblioteca de abetos y el resto quedará fuera.
Igor Čordaš 01 de
1
esto es útil si 2 bibliotecas están usando los mismos archivos .so
Fabian
¿Puedo usar eso para dos JAR que contienen el mismo archivo .class? Tengo dos JAR incluidos que ambos contienen org / xmlpull / v1 / XmlPullParser.class
WillC
2
@PSIXO, puede ver la respuesta a continuación si desea incluir TODAS las licencias: stackoverflow.com/a/47828425/2371425
Sakiboy
12

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

El contenido zip de la biblioteca 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
ferdiado
fuente
8

Este error todavía existe en 0.8 + / 1.10

Con Jackson

compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.2.2'

Tuve que incluir así como la sugerencia anterior antes de que compilara

exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'
Ryan Heitner
fuente
cómo excluir 'META-INF / services / com.fasterxml.jackson.core.JsonFactory'. ¿Qué archivo debo editar?
UmAnusorn
6

Es mas de un error

Debajo 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 JARdel META-INFdirectorio y vea qué está causando el error. Podría ser múltiple. En mi caso, el complemento Couchbase Lite. A medida que agregue más complementos, necesitará más excepciones

Pian0_M4n
fuente
Pregunta estúpida: ¿dónde está ese archivo JAR?
WillC
En Android Studio, ejecutar Gradle con la --info bandera me permitió ver el registro de las clases que se agregaron al apk, y luego pude buscar hacia arriba para encontrar la entrada del registro para la misma clase que se agrega desde un JAR diferente. Esto también me mostró la ruta del archivo a ambos archivos JAR. No pude encontrar una buena manera de elegir un archivo .class sobre el otro, así que modifiqué uno de los archivos JAR y
eliminé el
4

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 enbuild.gradle

android{
...
    packagingOptions{
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
    }
...
}
saneryee
fuente
3

Esto funciona para mi:

android {
   packagingOptions {
       exclude 'LICENSE.txt'
   }
}
Sestertius
fuente
2

El problema es que la carpeta META-INF no se filtrará, por lo que múltiples entradas NOTICEo LICENSEcausarán duplicados al compilar y se intenta copiarlas juntas.

Solución rápida sucia:

Abra el .jararchivo en su .gradle/caches/...carpeta (con una herramienta compatible con zip) y elimine o cambie el nombre de los archivos en la META-INFcarpeta que causan el error (generalmente NOTICEo LICENSE). (Sé que eso también está en el OP, pero para mí no estaba realmente claro hasta que leí el foro de Google)

EDITAR:

Esto se arregló en 0.7.1. Simplemente agregue los archivos confusos para excluir.

android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
    }
}
Patrick Favre
fuente
Oh, lo siento, ahora lo entiendo.
UmAnusorn
Tal vez la peor respuesta posible: alterar los frascos en el caché de gradle puede cambiar su suma de verificación, y como consecuencia no funcionará por mucho tiempo ... además, esos no son tus frascos
Riduidel
Sí, por eso dice "Solución rápida sucia" en negrita. Además, la solución correcta está a solo un párrafo de distancia. Te das cuenta de que fue escrito en un momento en que no había una solución limpia, pero la gente aún necesitaba compilar sus aplicaciones.
Patrick Favre
2

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 inquietante para los novatos ... De todos modos, gracias por esa información, pensé que estaba en mi código :)

clément francomme
fuente
2

Importante saber en qué archivo se trata este error (en su ejemplo es META-INF / LICENSE.txt), en mi caso fue 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") .

Alexander Logvinenko
fuente
2

Si desea hacer su parte como desarrollador, utilizando bibliotecas de código abierto, debe intentar incluir todas esas licencias de código abierto dentro de su apk. Para hacer esto, puede usar el método de fusión en su 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 usarla pickFirstporque ese método solo selecciona la primera licencia que encuentra e ignora el resto, dejándola inútil en este caso.

En resumen, use el mergemétodo para incluir todas esas licencias de las bibliotecas de código abierto de kickass que ha estado utilizando.

Más información sobre Gradle PackagingOptions .

Sakiboy
fuente
2

Noté este comentario de confirmación en AOSP, la solución será excluir algunos archivos usando DSL. Probablemente cuando se lanza 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'
      }
    }
Maxime
fuente
sí, y acaban de escribir las notas de la versión en el sitio de construcción, ¡así que espero que carguen el artefacto en Maven Central pronto para que podamos usar esto!
Matt Wolfe
1

En mi caso, solo necesito agregar al archivo build.gradle del proyecto:

android {
  packagingOptions {
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
  }

   ...
}
K. Stopa
fuente
0

En Android Studio 1.1.0 necesitaba nombres en minúsculas:

packagingOptions{
      exclude 'META-INF/license.txt'
      exclude 'META-INF/notice.txt'
}
kandroidj
fuente
0

Los archivos "LICENSE.txt" y "NOTICE.txt" distinguen entre mayúsculas y minúsculas. Entonces, para la biblioteca SPring de Android, tuve que agregar

android {
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/notice.txt'
    }
}
Igor Vuković
fuente
0

Eliminar .txt después de LICENCIA eliminó mi error:

packagingOptions {
    exclude 'META-INF/LICENSE'
}
JSONParser
fuente
0
  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'
}
alias26
fuente