Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件)
Posted
技术标签:
【中文标题】Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件)【英文标题】:Gradle duplicate entry error: META-INF/MANIFEST.MF (Or how to delete a file from jar) 【发布时间】:2020-03-06 07:24:40 【问题描述】:我克隆了一个 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"
我想我已经尝试了这个问题的大部分内容: How to exclude certain files from Android Studio gradle builds?
没有任何效果。
在寻找解决方案后,我认为问题在于我有重复的依赖项。所以我尝试了以下方法:
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 也有同样的问题:***.com/q/59130438/1069083 也许你会在那里找到相似之处 【参考方案1】:正如Rajen Raiyarela 所说,转到文件->项目结构->项目->Android Gradle 插件版本并将其从 3.5.2 降级为 3.5.1。
【讨论】:
这真的不是一个解决方案。 Android Studio 每次升级都在唠叨... 这个答案已经过时了,因为升级到 gradle 3.5.3 似乎已经解决了这个问题【参考方案2】:将项目依赖项设置为:
classpath 'com.android.tools.build:gradle:3.5.3'
或最新的。
注意:通过这样做,我的问题已经解决了。
【讨论】:
我的 gradle 3.5.2 问题也已在 3.5.3 中解决,但请注意:我收到警告 `此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 6.0 不兼容。` 【参考方案3】:由于重复的依赖关系而发生此问题。 检查 Gradle 应用中的多个依赖项。
【讨论】:
正确,这就是问题所在。你的 gradle 文件中会有重复的依赖项 @Srinivasan,如果有重复,那么它应该通过在 PackagingOptions 中的 exclude 或 pickfirst 解决,但它仅与 Gradle 插件有关。我还没有做更精确的验证并创建一个示例应用程序来重新生成在 bugtracker for android studio 中添加请求的问题。【参考方案4】:要么打包一次,要么不打包:
android
packagingOptions
pickFirst "META-INF/MANIFEST.MF"
// exclude "META-INF/MANIFEST.MF"
【讨论】:
【参考方案5】:正如@rubo77
所说,在我确认后:
3.5.2
到3.5.3
从3.5.2
到3.5.4
过时解决方案:
从3.5.2
降级到3.5.1
我的选择是:从3.5.2
升级到3.5.4
build.gradle
:
dependencies
// classpath 'com.android.tools.build:gradle:3.5.2'
// classpath 'com.android.tools.build:gradle:3.5.3'
classpath 'com.android.tools.build:gradle:3.5.4'
【讨论】:
以上是关于Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件)的主要内容,如果未能解决你的问题,请参考以下文章
Gradle 构建错误:需要 Gradle 版本 2.10。当前版本是 2.6 [重复]
Gradle 错误:找不到任何匹配 com.android.tools.build:gradle:2.2.+ [重复]
Ionic Cordova 使用 Gradle 构建 Android 错误并且构建失败 [重复]
react-native android错误无法安装应用程序native_modules.gradle'行:170 [重复]
“无法解决:com.android.support:support-v4:26.0.0”和Gradle同步上的其他类似错误[重复]