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


19

코드를 연구하고 싶기 때문에 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'
    }

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

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


나는 GitHub의에 내 응용 프로그램 Roboyard 여기 같은 문제가 있습니다 : stackoverflow.com/q/59130438/1069083은 어쩌면 당신이 거기 유사성을 찾을 수
rubo77을

답변:


22

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


8
이것은 실제로 해결책이 아닙니다. 안드로이드 스튜디오 업그레이드 할 때마다 잔소리가 있습니다 ...
doctorram

gradle 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 파일에 중복 된 종속성이 있습니다.
MariusB

1
@Srinivasan, 중복이 있으면 packagingOptions에서 exclude 또는 pickfirst로 해결해야하지만 Gradle 플러그인에서만 문제가됩니다. 아직 더 정확하게 확인하지 않고 샘플 스튜디오를 작성하여 android studio의 bugtracker에 요청을 추가하는 문제를 재생성하지 않습니다.
Rajen Raiyarela 12

0

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

android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.