Błąd :: zduplikowane pliki podczas pakowania pakietu APK

144

Android Studio. Ten rodzaj błędu pojawia się podczas uruchamiania aplikacji.

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

Jak mogę naprawić ten błąd?

EDYTOWANE

Te wykluczające opcje rozwiązały mój problem:

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
źródło
2
To nie jest duplikat! Inni pytający naprawili swój błąd, dodając opcję wykluczenia. Ale jak wszyscy widzicie, dodałem te opcje i mój problem nie zniknął.
Robertas Setkus
czy jest jakiś pomysł na ten problem stackoverflow.com/questions/30364950/…
Jithu PS
To również rozwiązało moje. dzięki
Reshma

Odpowiedzi:

56

Myślę, że porównanie ciągów uwzględnia wielkość liter. Spróbuj zexclude 'META-INF/notice.txt'

Xavier Ducrohet
źródło
Moja odpowiedź dotyczyła próby notice.txtzamiast NOTICE.txt? Chociaż błąd wygląda w rzeczywistości inaczej niż ten, w którym występuje wykluczenie. Czy masz META-INF/notice.txtplik w swoim src/main/resources/?
Xavier Ducrohet
Przepraszam Xavier. Wtedy nie zrozumiałem twojej odpowiedzi. Teraz rozumiem, co miałeś na myśli. Próbowałem zmienić na, exclude 'META-INF/notice.txt'ale potem konsola o to poprosiła Duplicate files copied in APK META-INF/NOTICE.txt. Dziwne, prawda? Nie ma resourceskatalogu pod C:\PathToAndroidStudioProject\src\main.
Robertas Setkus
1
Jeśli umieścisz oba exclude 'META-INF/notice.txt'i exclude 'META-INF/NOTICE.TXT', czy to działa?
Xavier Ducrohet
Dzięki. To pomogło. :)
Robertas Setkus
1
w pliku build.gradle w części 'android' spróbuj dodać: packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' }
Krystian
22

Myślę, że musisz uwzględnić tylko te opcje w pliku build.gradle :

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
    }
Gent Berani
źródło
1
Wreszcie po zaimplementowaniu tego, rozwiązałem to pytanie. Dzięki stary :)
Hardik Joshi
10

Krótka odpowiedź:

Zobacz szczegółowe dane wyjściowe gradle za pomocą gradle assemblei zanotuj pliki, które są zduplikowane i wyklucz je za pomocą:

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

Długa odpowiedź:

Uruchom assemblezadanie gradle z wiersza poleceń, aby uzyskać szczegółowe wyniki:

./gradlew assemble || gradle assemble

To automatycznie pokazuje, co wykluczyć:

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

Zobacz tę część w wyniku:

android {
  packagingOptions {
    exclude 'LICENSE'
  }
}

Pokazuje nawet listę zależności, które zapoczątkowały zduplikowane pliki (LICENCJA). Zobacz wiersze z Origin # w wynikach.

Shubham Chaudhary
źródło
czy jest jakiś pomysł na te problemy stackoverflow.com/questions/30364950/…
Jithu PS
1
Prawie zignorowałem twoją odpowiedź, mimo że była dla mnie właściwa. Sugerowałbym umieszczenie odpowiedzi u góry postu: android {packageOptions {exclude 'LICENSE'}}, po którym następuje wyjaśnienie i długi wynik oceny (co w większości nie jest istotne dla odpowiedzi. Ta część to Możesz zignorować te pliki in your build.gradle: android {
PackagingOptions
Gotowe. Wielkie dzięki @gorbysbm.
Shubham Chaudhary
6

Dodaj to do swojego pliku build.gradle ...

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

lubię to...

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
źródło
3

To więcej niż jeden błąd, masz rację.

Pod apply plugin: 'android-library'

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

Pierwszy błąd dotyczy duplikatów plików, drugi dotyczy plików LICENCJI i POWIADOMIEŃ. Będzie działać później

EDYCJA :: Zobacz mój post na temat identyfikowania problemów :: Wtyczka Android Gradle 0.7.0: „zduplikowane pliki podczas pakowania pakietu APK”

Pian0_M4n
źródło
czy jest jakiś pomysł na te problemy stackoverflow.com/questions/30364950/…
Jithu PS
1

to działa dla mnie

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
źródło
1

Co ciekawe, kiedy usunięte ten wiersz z Gradle, to działało:

compile 'org.apache.commons:commons-lang3:3.3.1'
Leniwy
źródło
0

Musiałem trochę się pobawić, aby znaleźć odpowiednie miejsce na opakowanie Opcje. Rozwiązanie problemu z duplikatem pliku w przypadku konfliktu między jackson-core: 2.2.2 i jackson-databind: 2.2.2 Wydaje się, że ostatnio zmienił się również DSL. W ostatnim Android Studio 1.4.1 z buildTools 23 musisz umieścić Androida. opcje pakowania na tym samym poziomie, co compileOptions ORAZ NIE wewnątrz żadnego modelu {android { nawiasy klamrowe!

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
źródło