Android Gradle plugin 0.7.0: "arquivos duplicados durante o empacotamento do APK"

324

Usando o plugin Android Gradle 0.7.0 com o seguinte 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
        ]
    }
}

dá o erro 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

As coisas estavam funcionando bem esta manhã antes de eu atualizar o Android Studio. Alguma ideia?

EDIT: Consegui corrigi-lo temporariamente executando comandos como

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

até que todos os erros duplicados desaparecessem.

David Lawson
fonte
Veja também stackoverflow.com/questions/20673888/…
Scott Barta
2
Este parece ser o código code.google.com/p/android/issues/detail?id=61573 . Não sei por que isso só começou a ser problemático para você neste lançamento.
Scott Barta
preso com o mesmo problema. Decidiu permanecer no Android Studio 0.3.7 e no gradle plugin 0.6.3 até que o bug seja resolvido
mente
6
Você deve ter clareza de suas palavras: Você não está usando o gradle 0.7.0 - é o plug-in do Android gradle. Que usa gradle (com wrapper) na versão 1.9.0. Palavras erradas levarão a confusão - além do contexto fornecido.
Ongunn
1
Observe a pickFirstopção disponível desde o Gradle 0.9.1 .
JJD

Respostas:

475

A partir do Android Studio versão 0.8.14

Você deve adicionar:

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

para o seu build.gradle arquivo.

História:

De acordo com o comentário 14 deste bug: https://issuetracker.google.com/issues/36982149#comment14 este é um bug na v0.7.0 do plug-in Android Gradle e deve ser corrigido em breve na versão 0.7.1.

Aqui estão as notas desse bug sobre a adição para 0.7.1:

0.7.1 está com a correção para isso.

O DSL para excluir arquivos é:

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

Você pode adicionar quantas instruções de exclusão desejar. O valor é o caminho do arquivo morto. Ainda não há suporte a curinga ou glob.

Os nomes de arquivos "LICENSE.txt" e "NOTICE.txt" diferenciam maiúsculas de minúsculas. Por favor, tente com "license.txt" e "notice.txt" também.

Scott Barta
fonte
12
Obrigado! Eu também tive que excluir 'META-INF / NOTICE.txt';)
Climbatize
71
Dia após dia, fico impressionado com a forma como os programadores poderiam ter sido remotamente produtivos antes da chegada do fluxo de pilha. Obrigado pela correção! Eu tive que excluir META-INF / LICENSE e / AVISO. (No txt, mesmo no ultimo nivel).
domenukk
3
Que arquivo devo editar e onde pode ser encontrado? obrigado, Eyal.
03:
2
@ um.anusorn Sean deu um bom exemplo para um arquivo gradle que exclui esses arquivos das bibliotecas durante o empacotamento. Isso é o que tenho na minha: packagingOptions {excluir 'META-INF / LICENSE' excluir 'META-INF / AVISO' excluir 'META-INF / DEPENDENCIES' excluir 'META-INF / license.txt' excluir 'META-INF / dependenices.txt 'excluir' META-INF / notice.txt '}
praneetloke 04/04
4
Bug ainda prevalente em v0.12 de ferramentas construídas .. Basta dizer
Nilzor
149

No meu caso, tive que incluir várias exclusões adicionais. Parece que não gosta de expressões regulares, o que tornaria isso um ótimo recurso.

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
fonte
Eu só precisava LICENSEe NOTICEdepois adicionei commons-lang3.
theblang
Este me ajudou (eu tenho o modelo AndroidAnnotations + Spring REST). Com a necessidade de adicionar tais hacks este produto IntelliJ terrivelmente começa a assemelhar-se Eclipse ...
javaxian
Não sei qual deles afeta, mas isso é realmente útil.
precisa saber é o seguinte
Não funcionou para mim, ainda mostra Aviso: A dependência org.apache.httpcomponents: httpclient: 4.3 é ignorada para depuração, pois pode estar em conflito com a versão interna fornecida pelo Android. Em caso de problema, reembale-o novamente com o jarjar para alterar os pacotes de classe
VVB 8/16/16
46
packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
}
user3121011
fonte
4
Eu precisava do .txtsufixo.
theblang
1
Outra coisa que estou fazendo me trouxe de volta aqui e não precisava do .txtsufixo. Então eu acho que YMMV (ou MMMV, dependendo da época do ano).
theblang
31

Dê uma olhada no comentário de Sakiboy !


Resposta desatualizada

No Gradle 0.9.1, o seguinte é suportado:

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

Mais informações nas notas de versão Gradle .

JJD
fonte
3
Essa é uma solução melhor, pois os desenvolvedores têm a obrigação de incluir esses arquivos quando usam software de código aberto.
Louth
1
Boa opção, mas este comentário está totalmente errado. Somente a licença da biblioteca abs será incluída e todo o restante será deixado de fora.
Igor Čordaš
1
isso é útil se duas bibliotecas estiverem usando os mesmos arquivos .so #
Fabian
Posso usar isso para dois JARs que contêm o mesmo arquivo .class? Eu tenho dois JARs incluído que ambos contêm org / xmlpull / v1 / XmlPullParser.class
WillC
2
@PSIXO, você pode ver a resposta abaixo se desejar incluir TODAS as licenças: stackoverflow.com/a/47828425/2371425 #
Sakiboy 15/17/17
12

O mesmo problema ao exportar a biblioteca httclient-4.3.5 no Android Studio 0.8.6, preciso incluir o seguinte:

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

