升级Android Studio后Kotlin类出现ZipException重复条目问题求助
你遇到的这个ZipException: duplicate entry异常,在升级Android Studio 3.1、Gradle构建工具3.1.0和Gradle Wrapper 4.4后只出现在Kotlin类上,而且移除一个类就转移到另一个,这大概率是Kotlin编译产物被重复打包导致的,和新Gradle插件的依赖管理、Kotlin插件兼容性有直接关系。下面是几个经过验证的解决方案:
1. 对齐Kotlin插件与Gradle插件版本
Gradle 4.4和Android Gradle插件3.1.0对Kotlin插件版本有一定要求,版本不匹配很容易引发编译冲突。建议你把Kotlin插件升级到兼容的稳定版本(比如1.2.71或更高),在项目根目录的build.gradle里修改:
buildscript { ext.kotlin_version = '1.2.71' // 可根据Gradle官方兼容表调整 dependencies { classpath 'com.android.tools.build:gradle:3.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
2. 排查重复的依赖配置
检查所有模块的build.gradle,确认没有以下情况:
- 同时混用旧版
compile和新版implementation/api引入Kotlin相关依赖(比如kotlin-stdlib) - 同一个Kotlin模块被同时以源码依赖(
implementation project(':xxx'))和jar包依赖(implementation files('libs/xxx.jar'))的方式引入
3. 彻底清理构建缓存
升级后旧的构建缓存可能残留冲突文件,执行以下步骤:
- 先运行Gradle清理命令:
./gradlew clean - 然后清理Android Studio的缓存:点击菜单栏
File -> Invalidate Caches / Restart...,选择Invalidate and Restart,重启后再重新构建项目。
4. 临时关闭Kotlin增量编译
部分情况下,增量编译和新Gradle插件的优化逻辑冲突,导致重复生成类文件。可以临时关闭增量编译测试:
在项目根目录的gradle.properties中添加:
kotlin.incremental=false
如果问题解决,后续可以尝试升级Kotlin插件到更高版本后再重新开启增量编译。
5. 统一编译版本配置
确保所有模块的Java和Kotlin编译版本一致,避免因版本差异导致编译产物不兼容:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } }
补充说明
Android Gradle插件3.1.x对依赖解析和编译流程做了不少优化,而Kotlin插件如果版本滞后,可能无法适配这些变化,导致Kotlin类的编译产物被多次打包到最终的构建产物中,从而触发重复entry的异常。按照上面的步骤逐一排查,基本能解决问题。
内容的提问来源于stack exchange,提问作者Ovidiu

