Android Studio 0.4 Doppelte Dateien, die in APK META-INF / LICENSE.txt kopiert wurden

115

Nachdem ich mein Studio von 0.3.7 auf 0.4.0 aktualisiert habe, kann ich mein Projekt nicht kompilieren. Ich habe eine Lösung für den Stackoverflow gefunden: Doppelte kopierte Dateien (Android Studio 0.4.0)

Ich habe mein Projekt auf Gradle 0.7. + Aktualisiert, aber ich weiß nicht, wo ich die nächsten Zeichenfolgen einfügen muss:

android {

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

Mein Logcat: Log

Execution failed for task ':Prog:packageDebug'.
> Duplicate files copied in APK META-INF/LICENSE.txt
    File 1: /home/scijoker/AndroidStudioProjects/ProgProject/Prog/libs/httpclient-4.1.1.jar
    File 2: /home/scijoker/AndroidStudioProjects/ProgProject/Prog/libs/httpclient-4.1.1.jar

PS Entwickeln Sie in Ubuntu 13.04

a.black13
quelle
2
Innerhalb androidAbschnitt
Eugen Martynov
Vielen Dank. Ich habe block packageOptions () in die Hauptdatei von gradle conf eingefügt. Zuerst habe ich diesen Block in Gradle-Dateien für Bibliotheken eingefügt. Alle Arbeiten sind perfekt =)
a.black13

Antworten:

155

Für mich hat es funktioniert, die Abhängigkeiten an die Spitze und die packageOptions am Ende zu setzen.

apply plugin: 'android'. 

Hier ist meine vollständige build.gradle im App-Ordner.

dependencies {
    compile 'com.android.support:support-v4:+'
    compile files('libs/apache-mime4j-0.6.jar')
    compile files('libs/httpmime-4.0.jar')
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 10
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-    rules.txt'
    }


    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }
}

BEARBEITEN: Fast alle Betriebssystemlizenzen enthalten die Verpflichtung, "eine Kopie der Lizenz" in Ihr Projekt aufzunehmen. Dies bedeutet, dass Sie eine Kopie aller von Ihnen verwendeten Betriebssystemlizenzen in Ihre Projekte aufnehmen müssen. Indem Sie sie in Gradle "ausschließen", verletzen Sie die Lizenzen.

Das Ausschließen aus dem Projekt ist möglicherweise nicht die beste Option. Danke RS für die Info.

biniam
quelle
2
@Andree Der Grund, warum wir die Dateien ausschließen, ist, dass wir nicht möchten, dass die TXT-Dateien (und andere) in der APAP enthalten sind, die vom Build generiert wird.
Biniam
4
Ausschluss wird außerhalb von Android nicht erkannt {}: /
An-Droide
4
Ausschließen sollte in Android {} sein, dann funktioniert nur es.
Pavan Pyati
2
! Diese Lösung verletzt alle Open Source-Lizenzen! Da Sie verpflichtet sind, den ursprünglichen Lizenztext jeder Bibliothek zu Ihrem Paket hinzuzufügen
RS
2
Hallo. Irgendein. Fast alle Betriebssystemlizenzen enthalten die Verpflichtung, "eine Kopie der Lizenz" in Ihr Projekt aufzunehmen. Dies bedeutet, dass Sie eine Kopie aller von Ihnen verwendeten Betriebssystemlizenzen in Ihre Projekte aufnehmen müssen. Indem Sie sie in Gradle "ausschließen", verletzen Sie die Lizenzen.
RS
47

Beachtung!! Mögliche OpenSource-Lizenzverletzung.

Wenn Sie die oben vorgeschlagenen lizenz.txt-Dateien ausschließen, können Sie einige OpenSource-Lizenzen verletzen, da es in OpenSource-Lizenzen üblich ist, zuzustimmen, sie Ihrer Quelle hinzuzufügen. Überprüfen Sie besser Ihre OpenSource-Lizenzen.

Update: Bis es eine bessere Lösung gibt, verwenden Sie

packagingOptions {
   pickFirst  'META-INF/license.txt'
}

Damit erfüllen Sie zumindest einen Teil der Lizenzverpflichtung

RS
quelle
23

einfach hinzufügen

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

in build.gradle

Shankey
quelle
Wir verletzen OpenSource-Lizenz wie diese
RS
16

Sie können das Problem beheben, indem Sie den folgenden Code hinzufügen project/app/build.gradle:

android {
    // Fixed build error : Duplicate files copied in APK META-INF/xxx
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE.txt'
    }
}
AlfredZhong
quelle
Hallo. Dieses Problem wurde vor 1,5 Jahren behoben. Danke für die Antwort
a.black13
:-) Ich bin heute auf dieses Problem gestoßen und habe diesen Thread gefunden. Und ich merke das Datum nicht.
AlfredZhong
Sie haben das Datum nicht bemerkt UND alle anderen Antworten ignoriert.
Der unglaubliche
11

Ich hatte das gleiche Problem wie bei der neuen Version von gradle. Unter build.gradle funktioniert das Textformat für mich:

In meinem libs-Ordner befinden sich zwei Jackson-Gläser.

android {
         compileSdkVersion 21
         buildToolsVersion "21.1.2"

         defaultConfig {
            applicationId "com.omtlab.myapplication"
            minSdkVersion 14
            targetSdkVersion 21
            versionCode 1
            versionName "1.0"
         }
         buildTypes {
             release {
                 minifyEnabled false
                 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
         }
         packagingOptions {
            exclude 'libs/jackson-core-asl-1.9.13.jar'
            exclude 'libs/jackson-mapper-asl-1.9.13.jar'
            exclude 'META-INF/ASL2.0'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/NOTICE'
         }
}

dependencies {
    //compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile files('libs/jackson-core-asl-1.9.13.jar')
    compile files('libs/jackson-mapper-asl-1.9.13.jar')
}
Dhiral Pandya
quelle
Danke dir! Ich habe heute ~ 5 Stunden lang meinen Kopf dagegen geschlagen. :) Es ist das packagingOptions { exclude 'libs/jackson...' }, was es behoben hat.
CJBrew
8

Hinzufügen:

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

Die Lösung von biniam_Ethiopia ist für mich wahrscheinlich die ausfallsicherste

Jan Wilmans
quelle
8

Beim Einfügen dieses Codes

android{

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

Stellen Sie sicher, dass ein Fehler angezeigt wird

> Doppelte Dateien, die in APK META-INF / LICENSE.txt kopiert wurden

dann füge hinzu

 android{

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

}

Wenn dies der Fall ist, wird es angezeigt

> Doppelte Dateien, die in APK META-INF / LICENSE kopiert wurden

dann füge hinzu

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

Wenn dies der Fall ist, wird es angezeigt

> Doppelte Dateien, die in APK META-INF / license.txt kopiert wurden

dann füge hinzu

 android{

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

}

Im Kurztext ist CASE und Dokument FORMAT (.txt) so wichtig.

(Dieser Fehler ist auch in Android Studio 1.1.0 vorhanden.)

Shreekant N.
quelle
6

Dies wird Ihnen helfen, das Problem zu lösen

packagingOptions {
    exclude 'META-INF/ASL2.0'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/DEPENDENCIES'
}
Suresh Sarak
quelle
Warum hat dies so viele Abstimmungen, wenn dies im Grunde die gleiche Antwort ist?
Necronet
4
packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LGPL2.1'
}

Fügen Sie die Datei build.gradle hinzu und synchronisieren Sie das Projekt

Gajendra Kumar
quelle
3

Ich füge nur 2 hinzu:

android{

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

}
josedlujan
quelle
Wird dies weiterhin in der App-Produktion enthalten sein?
RoCk RoCk
2

Ich hatte einen ähnlichen Fehler und löste ihn ohne die packingOptions()und excludeFunktion. Ich habe zwei Abhängigkeiten hinzugefügt, aber eine war eine Untergruppe der ersten. Dies verursachte den Fehler, als ich einen von ihnen entfernte, bekam ich einen sauberen Build. Ich empfehle, in Ihrem Abhängigkeitsblock nach einem ähnlichen Fehler zu suchen.

Android Amature
quelle
Hallo, ich habe dieses Problem vor langer Zeit durch Hinzufügen von packingOptions () gelöst. Danke für die Antwort) +1
a.black13
Dieses Problem wurde in der neuen verfügbaren Version von AS
a.black13
2

Verwenden Sie bei der Verwendung java-jwtund jackson-corezusammen Folgendes:

exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml")
Olcay Ertaş
quelle
2

Dies kann sehr wohl eine schlechte Praxis sein. Wenn Sie jedoch mehrere große Bibliotheken einbeziehen, arbeiten Sie möglicherweise an Hunderten solcher Konflikte.

Nachfolgend finden Sie eine supereinfache Lösung für solche Fälle:

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
Mapsy
quelle