A biblioteca zip o conteúdo do próximo 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
fonte
8

Este bug ainda existe em 0.8 + / 1.10

Com Jackson

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

Eu tive que incluir, além da sugestão acima, antes de compilar

exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'
Ryan Heitner
fonte
como excluir 'META-INF / services / com.fasterxml.jackson.core.JsonFactory'. Que arquivo eu devo editar?
UmAnusorn
6

É mais do que um erro

Debaixo apply plugin: 'android-library'

Adicione isso ::

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

No caso de arquivos duplicados, é fácil, procure dentro JARdo META-INFdiretório e veja o que está causando o erro. Pode ser múltiplo. No meu caso, o plugin Couchbase Lite. Conforme você adiciona mais plugins, você precisará de mais exceções

Pian0_M4n
fonte
Pergunta estúpida: onde está esse arquivo JAR?
WillC
No Android Studio, executando Gradle com o --info sinalizador, deixe-me ver o log de classes sendo adicionado ao apk e, em seguida, eu poderia pesquisar para cima para encontrar a entrada de log da mesma classe que foi adicionada a partir de um JAR diferente. Isso também me mostrou o caminho do arquivo para os dois arquivos JAR. Eu não poderia encontrar uma boa maneira de escolher um .class arquivo sobre o outro, então eu modificado um dos arquivos JAR e removeu o .class duplicado
WillC
4

O mesmo problema quando usei 'org.springframework.android:spring-android-rest-template:2.0.0.M1' no Android Studio 1.0.1. Eu preciso incluir isso embuild.gradle

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

Isso funciona para mim:

android {
   packagingOptions {
       exclude 'LICENSE.txt'
   }
}
Sestertius
fonte
3

Eu acho que você precisa incluir apenas essas opções no build.gradle :

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

ps mesma resposta do meu post em: Erro :: arquivos duplicados durante o empacotamento do APK

Gent Berani
fonte
2

O problema é que a pasta META-INF não será filtrada, de modo que várias entradas NOTICEou LICENSEcausem duplicatas ao criar e tente copiá-las juntas.

Correção rápida suja:

Abra o .jararquivo na sua .gradle/caches/...pasta (com uma ferramenta compatível com zip) e remova ou renomeie os arquivos na META-INFpasta que causam o erro (normalmente NOTICEou LICENSE). (Eu sei que isso também está no OP, mas para mim não ficou muito claro até eu ler o fórum do google)

EDITAR:

Isso foi corrigido no 0.7.1. Basta adicionar os arquivos confidenciais para excluir.

android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
    }
}
Patrick Favre
fonte
Oh desculpe, eu só entendo isso agora.
UmAnusorn 03/04
Talvez a pior resposta possível: alterando os frascos no cache Gradle pode mudar a sua checksum, e como consequência não vai funcionar por muito tempo ... além disso, thoses não são seus frascos
Riduidel
Sim, é por isso que diz "Correção rápida suja" em negrito. Além disso, a solução correta está a apenas um parágrafo de distância. Você percebe que foi escrito em um momento em que não havia solução limpa, mas as pessoas ainda precisavam compilar seus aplicativos.
Patrick Favre
2

O mesmo aqui com

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

Perdi dois dias por esse erro estranho ... Por que isso ainda está acontecendo no gradle 1.0.0? Isso é muito perturbador para iniciantes ... Enfim, obrigado por essa informação que eu pensei que estava no meu código :)

clément francomme
fonte
2

É importante saber em que arquivo se trata esse erro (no exemplo, é META-INF / LICENSE.txt), no meu caso, estava em META-INF / LICENSE [sem ".txt"] e depois no arquivo META-INF / ASL2.0, então eu adicionei ao meu build.gradle estas linhas:

android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/ASL2.0'
    }
}

Muito importante (!) -> adicione o nome do arquivo no mesmo estilo, para vê-lo na mensagem de erro: o texto diferencia maiúsculas de minúsculas e há uma diferença entre * .txt e * (sem "txt") .

Alexander Logvinenko
fonte
2

Se você deseja fazer sua parte como desenvolvedor, utilizando bibliotecas de código aberto, tente incluir todas essas licenças de código aberto na sua apk. Para fazer isso, você pode usar o método de mesclagem no seu packagingOptions.

Exemplo:

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

Essa resposta é melhor do que usar, pickFirstporque esse método escolhe apenas a primeira licença que encontra e desconsidera todo o resto, tornando-a inútil nesse caso.

Portanto, em resumo, use o mergemétodo para incluir todas as licenças dessas bibliotecas de código-fonte aberto que você está usando.

Mais informações sobre Gradle PackagingOptions .

Sakiboy
fonte
2

Notei este comentário de confirmação no AOSP, a solução será excluir alguns arquivos usando DSL. Provavelmente quando 0.7.1 for lançado.

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
fonte
sim, e eles acabaram de escrever as notas de versão no site de construção, então esperamos que eles enviem o artefato para o maven central em breve para que possamos usá-lo!
Matt Wolfe
1

No meu caso, só preciso adicionar ao arquivo build.gradle do projeto:

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

   ...
}
K. Stopa
fonte
0

No Android Studio 1.1.0, eu precisava de nomes em minúsculas:

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

Os arquivos "LICENSE.txt" e "NOTICE.txt" diferenciam maiúsculas de minúsculas. Então, para a biblioteca android do SPring, eu tive que adicionar

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

A remoção de .txt após LICENSE removeu meu erro:

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