ZipException:Kotlin类上的重复条目

Ovi*_*diu 9 android android-gradle-plugin android-studio-3.1

请注意,在升级到Android Studio 3.1,Gradle构建工具3.1.0和Gradle Wrapper 4.4之前,此项目已成功编译.

在Gradle任务transformClassesAndResourcesWithPrepareIntermediateJarsForSomethingDebug期间发生异常:

Caused by: java.util.zip.ZipException: duplicate entry: com/me/utils/model/singleModel/NodeModel.class
Run Code Online (Sandbox Code Playgroud)

请注意,例外情况仅发生在Kotlin类(如上面的NodeModel)上.如果我删除这个类,将在下一个Kotlin类上发生异常.

提及此异常的所有其他SO问题都与项目依赖项中的重复第三方库有关.然而,这不是我的情况,因为NodeModel是我自己编写的自定义类.它实际上只是一个简单的Kotlin数据类.

该项目使用Kotlin版本1.2.30,构建工具27.0.3,支持库27.1.0和Firebase 12.0.1.

我曾多次尝试清理和重建项目,在本地JDK和嵌入式JDK之间切换,没有任何效果.

我尝试使用--stacktrace --debug运行Gradle,以便找出副本的来源,但Gradle日志没有提到任何相关内容.

Ovi*_*diu 4

更新的答案

即使使用下面提到的解决方法,我仍然偶尔会遇到异常。现在Android Studio 3.1.1已经发布,这个问题已经完全消失了。只需确保更新到 Gradle 构建工具的版本 3.1.1,以及 Gradle 包装器的至少版本 4.4:

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
Run Code Online (Sandbox Code Playgroud)

在项目中build.gradle

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

初步答复

将 Gradle Wrapper 版本增加到 4.6 为我解决了这个问题,但只是暂时的。第二天又出现异常。

到目前为止,我发现的唯一可行的解​​决方案是将 Gradle Wrapper 降级回 4.3.1,将 Gradle 构建工具降级到 3.0.0,直到有新的稳定版本的 Gradle 构建工具可用。

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip
Run Code Online (Sandbox Code Playgroud)

在项目中build.gradle

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 此修复仍然有效吗?我在最新的 Android 版本 Gradle 4.4 和 Gradle 插件 3.1.2 中遇到同样的问题 (6认同)