ข้อผิดพลาด :: ไฟล์ซ้ำระหว่างการบรรจุ APK


144

Android Studio ฉันได้รับข้อผิดพลาดประเภทนี้ในระหว่างการเรียกใช้แอปพลิเคชัน

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

ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร?

แก้ไข

ตัวเลือกยกเว้นเหล่านี้แก้ปัญหาของฉันได้:

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


2
นี่ไม่ได้ซ้ำกัน! ผู้ตั้งคำถามคนอื่นแก้ไขข้อผิดพลาดโดยเพิ่มตัวเลือกยกเว้น แต่อย่างที่คุณเห็นฉันเพิ่มตัวเลือกเหล่านี้และปัญหาของฉันไม่ได้หายไป
Robertas Setkus


มีความคิดใด ๆ เกี่ยวกับปัญหานี้stackoverflow.com/questions/30364950/ …
Jithu PS

นั่นแก้ไขเหมืองของฉันด้วย ขอบคุณ
Reshma

คำตอบ:


56

ฉันคิดว่าการเปรียบเทียบสตริงเป็นกรณี ๆ ลองด้วยexclude 'META-INF/notice.txt'


คำตอบของฉันเกี่ยวกับการพยายามnotice.txtแทนที่NOTICE.txt? แม้ว่าข้อผิดพลาดนั้นจะดูแตกต่างจากที่เกิดขึ้นจริง คุณมีMETA-INF/notice.txtไฟล์ในของคุณsrc/main/resources/หรือไม่?
Xavier Ducrohet

ขออภัยซาเวียร์ ฉันไม่เข้าใจคำตอบของคุณ ตอนนี้ฉันเห็นสิ่งที่คุณหมายถึง ฉันพยายามที่จะเปลี่ยนไปแต่แล้วคอนโซลได้รับแจ้งว่าexclude 'META-INF/notice.txt' Duplicate files copied in APK META-INF/NOTICE.txtแปลกใช่มั้ย ไม่มีคือภายใต้ไดเรกทอรีresources C:\PathToAndroidStudioProject\src\main
Robertas Setkus

1
ถ้าคุณใส่ทั้งสองอย่างexclude 'META-INF/notice.txt'และexclude 'META-INF/NOTICE.TXT'มันใช้งานได้?
Xavier Ducrohet

ขอบคุณ นั่นช่วยได้ :)
Robertas Setkus

1
ในไฟล์ build.gradle ในส่วน 'android' ลองเพิ่ม: packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' }
Krystian

22

ฉันคิดว่าคุณต้องรวมเฉพาะตัวเลือกเหล่านี้ในbuild.gradle :

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

1
ในที่สุดหลังจากใช้งานสิ่งนี้ฉันแก้ไขคำถามนี้ Thanks man :)
Hardik Joshi

10

คำตอบสั้น ๆ :

ดูเอาต์พุต gradle ที่มีรายละเอียดโดยใช้gradle assembleและจดบันทึกไฟล์ที่ซ้ำกันและแยกออกโดยใช้:

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

คำตอบยาว:

รันassembleงานการไล่ระดับสีจากบรรทัดคำสั่งสำหรับเอาต์พุตโดยละเอียด:

./gradlew assemble || gradle assemble

สิ่งนี้จะแสดงสิ่งที่จะยกเว้นโดยอัตโนมัติ:

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

ดูส่วนนี้ในผลลัพธ์:

android {
  packagingOptions {
    exclude 'LICENSE'
  }
}

มันยังแสดงรายการของการขึ้นต่อกันของไฟล์ที่ซ้ำกัน (LICENSE) ดูบรรทัดที่มีOrigin #ในเอาต์พุต


มีความคิดใด ๆ เกี่ยวกับปัญหานี้stackoverflow.com/questions/30364950/ …
Jithu PS

1
ฉันเกือบเพิกเฉยต่อคำตอบของคุณแม้ว่ามันจะเป็นคำตอบที่ถูกต้องสำหรับฉันก็ตาม ฉันขอแนะนำให้วางคำตอบไว้ที่ด้านบนของโพสต์: android {packagingOptions {ยกเว้น 'LICENSE'}} ตามด้วยคำอธิบายและการไล่ระดับสีออกยาว (ซึ่งส่วนใหญ่ไม่เกี่ยวข้องกับคำตอบส่วนนี้คือคุณสามารถละเว้นไฟล์เหล่านั้น ใน build.gradle ของคุณ: แอนดรอยด์ {packagingOptions {ยกเว้น 'LICENSE'}}
gorbysbm

เสร็จสิ้น ขอบคุณมาก @gorbysbm
Shubham Chaudhary

6

เพิ่มสิ่งนี้ในไฟล์ 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'
}

แบบนี้...

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

3

มันมากกว่าหนึ่งข้อผิดพลาดคุณพูดถูก

ภายใต้ apply plugin: 'android-library'

เพิ่มสิ่งนี้ :: android { packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } }

ข้อผิดพลาดที่ 1 คือทำซ้ำไฟล์ส่วนที่สองคือ LICENSE และไฟล์ NOTICE มันจะทำงานหลังจาก

แก้ไข :: ดูโพสต์ของฉันที่นี่เกี่ยวกับการระบุปัญหา :: ปลั๊กอิน Android Gradle 0.7.0: "ไฟล์ที่ซ้ำกันในระหว่างการบรรจุ APK"


มีความคิดใด ๆ เกี่ยวกับปัญหานี้stackoverflow.com/questions/30364950/ …
Jithu PS

1

มันใช้งานได้สำหรับฉัน

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


0

ฉันต้องเล่นรอบ ๆ เพื่อหาตำแหน่งที่เหมาะสมสำหรับบรรจุภัณฑ์ตัวเลือก การแก้ปัญหาไฟล์ที่ซ้ำกันสำหรับความขัดแย้งระหว่างjackson-core: 2.2.2และjackson-databind: 2.2.2 นอกจากนี้ DSL ดูเหมือนว่าจะมีการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้ดังนั้นใน Android Studio 1.4.1 ล่าสุดกับ buildTools 23 คุณต้องใส่ android ตัวเลือกบรรจุภัณฑ์ในระดับเดียวกับ compileOptions และไม่อยู่ในรูปแบบใด ๆ{android {วงเล็บปีกกา!

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
   }
} 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.