Plug-in Android Gradle 0.7.0: "file duplicati durante il packaging di APK"


324

Utilizzo del plug-in Android Gradle 0.7.0 con il seguente 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à l'errore 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

Stamattina le cose funzionavano bene prima di aggiornare Android Studio. Qualche idea?

EDIT: Sono stato in grado di risolverlo temporaneamente eseguendo comandi come

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

fino a quando tutti gli errori duplicati sono scomparsi.



2
Questo sembra essere bug code.google.com/p/android/issues/detail?id=61573 . Non so perché in questa versione abbia iniziato solo a creare problemi.
Scott Barta,

bloccato con lo stesso problema. Deciso di rimanere su Android Studio 0.3.7 e gradle plugin 0.6.3 fino a quando il bug non viene risolto
mente

6
Dovresti essere libero dalle tue parole: non stai usando il gradle 0.7.0 - è il plugin gradle per Android. Che utilizza il gradle (con wrapper) nella versione 1.9.0. Formulazioni sbagliate porteranno a confusione, oltre al contesto dato.
onigunn,

1
Si prega di notare l' pickFirstopzione disponibile dal Grado 0.9.1 .
JJD

Risposte:


475

A partire da Android Studio versione 0.8.14

È necessario aggiungere:

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

al tuo build.gradlefile.

Storia:

Secondo il commento 14 in questo bug: https://issuetracker.google.com/issues/36982149#comment14 questo è un bug nella v0.7.0 del plug-in Android Gradle e dovrebbe essere risolto presto in 0.7.1.

Ecco le note di quel bug sull'aggiunta per 0.7.1:

0.7.1 è uscito con la correzione per questo.

Il DSL per escludere i file è:

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

Puoi aggiungere tutte le istruzioni di esclusione che desideri. Il valore è il percorso dell'archivio. Nessun jolly o supporto globale ancora.

I nomi di file "LICENSE.txt" e "NOTICE.txt" fanno distinzione tra maiuscole e minuscole. Prova anche con "license.txt" e "notice.txt".


12
Grazie! Ho anche dovuto escludere 'META-INF / NOTICE.txt';)
Climbatize il

71
Giorno dopo giorno mi stupisco di come i programmatori avrebbero potuto essere remotamente produttivi prima dell'arrivo dello stackoverflow. Grazie per la correzione! Ho dovuto invece escludere META-INF / LICENSE e / NOTICE. (Nessun testo, anche sull'ultimo grado.)
domenukk,

3
Quale file dovrei modificare e dove può essere trovato? grazie, Eyal.
Eyal

2
@ um.anusorn Sean ti ha dato un buon esempio per un file gradle che esclude questi file dalle librerie durante il packaging. Questo è ciò che ho nel mio: packagingOptions {exclude 'META-INF / LICENSE' esclude 'META-INF / NOTICE' esclude 'META-INF / DEPENDENCIES' esclude 'META-INF / license.txt' esclude 'META-INF / dependenices.txt 'exclude' META-INF / notice.txt '}
praneetloke

4
Bug ancora prevalente nella v0.12 degli strumenti costruiti .. Solo per dire
Nilzor,

149

Nel mio caso ho dovuto includere diverse esclusioni aggiuntive. Sembra che non piacciano le espressioni regolari che avrebbero reso questo un bel rivestimento.

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

Avevo solo bisogno LICENSEe NOTICEdopo aver aggiunto commons-lang3.
theblang,

Questo mi ha aiutato (ho AndroidAnnotations + modello Spring REST). Con la necessità di aggiungere tali hack, questo prodotto IntelliJ inizia terribilmente ad assomigliare a Eclipse ...
javaxian,

Non so quale influenza, ma questo è davvero utile.
CopperCash

Non ha funzionato per me, mostra ancora Avvertenza: Dipendenza org.apache.httpcomponents: httpclient: 4.3 viene ignorato per il debug in quanto potrebbe essere in conflitto con la versione interna fornita da Android. In caso di problemi, riconfezionalo con jarjar per cambiare i pacchetti di classe
VVB

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

4
Avevo bisogno del .txtsuffisso.
theblang,

1
Qualcos'altro che sto facendo mi ha riportato qui e non avevo bisogno del .txtsuffisso. Quindi immagino YMMV (o MMMV a seconda del periodo dell'anno).
theblang

31

Dai un'occhiata al commento di Sakiboy !


Risposta obsoleta

Dal Grado 0.9.1 è supportato quanto segue:

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

Ulteriori informazioni nelle note sulla versione di Gradle .


3
Questa è una soluzione migliore in quanto gli sviluppatori hanno l'obbligo di includere questi file quando usano software open source.
Louth,

1
Bella opzione, ma questo commento è totalmente sbagliato. Verrà inclusa solo la licenza della prima libreria, tutto il resto verrà escluso.
Igor Čordaš,

1
questo è utile se 2 librerie usano gli stessi file .so
Fabian,

Posso usarlo per due JAR che contengono lo stesso file .class? Ho incluso due JAR che contengono entrambi org / xmlpull / v1 / XmlPullParser.class
WillC,

2
@PSIXO, si può vedere la risposta qui sotto, se si desidera includere tutte le licenze: stackoverflow.com/a/47828425/2371425
Sakiboy

12

