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


19

我已经克隆了github存储库,因为我想研究代码,但是当我尝试在Android Studio中构建它时,遇到了一些麻烦。添加google maven存储库(按照Android Studio的提示)并更新Gradle插件版本和成绩版本(分别为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

Answers:


22

正如Rajen Raiyarela所说,转到“文件”->“项目结构”->“项目”->“ Android Gradle插件版本”,并将其从3.5.2降级到3.5.1。


8
这确实不是解决方案。Android Studio每次都在
苦苦

这个答案已经过时了,因为升级到gradle 3.5.3似乎已经解决了问题
rubo77

6

项目依赖项设置为:

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

或最新的。

注意:这样,我的问题已解决。


我与gradle这个3.5.2问题已经在3.5.3已经解决了,但是要注意:我得到'已过时摇篮特点是在此版本中使用的警告,使得它不符合摇篮6.0.`
rubo77

1

由于重复的依赖项而发生此问题。
在Gradle应用程序中检查多个依赖项。


正确,这就是问题所在。会有重复的依赖在你的文件的gradle
MariusB

1
@Srinivasan,如果存在重复项,则应该通过packagingOptions中的exclude或pickfirst解决此问题,但是它仅与Gradle插件有关。我还没有做更精确的验证,并创建了一个示例应用程序来重新生成在android studio的bugtracker中添加请求的问题。
Rajen Raiyarela '19

0

打包一次或根本不打包:

android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.