Android Gradle Plugin 0.7.0: "Doppelte Dateien beim Packen von APK"

324

Verwenden des Android Gradle Plugins 0.7.0 mit den folgenden Funktionen 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
        ]
    }
}

gibt den Fehler 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

Die Dinge haben heute Morgen gut funktioniert, bevor ich Android Studio aktualisiert habe. Irgendwelche Ideen?

BEARBEITEN: Ich konnte es vorübergehend beheben, indem ich Befehle wie ausführte

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

bis alle doppelten Fehler verschwunden waren.

David Lawson
quelle
2
Dies scheint ein Fehlercode zu sein . Google.com/p/android/issues/detail?id=61573 . Ich weiß nicht, warum es in dieser Version für Sie erst problematisch geworden ist.
Scott Barta
mit dem gleichen Problem stecken. Beschlossen, auf Android Studio 0.3.7 und Gradle Plugin 0.6.3 zu bleiben, bis der Fehler behoben ist
mente
6
Sie sollten sich Ihrer Formulierungen klar sein: Sie verwenden Gradle 0.7.0 nicht - es ist das Android Gradle Plugin. Welches Gradle (mit Wrapper) in Version 1.9.0 verwendet. Falsche Formulierungen führen zu Verwirrung - abgesehen vom gegebenen Kontext.
Onigunn
1
Bitte beachten Sie die pickFirstseit Gradle 0.9.1 verfügbare Option .
JJD

Antworten:

475

Ab Android Studio Version 0.8.14

Sie sollten hinzufügen:

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

zu deinem build.gradle Datei.

Geschichte:

Laut Kommentar 14 in diesem Fehler: https://issuetracker.google.com/issues/36982149#comment14 dies ein Fehler in Version 0.7.0 des Android Gradle-Plugins, der in Kürze in Version 0.7.1 behoben werden soll.

Hier sind die Hinweise aus diesem Fehler zum Hinzufügen von 0.7.1:

0.7.1 ist mit dem Fix dafür raus.

Das DSL zum Ausschließen von Dateien lautet:

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

Sie können beliebig viele Ausschlussanweisungen hinzufügen. Der Wert ist der Archivpfad. Noch keine Wildcard- oder Glob-Unterstützung.

Bei den Dateinamen "LICENSE.txt" und "NOTICE.txt" wird zwischen Groß- und Kleinschreibung unterschieden. Bitte probieren Sie es auch mit "license.txt" und "Notice.txt" aus.

Scott Barta
quelle
12
Vielen Dank! Ich musste auch 'META-INF / NOTICE.txt' ausschließen;)
Climbatize
71
Tag für Tag bin ich erstaunt, wie produktiv Programmierer gewesen sein könnten, bevor der Stackoverflow eintraf. Danke für die Fehlerbehebung! Ich musste stattdessen META-INF / LICENSE und / NOTICE ausschließen. (Kein Text, auch nicht auf dem neuesten Gradle.)
Domenukk
3
Welche Datei soll ich bearbeiten und wo kann sie gefunden werden? Danke, Eyal.
Augen
2
@ um.anusorn Sean hat Ihnen ein gutes Beispiel für eine Gradle-Datei gegeben, die diese Dateien beim Packen aus Bibliotheken ausschließt. Dies ist, was ich in meinem habe: packageOptions {ausschließen 'META-INF / LIZENZ' ausschließen 'META-INF / HINWEIS' ausschließen 'META-INF / DEPENDENCIES' ausschließen 'META-INF / Lizenz.txt' ausschließen 'META-INF / dependenices.txt 'exclude' META-INF / Notice.txt '}
praneetloke
4
Immer noch weit verbreiteter Fehler in v0.12 von gebauten Werkzeugen. Nur zu sagen
Nilzor
149

In meinem Fall musste ich einige zusätzliche Ausschlüsse hinzufügen. Es scheint, dass es reguläre Ausdrücke nicht mag, was dies zu einem schönen Einzeiler gemacht hätte.

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
quelle
Ich brauchte nur LICENSEund NOTICEnachdem ich hinzugefügt habe commons-lang3.
Theblang
Dieser hat mir geholfen (ich habe AndroidAnnotations + Spring REST-Vorlage). Mit der
Notwendigkeit
Ich weiß nicht, welche davon betroffen sind, aber das ist wirklich hilfreich.
CopperCash
Bei mir nicht funktioniert, zeigt immer noch Warnung: Abhängigkeit org.apache.httpcomponents: httpclient: 4.3 wird beim Debuggen ignoriert, da dies möglicherweise zu Konflikten mit der von Android bereitgestellten internen Version führt. Im Falle eines Problems packen Sie es bitte mit jarjar neu, um die Klassenpakete zu ändern
VVB
46
packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
}
user3121011
quelle
4
Ich brauchte das .txtSuffix.
Theblang
1
Etwas anderes, das ich tue, hat mich gerade hierher zurückgebracht, und ich brauchte das .txtSuffix nicht. Also denke ich, YMMV (oder MMMV je nach Jahreszeit).
Theblang
31

Schauen Sie sich Sakiboys Kommentar an !


Veraltete Antwort

Ab Gradle 0.9.1 wird Folgendes unterstützt:

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

Weitere Informationen finden Sie in den Versionshinweisen zu Gradle .

JJD
quelle
3
Dies ist eine bessere Lösung, da Entwickler verpflichtet sind, diese Dateien einzuschließen, wenn sie Open Source-Software verwenden.
Louth
1
Schöne Option, aber dieser Kommentar ist völlig falsch. Nur die Lizenz aus der ersten Bibliothek wird mitgeliefert, der Rest wird weggelassen.
Igor Čordaš
1
Dies ist nützlich, wenn 2 Bibliotheken die gleichen .so-Dateien verwenden
Fabian
Kann ich das für zwei JARs verwenden, die dieselbe .class-Datei enthalten? Ich habe zwei JARs enthalten, die beide org / xmlpull / v1 / XmlPullParser.class
WillC
2
@PSIXO, Sie können die Antwort unten sehen, wenn Sie alle Lizenzen einschließen
möchten
12

Das gleiche Problem beim Exportieren der Bibliothek httclient-4.3.5 in Android Studio 0.8.6 muss Folgendes umfassen:

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

Die Bibliothek zip Inhalt das nächste Glas:

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
quelle
8

Dieser Fehler besteht immer noch in 0.8 + / 1.10

Mit Jackson

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

Ich musste den obigen Vorschlag ebenso einfügen, bevor er kompiliert werden konnte

exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'
Ryan Heitner
quelle
wie man 'META-INF / services / com.fasterxml.jackson.core.JsonFactory' ausschließt. Welche Datei soll ich bearbeiten?
UmAnusorn
6

Es ist mehr als ein Fehler

Unter apply plugin: 'android-library'

füge das hinzu ::

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

Bei doppelten Dateien ist es einfach, in JARdas META-INFVerzeichnis zu schauen und zu sehen, was den Fehler verursacht. Es könnte mehrere sein. In meinem Fall Couchbase Lite Plugin. Wenn Sie weitere Plugins hinzufügen, benötigen Sie weitere Ausnahmen

Pian0_M4n
quelle
Dumme Frage: Wo ist diese JAR-Datei?
WillC
Wenn --info ich in Android Studio Gradle mit dem Flag ausführe, kann ich das Protokoll der Klassen anzeigen, die der apk hinzugefügt wurden, und dann nach oben suchen, um den Protokolleintrag für dieselbe Klasse zu finden, die aus einer anderen JAR hinzugefügt wird. Dies zeigte mir auch den Dateipfad zu beiden JAR-Dateien. Ich konnte keinen guten Weg finden, eine .class-Datei über die andere zu wählen, also habe ich eine der JAR-Dateien geändert und die doppelte .class
WillC
4

Das gleiche Problem, als ich 'org.springframework.android:spring-android-rest-template:2.0.0.M1' in Android Studio 1.0.1 verwendet habe. Ich muss dies in aufnehmenbuild.gradle

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

Das funktioniert bei mir:

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

Ich denke, Sie müssen nur diese Optionen in build.gradle aufnehmen :

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

ps gleiche Antwort von meinem Beitrag in: Fehler :: doppelte Dateien beim Packen von APK

Gent Berani
quelle
2

Das Problem ist, dass der META-INF-Ordner nicht gefiltert wird, so dass mehrere Einträge von NOTICEoderLICENSE beim Erstellen Duplikate entstehen und versucht wird, diese zusammen zu kopieren.