Lo stesso problema quando esporto la libreria httclient-4.3.5 in Android Studio 0.8.6 ho bisogno di includere questo:

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

La libreria comprime il prossimo vaso:

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

8

Questo errore esiste ancora in 0,8 + / 1,10

Con Jackson

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

Ho dovuto includere il suggerimento sopra prima che potesse essere compilato

exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'

come escludere "META-INF / services / com.fasterxml.jackson.core.JsonFactory". Quale file devo modificare?
UmAnusorn,

6

È più di un errore

Sotto apply plugin: 'android-library'

Aggiungi questo ::

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

In caso di file duplicati è facile, guarda JARsotto la directory META-INFe vedi cosa causa l'errore. Potrebbe essere multiplo. Nel mio caso il plugin Couchbase Lite. Man mano che aggiungi più plugin, avrai bisogno di più eccezioni


Domanda stupida: dov'è quel file JAR?
WillC,

In Android Studio, l'esecuzione di Gradle con il --info flag mi consente di vedere il registro delle classi che viene aggiunto all'apk e quindi posso cercare verso l'alto per trovare la voce di registro per la stessa classe aggiunta da un JAR diverso. Questo mi ha anche mostrato il percorso del file di entrambi i file JAR. Non sono riuscito a trovare un buon modo per scegliere un file .class rispetto all'altro, quindi ho modificato uno dei file JAR e rimosso il duplicato .class
WillC

4

Lo stesso problema quando ho usato 'org.springframework.android:spring-android-rest-template:2.0.0.M1' in Android Studio 1.0.1. Ho bisogno di includerlo inbuild.gradle

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

3

Questo funziona per me:

android {
   packagingOptions {
       exclude 'LICENSE.txt'
   }
}


2

Il problema è che la cartella META-INF non verrà filtrata in modo che più voci di NOTICEo LICENSEcausino duplicati durante la creazione e si tenta di copiarle insieme.

Correzione rapida sporca:

Apri il .jarfile nella tua .gradle/caches/...cartella (con uno strumento compatibile con zip) e rimuovi o rinomina i file nella META-INFcartella che causa l'errore (usualmente NOTICEo LICENSE). (So ​​che è anche nel PO, ma per me non è stato molto chiaro finché non ho letto il forum di Google)

MODIFICARE:

Questo è stato risolto in 0.7.1. Aggiungi i file di confusione da escludere.

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

Oh scusa, ora capisco.
UmAnusorn,

Forse la risposta peggiore possibile: alterare i vasetti nella cache gradle può cambiare il loro checksum, e di conseguenza non funzionerà a lungo ... inoltre, quelli non sono i tuoi vasetti
Riduidel,

Sì, è per questo che dice "Dirty Quick Fix" in grassetto. Anche la soluzione corretta è solo un paragrafo di distanza. Ti rendi conto che è stato scritto in un momento in cui non esisteva una soluzione pulita, ma le persone avevano ancora bisogno di compilare le loro app.
Patrick Favre,

2

Lo stesso qui 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'
}

Ho perso circa 2 giorni per quello strano errore ... Perché succede ancora nel Gradle 1.0.0? Questo è molto inquietante per i neofiti ... Comunque, grazie per quelle informazioni ho pensato che fosse sul mio codice :)


2

Importante sapere in quale file si tratta di questo errore (nel tuo esempio è META-INF / LICENSE.txt), nel mio caso era in META-INF / LICENSE [senza ".txt"], e quindi nel file META-INF / ASL2.0, quindi ho aggiunto al mio build.gradle queste righe:

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

Molto importante (!) -> aggiungi il nome del file nello stesso stile, che vedi nel messaggio di errore: il testo fa distinzione tra maiuscole e minuscole e c'è una differenza tra * .txt e * (senza "txt") .


2

Se vuoi fare la tua parte come sviluppatore, utilizzando librerie open source, dovresti provare a includere tutte quelle licenze open source all'interno del tuo apk. Per fare ciò, puoi usare il metodo di unione nel tuo packagingOptions.

Esempio:

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

Questa risposta è migliore dell'uso pickFirstperché quel metodo prende solo la prima licenza che trova e ignora tutto il resto, rendendolo un po 'inutile in questo caso.

Quindi in breve, usa il mergemetodo per includere tutte quelle licenze da quelle librerie open source kickass che hai utilizzato.

Maggiori informazioni su Gradle PackagingOptions .


2

Ho notato questo commento di commit in AOSP, la soluzione sarà quella di escludere alcuni file usando DSL. Probabilmente quando viene rilasciato 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'
      }
    }

sì, e hanno appena scritto le note di rilascio sul sito di costruzione, quindi spero che presto caricheranno il manufatto nella centrale maven in modo che possiamo usarlo!
Matt Wolfe,

1

Nel mio caso, devo solo aggiungere al file build.gradle del progetto:

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

   ...
}

0

In Android Studio 1.1.0 avevo bisogno di nomi in minuscolo:

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

0

I file "LICENSE.txt" e "NOTICE.txt" fanno distinzione tra maiuscole e minuscole. Quindi per la libreria Android SPring ho dovuto aggiungere

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

0

La rimozione di .txt dopo la LICENZA ha rimosso il mio errore:

packagingOptions {
    exclude 'META-INF/LICENSE'
}

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'
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.