Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件)

Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件)

问题描述:

我克隆了一个github存储库,因为我想研究代码,但是当我尝试在Android Studio中构建它时,我遇到了一些麻烦.添加 google maven 存储库(按照 Android Studio 的提示)并更新 Gradle 插件版本和成绩版本(分别为 3.5.2 和 5.4.1)后,由于以下错误,构建失败:

I've cloned a github repository because I wanted to study the code, but when I tried to build it in Android Studio, I ran into some trouble. After adding the google maven repository (as prompted by Android Studio) and updating both the Gradle Plugin Version and the Grade Version (to 3.5.2 and to 5.4.1, respectively), the build fails because of the following error:

原因:重复条目:META-INF/MANIFEST.MF

Cause: duplicate entry: META-INF/MANIFEST.MF

更具体地说:

引起:java.util.zip.ZipException:重复条目:META-INF/MANIFEST.MF

Caused by: java.util.zip.ZipException: duplicate entry: META-INF/MANIFEST.MF

这是我的项目级 build.gradle 文件:

Here is my project level build.gradle file:


    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 文件(在尝试之前):

Here's my module build.gradle file (before trying anything):


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

这是我迄今为止尝试过的:

Here's what I've tried so far:

  • 将以下内容添加到我的模块 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 构建中排除某些文件?

I think I've tried mostly everything in this question: How to exclude certain files from Android Studio gradle builds?

没有任何效果.

在寻找解决方案后,我认为问题是我有重复的依赖项.所以我尝试了以下方法:

After searching for a solution, I think the problem is that I have duplicated dependencies. So I've tried the following:


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

我仍然遇到同样的错误.

I still get the same error.

我做错了什么?

正如 Rajen Raiyarela 所说,转到File->Project Structure->Project->Android Gradle Plugin Version 并将其从 3.5.2 降级到 3.5.1.

As Rajen Raiyarela said, go to File->Project Structure->Project->Android Gradle Plugin Version and downgrade it from 3.5.2 to 3.5.1.