Schmutzige Schnellkorrektur:

Öffnen Sie die .jarDatei in Ihrem .gradle/caches/...Ordner (mit einem Zip-kompatiblen Tool) und entfernen oder benennen Sie die Dateien in dem META-INFOrdner um, die den Fehler verursachen (normalerweise NOTICEoder LICENSE). (Ich weiß, dass das auch im OP ist, aber für mich war es nicht wirklich klar, bis ich das Google-Forum gelesen habe)

BEARBEITEN:

Dies wurde in 0.7.1 behoben. Fügen Sie einfach die zu schließenden Dateien hinzu.

android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
    }
}
Patrick Favre
quelle
Oh, tut mir leid, ich verstehe es gerade.
UmAnusorn
Vielleicht die schlechteste Antwort: Wenn Sie die Gläser im Gradle-Cache ändern, ändert sich möglicherweise die Prüfsumme, und infolgedessen funktioniert dies nicht lange. Außerdem sind dies nicht Ihre Gläser
Riduidel
Ja, deshalb steht in fetten Buchstaben "Dirty Quick Fix". Auch die richtige Lösung ist nur einen Absatz entfernt. Sie wissen, dass dies zu einer Zeit geschrieben wurde, in der es keine saubere Lösung gab, die Benutzer jedoch ihre Apps kompilieren mussten.
Patrick Favre
2

Gleiches hier mit

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

Ich habe 2 Tage für diesen seltsamen Fehler verloren ... Warum passiert das immer noch in Gradle 1.0.0? Das ist sehr beunruhigend für Neulinge ... Wie auch immer, danke für diese Info, ich dachte es wäre auf meinem Code :)

clément francomme
quelle
2

Es ist wichtig zu wissen, in welcher Datei dieser Fehler auftritt (in Ihrem Beispiel ist es META-INF / LICENSE.txt), in meinem Fall in META-INF / LICENSE [ohne ".txt"] und dann in der Datei META-INF / ASL2.0, also habe ich meinem build.gradle folgende Zeilen hinzugefügt:

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

Sehr wichtig (!) -> Fügen Sie den Namen der Datei im gleichen Stil hinzu, den Sie in der Fehlermeldung sehen: Der Text unterscheidet zwischen Groß- und Kleinschreibung, und es gibt einen Unterschied zwischen * .txt und * (ohne "txt"). .

Alexander Logvinenko
quelle
2

Wenn Sie Ihren Beitrag als Entwickler unter Verwendung von Open Source-Bibliotheken leisten möchten, sollten Sie versuchen, alle diese Open Source-Lizenzen in Ihre zu integrieren apk. Dazu können Sie die Zusammenführungsmethode in Ihrem verwenden packagingOptions.

Beispiel:

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

Diese Antwort ist besser als die Verwendung, pickFirstda diese Methode nur die erste gefundene Lizenz auswählt und alle anderen ignoriert, was sie in diesem Fall irgendwie unbrauchbar macht.

Kurz gesagt, verwenden Sie die mergeMethode, um alle Lizenzen aus den von Ihnen verwendeten Open-Source-Bibliotheken einzuschließen.

Weitere Informationen zu Gradle PackagingOptions .

Sakiboy
quelle
2

Ich habe diesen Commit-Kommentar in AOSP bemerkt. Die Lösung besteht darin, einige Dateien mit DSL auszuschließen. Wahrscheinlich, wenn 0.7.1 veröffentlicht wird.

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
quelle
Ja, und sie haben gerade die Versionshinweise auf der Build-Site geschrieben. Hoffentlich laden sie das Artefakt bald in Maven Central hoch, damit wir es verwenden können!
Matt Wolfe
1

In meinem Fall muss ich nur die build.gradle-Datei des Projekts hinzufügen:

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

   ...
}
K. Stopa
quelle
0

In Android Studio 1.1.0 brauchte ich Kleinbuchstaben:

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

Bei den Dateien "LICENSE.txt" und "NOTICE.txt" wird zwischen Groß- und Kleinschreibung unterschieden. Also für SPring Android Library musste ich hinzufügen

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

Das Entfernen von .txt nach LICENSE hat meinen Fehler behoben:

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