ข้อผิดพลาดการป้อนข้อมูลซ้ำกันของ Gradle: META-INF / MANIFEST.MF (หรือวิธีการลบไฟล์ออกจาก jar)


19

ฉันโคลนที่เก็บ github เพราะฉันต้องการศึกษาโค้ด แต่เมื่อฉันพยายามสร้างมันใน Android Studio ฉันพบปัญหาบางอย่าง หลังจากเพิ่ม google maven repository (ดังที่ได้รับแจ้งจาก Android Studio) และอัปเดตทั้ง Gradle Plugin Version และ Grade Version (เป็น 3.5.2 และ 5.4.1 ตามลำดับ) การบิลด์ล้มเหลวเนื่องจากข้อผิดพลาดต่อไปนี้:

สาเหตุ: รายการที่ซ้ำกัน: META-INF / MANIFEST.MF

และนี่จะเฉพาะเจาะจงมากขึ้น:

เกิดจาก: java.util.zip.ZipException: รายการซ้ำ: META-INF / MANIFEST.MF

นี่คือไฟล์ build.gradle ระดับโครงการของฉัน:


    buildscript {
        repositories {
            jcenter()
            google()
        }

        dependencies {
            classpath 'com.android.tools.build:gradle:3.5.2'

            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }

    allprojects {
        repositories {
            jcenter()

            maven {
                url 'https://maven.google.com'
            }

        }
    }

นี่คือโมดูล build.gradle ของฉัน (ก่อนลองทำอะไร):


    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 22
        buildToolsVersion '28.0.3'

        defaultConfig {
            applicationId "com.thelittlenaruto.supportdesignexample"
            minSdkVersion 11
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
        }

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:appcompat-v7:22.2.1')
        implementation ('com.android.support:design:22.2.1')
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

นี่คือสิ่งที่ฉันได้ลองมา:

  • การเพิ่มสิ่งต่อไปนี้ในส่วน android ของโมดูล build.gradle ของฉัน:

    sourceSets {
            main{
                java{
                    exclude '**/META-INF/MANIFEST'
                    exclude '**/META-INF/MANIFEST.MF'
                    exclude 'META-INF/MANIFEST'
                    exclude 'META-INF/MANIFEST.MF'
                    exclude '!META-INF/MANIFEST.MF'
                }
            }
        }
  • เพิ่มสิ่งนี้:

    sourceSets.main.res.filter.exclude 'META-INF/MANIFEST'
        sourceSets.main.res.filter.exclude 'META-INF/MANIFEST.MF'
  • นอกจากนี้:

    packagingOptions {
            apply plugin: 'project-report'
            exclude '**/META-INF/MANIFEST'
            exclude '**/META-INF/MANIFEST.MF'
            exclude 'META-INF/MANIFEST'
            exclude 'META-INF/MANIFEST.MF'
            exclude '!META-INF/MANIFEST.MF'
        }
  • และนี่:

    packagingOptions {
            pickFirst '**/META-INF/MANIFEST'
            pickFirst '**/META-INF/MANIFEST.MF'
            pickFirst 'META-INF/MANIFEST'
            pickFirst 'META-INF/MANIFEST.MF'
            pickFirst '!META-INF/MANIFEST.MF'
        }
  • นี้:

    aaptOptions {
            ignoreAssetsPattern "!META-INF/MANIFEST.MF"
            ignoreAssetsPattern "META-INF/MANIFEST.MF"
        }

ฉันคิดว่าฉันได้ลองทุกอย่างเป็นส่วนใหญ่ในคำถามนี้: จะแยกไฟล์บางไฟล์ออกจากการสร้าง gradle ของ Android Studio ได้อย่างไร

ไม่มีอะไรทำงาน

หลังจากค้นหาวิธีแก้ปัญหาแล้วฉันคิดว่าปัญหาคือฉันมีการอ้างอิงซ้ำซ้อน ดังนั้นฉันได้ลองทำสิ่งต่อไปนี้:


    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:appcompat-v7:22.2.1'){
            exclude module: 'support-v4'
        }
        implementation ('com.android.support:design:22.2.1')
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

และนี่:


    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:design:22.2.1'){
            exclude module: 'support-v7'
        }
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

ฉันยังคงได้รับข้อผิดพลาดเดียวกัน

ใครช่วยกรุณาบอกฉันว่าฉันทำอะไรผิด ขอบคุณในความคาดหมาย :)


ฉันมีปัญหาเดียวกันกับที่นี่กับแอพของฉัน Roboyard บน GitHub: stackoverflow.com/q/59130438/1069083 บางทีคุณอาจพบความคล้ายคลึงกันที่นั่น
rubo77

คำตอบ:


22

ดังที่Rajen Raiyarelaพูดไปที่ไฟล์ -> โครงสร้างโครงการ -> โครงการ -> เวอร์ชั่น Android Gradle Plugin และปรับลดรุ่นจาก 3.5.2 เป็น 3.5.1


8
นี่ไม่ใช่วิธีแก้ปัญหาจริงๆ Android Studio กำลังจู้จี้ทุกครั้งที่จะอัพเกรด ...
doctorram

คำตอบนี้ล้าสมัยเนื่องจากการอัปเกรดเป็นระดับ 3.5.3 ดูเหมือนจะแก้ไขปัญหาได้แล้ว
rubo77

6

ตั้งค่าการพึ่งพาโครงการเป็น:

classpath 'com.android.tools.build:gradle:3.5.3'

หรือล่าสุด

หมายเหตุ: การดำเนินการนี้ปัญหาของฉันได้รับการแก้ไขแล้ว


ปัญหาของฉันกับ gradle 3.5.2 ได้รับการแก้ไขใน 3.5.3 เช่นกัน แต่ต้องระวัง: ฉันได้รับคำเตือนว่า `มีการใช้คุณสมบัติ Gradle ที่เลิกใช้แล้วในงานสร้างนี้ทำให้ไม่สามารถใช้ Gradle 6.0 ได้ '
rubo77

1

ปัญหานี้เกิดขึ้นเนื่องจากการอ้างอิงที่ซ้ำกัน
ตรวจสอบการอ้างอิงหลายรายการในแอป Gradle


ถูกต้องนี่เป็นปัญหา จะมีการขึ้นต่อกันที่ซ้ำกันในไฟล์ gradle ของคุณ #
23919

1
@Srinivasan หากมีการซ้ำซ้อนก็ควรได้รับการแก้ไขโดยแยกหรือเลือกอย่างแรกใน packagingOptions แต่มันออกกับปลั๊กอิน Gradle เท่านั้น ฉันยังต้องยืนยันอย่างแม่นยำยิ่งขึ้นและสร้างแอปตัวอย่างเพื่อสร้างปัญหาใหม่สำหรับการเพิ่มคำขอใน bugtracker สำหรับ android studio
Rajen Raiyarela

0

ทั้งแพคเกจมันครั้งเดียวหรือไม่เลย:

android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.