Fehler :: doppelte Dateien beim Packen von APK

144

Android Studio. Ich erhalte diese Art von Fehler während der Anwendungsausführung.

Error:Execution failed for task ':app:packageDebug'. Duplicate files copied in APK META-INF/notice.txt

build.gradle

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

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

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

dependencies {
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile 'com.j256.ormlite:ormlite-android:4.48'
    compile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
    compile 'com.octo.android.robospice:robospice:1.4.11'
    compile 'com.octo.android.robospice:robospice-spring-android:1.4.11'
}

Wie kann ich diesen Fehler beheben?

BEARBEITET

Diese Ausschlussoptionen haben mein Problem gelöst:

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
    }
Robertas Setkus
quelle
Mögliches Duplikat von kopierten
Scott Barta
2
Dies ist kein Duplikat! Andere Fragesteller haben ihren Fehler durch Hinzufügen der Ausschlussoption behoben. Aber wie Sie alle sehen können, habe ich diese Optionen hinzugefügt und mein Problem ist nicht verschwunden.
Robertas Setkus
Gibt
Jithu PS
Das hat auch meine gelöst. danke
Reshma

Antworten:

56

Ich denke, der String-Vergleich unterscheidet zwischen Groß- und Kleinschreibung. Versuche es mitexclude 'META-INF/notice.txt'

Xavier Ducrohet
quelle
Bei meiner Antwort ging es darum, es mit zu versuchen notice.txtanstatt mit NOTICE.txt? Obwohl der Fehler tatsächlich anders aussieht als der, bei dem der Ausschluss erfolgt. Haben Sie eine META-INF/notice.txtDatei in Ihrer src/main/resources/?
Xavier Ducrohet
Entschuldigung Xavier. Ich habe deine Antwort damals nicht verstanden. Jetzt kann ich sehen, was du gemeint hast. Ich habe versucht, zu wechseln, exclude 'META-INF/notice.txt'aber dann hat die Konsole dazu aufgefordert Duplicate files copied in APK META-INF/NOTICE.txt. Seltsam, nicht wahr? Es gibt kein resourcesVerzeichnis unter C:\PathToAndroidStudioProject\src\main.
Robertas Setkus
1
Wenn Sie beide exclude 'META-INF/notice.txt'und setzen exclude 'META-INF/NOTICE.TXT', funktioniert es?
Xavier Ducrohet
Vielen Dank. Das hat geholfen. :)
Robertas Setkus
1
Versuchen Sie in der Datei build.gradle im Teil 'android' Folgendes hinzuzufügen: packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' }
Krystian
22

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'
    }
Gent Berani
quelle
1
Nachdem ich dieses implementiert hatte, löste ich diese Abfrage. Danke Mann :)
Hardik Joshi
10

Kurze Antwort:

Sehen Sie sich die detaillierte Gradle-Ausgabe mit an gradle assembleund notieren Sie sich die doppelten Dateien. Schließen Sie sie aus mit:

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

Lange Antwort:

Führen Sie die assembleGradle-Task über die Befehlszeile aus, um eine detaillierte Ausgabe zu erhalten:

./gradlew assemble || gradle assemble

Dies zeigt automatisch an, was ausgeschlossen werden soll:

studioWorkspace/CCDroid git:(master)  ± ./gradlew assembleDebug
:app:preBuild
:app:compileDebugNdk UP-TO-DATE
:app:preDebugBuild
:app:checkDebugManifest
:app:preReleaseBuild
:app:prepareComAndroidSupportAppcompatV72200Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42200Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preDexDebug UP-TO-DATE
:app:dexDebug UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
Error: duplicate files during packaging of APK /Users/shubham/code/studioProjects/CCDroid/app/build/outputs/apk/app-debug-unaligned.apk
    Path in archive: LICENSE
    Origin 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
    Origin 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-all/1.8.4/5c97d8b6e715ed941aeb93d6fc401ab3eb18a566/mockito-all-1.8.4.jar
You can ignore those files in your build.gradle:
    android {
      packagingOptions {
        exclude 'LICENSE'
      }
    }
:app:packageDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK LICENSE
    File 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
    File 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.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: 11.863 secs

Siehe diesen Teil in der Ausgabe:

android {
  packagingOptions {
    exclude 'LICENSE'
  }
}

Es wird sogar die Liste der Abhängigkeiten angezeigt, aus denen doppelte Dateien hervorgegangen sind (LIZENZ). Siehe die Zeilen mit Origin # in der Ausgabe.

Shubham Chaudhary
quelle
Gibt
Jithu PS
1
Ich habe Ihre Antwort fast ignoriert, obwohl sie für mich die richtige war. Ich würde vorschlagen, die Antwort oben im Beitrag zu platzieren: android {packageOptions {exclude 'LICENSE'}}, gefolgt von der Erklärung und der Ausgabe mit langem Gradle (die für die Antwort meistens nicht relevant ist. Dieser Teil lautet: Sie können diese Dateien ignorieren in Ihrem build.gradle: android {packageOptions {exclude 'LICENSE'}}
gorbysbm
Getan. Vielen Dank @gorbysbm.
Shubham Chaudhary
6

Fügen Sie dies in Ihre build.gradle-Datei ein ...

packagingOptions {
exclude 'META-INF/NOTICE' // will not include NOTICE file
exclude 'META-INF/LICENSE' // will not include LICENSE file
exclude 'META-INF/DEPENDENCIES' // will not include LICENSE file
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}

so was...

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "your package name"
    minSdkVersion 14
    targetSdkVersion 25
    versionCode 30
    versionName "3.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/NOTICE' // will not include NOTICE file
    exclude 'META-INF/LICENSE' // will not include LICENSE file
    exclude 'META-INF/DEPENDENCIES' // will not include LICENSE file
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
}
}
vrbsm
quelle
3

Es ist mehr als ein Fehler, Sie haben Recht.

Unter apply plugin: 'android-library'

füge das hinzu :: android { packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } }

Der erste Fehler tritt bei Dateiduplikaten auf, der zweite bei LIZENZ- und NOTICE-Dateien. Es wird danach funktionieren

BEARBEITEN :: Siehe meinen Beitrag hier zum Identifizieren der Probleme :: Android Gradle Plugin 0.7.0: "Dateien beim Packen von APK duplizieren"

Pian0_M4n
quelle
Gibt
Jithu PS
1

das funktioniert bei mir

android {
...

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
    }
}
Joolah
quelle
1

Interessanterweise hat es funktioniert , als ich diese Zeile aus gradle gelöscht habe:

compile 'org.apache.commons:commons-lang3:3.3.1'
Faul
quelle
0

Ich musste ein bisschen herumspielen, um den richtigen Ort für die Verpackungsoptionen zu finden. Lösen des Problems mit doppelten Dateien für einen Konflikt zwischen jackson-core: 2.2.2 und jackson-database: 2.2.2 Auch das DSL scheint sich kürzlich geändert zu haben. In Android Studio 1.4.1 mit buildTools 23 müssen Sie also Android einsetzen. Verpackungsoptionen auf der gleichen Ebene wie compileOptions UND NICHT in einem Modell {android { Klammern!

model { 
   android {
        compileSdkVersion = 21
        buildToolsVersion = "23.0.1"

        defaultConfig.with {
              applicationId = "com.android.sensorgraph"
              minSdkVersion.apiLevel = 21
              targetSdkVersion.apiLevel = 22
        }
   }

   android.packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
   }
   compileOptions.with {
        sourceCompatibility = JavaVersion.VERSION_1_7
        targetCompatibility = JavaVersion.VERSION_1_7
   }
} 
UV
quelle