[android] Gradle duplicate entry error : META-INF / MANIFEST.MF (또는 jar에서 파일을 삭제하는 방법)

코드를 연구하고 싶기 때문에 github 리포지토리를 복제했지만 Android Studio에서 빌드하려고 할 때 약간의 문제가 발생했습니다. Google Maven 저장소를 추가하고 (Android Studio에서 프롬프트 한대로) Gradle Plugin 버전 및 Grade 버전 (각각 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'
    }

지금까지 시도한 내용은 다음과 같습니다.

  • 내 모듈 build.gradle 파일의 android 섹션에 다음을 추가하십시오.

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

나는이 질문에서 주로 모든 것을 시도했다고 생각
합니다 .Android Studio gradle 빌드에서 특정 파일을 제외하는 방법은 무엇입니까?

아무것도 효과가 없었습니다.

솔루션을 검색 한 후 문제가 중복 된 종속성이라고 생각합니다. 그래서 나는 다음을 시도했다.


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

여전히 같은 오류가 발생합니다.

아무도 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? 기대 감사합니다. 🙂



답변

으로 Rajen Raiyarela가 말했다, 파일 -> 프로젝트 구조 -> 프로젝트 -> 안드로이드 Gradle을 플러그인 버전으로 이동하여 3.5.2에서 3.5.1로 다운 그레이드.


답변

프로젝트 종속성 을 다음으로 설정하십시오 .

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

또는 최신 것.

참고 : 이렇게하면 내 문제가 해결되었습니다.


답변

이 문제는 중복 종속성으로 인해 발생합니다.
Gradle 앱에서 여러 종속성을 확인하십시오.


답변

한 번만 포장하거나 전혀 포장하지 마십시오.

android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}


답변