【问题标题】:Gradle puts duplicate files in the apk fileGradle 将重复文件放入 apk 文件中
【发布时间】:2024-04-18 15:50:01
【问题描述】:

我使用的是 gradle 1.10,android 插件的版本是 0.8.0。我的 android 项目需要这两个 jar:jackson-core-asl-1.9.11.jarjackson-mapper-asl-1.9.11.jar。我这样添加文件:

dependencies {
    compile files('libs/jackson-core-asl-1.9.11.jar')
    compile files('libs/jackson-mapper-asl-1.9.11.jar')
}

在 gradle 构建期间,我收到一条错误消息,指出这两个文件在 META-INF/ASL2.0 中重复。我通过排除以下文件解决了这个问题:

packagingOptions {
       exclude 'META-INF/ASL2.0'
       exclude 'META-INF/LICENSE'
       exclude 'META-INF/NOTICE'
       exclude 'META-INF/LICENSE.txt'
       exclude 'META-INF/NOTICE.txt'
       exclude 'META-INF/notice.txt'
       exclude 'META-INF/license.txt'
   }

我必须排除所有这些,因为它们显然都有一个重复的文件。

我想知道为什么会出现这个问题。它是android插件的错误还是gradle本身的错误?排除上述文件会导致任何问题吗?我只是排除了上述罐子,还是那些 META-INF 文件中还有其他内容?我不想排除我的项目需要的任何东西

【问题讨论】:

    标签: android eclipse jar gradle


    【解决方案1】:

    以下是来自 Jackson 团队https://github.com/FasterXML/jackson-databind/issues/214的一些信息

    SO上有很多关于这个的帖子,比如这个:Error generating final archive: Found duplicate file for APK: LICENSE.txt

    我也将 Jackson 与 Eclipse 和 Ant 一起使用(我目前在 Studio 中使用与您使用相同的解决方法),我不得不在命令上使用 zip 来重命名 license.txt 文件。在这篇文章Android Gradle plugin 0.7.0: "duplicate files during packaging of APK" 中有更多关于整个事情的信息(包括使用 zip 重命名文件的示例)。

    我没有发现任何迹象表明重命名或排除这些文件会产生负面影响,并且在将 Jackson 与 Eclipse 和 Ant 一起使用的大约 2 年中,我从未遇到任何问题。

    【讨论】:

      【解决方案2】:

      首先,这不是 gradle 的错误。 它发生在 MergeJavaResourcesTransform 任务中:

      众所周知,APK只是一个zip文件,所以当将META-INFO/xxx放入zip文件时,如果之前已经添加过文件,我们不能再次放入。

      并且 META-INFO 文件没有合并规则,所以我们只能添加名称为 NOTICE 等的文件

      【讨论】: