Kotlin 依赖冲突:Duplicate class 错误解决方案
问题描述
在 Kotlin Android 项目中编译时遇到 "Duplicate class" 错误,根源在于同时引入了不兼容版本的 Kotlin 依赖库。具体表现为:kotlin-stdlib-1.8.0
和 kotlin-stdlib-jdk7/8-1.6.0
同时存在,导致同一个类被多个库重复提供。
典型错误信息:
Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules
jetified-kotlin-stdlib-1.8.0 and jetified-kotlin-stdlib-jdk8-1.6.0
核心问题
从 Kotlin 1.8 开始,kotlin-stdlib-jdk7
和 kotlin-stdlib-jdk8
的功能已被整合到主库 kotlin-stdlib
中。当项目同时引用了新旧版本时,就会产生冲突。
解决方案
最佳实践方案(推荐)
1. 更新 Kotlin 插件版本
在项目根目录的 build.gradle
文件中更新 Kotlin 插件版本至 1.8.0+
// 项目根目录 build.gradle
plugins {
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
}
2. 移除冗余依赖
删除模块(app)级 build.gradle
中的 kotlin-stdlib-jdkX
显式引用:
dependencies {
// 删除下面两行
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0"
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0"
}
3. 添加版本约束(可选)
防止其他库引入旧版本依赖:
dependencies {
constraints {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") {
because("JDK7 扩展已包含在主库中")
}
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") {
because("JDK8 扩展已包含在主库中")
}
}
}
替代解决方案
方案A:使用 Kotlin BOM 统一版本
添加 BOM 依赖自动管理版本:
dependencies {
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
}
方案B:强制指定依赖版本
configurations.all {
resolutionStrategy {
force 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0'
}
}
完整修复示例
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android' // 继承根项目版本
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
// 其他依赖...
// 添加 BOM 统一管理
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
// 固定 core-ktx 版本(避免动态版本)
implementation 'androidx.core:core-ktx:1.10.1'
}
解决步骤
- 修改项目根目录的
build.gradle
更新 Kotlin 版本 - 删除模块级
build.gradle
中的kotlin-stdlib-jdkX
依赖 - 在模块级添加 BOM 或约束
- 同步 Gradle(Sync Project)
- 清理构建:
Build > Clean Project
- 重新构建:
Build > Rebuild Project
验证是否成功
运行命令查看依赖树:
./gradlew :app:dependencies --configuration releaseRuntimeClasspath
检查输出中是否有冲突的 kotlin-stdlib
版本
常见错误处理
如果升级后出现其他兼容性问题:
Compose 冲突:确保 Kotlin 版本与 Compose 匹配
groovycomposeOptions { kotlinCompilerExtensionVersion = "1.4.6" // 对应 Kotlin 1.8.20 }
动态版本问题:修改
core-ktx:+
为固定版本diff- implementation "androidx.core:core-ktx:+" + implementation "androidx.core:core-ktx:1.10.1"
其他库冲突:使用 Android Studio 依赖分析工具
- 打开
View > Tool Windows > Dependencies
- 筛选
kotlin
并检查冲突项
- 打开
根本原因解析
Kotlin 版本 | 变化 |
---|---|
1.8.0 之前 | kotlin-stdlib-jdk7/8 是独立拓展库 |
1.8.0+ | JDK7/8 扩展合并到主库 kotlin-stdlib 中 |
当项目同时存在:
- 直接/间接依赖
kotlin-stdlib-jdk7/8:1.6.x
- Kotlin 插件 >=1.8.0 引入的
kotlin-stdlib:1.8.x
时就会产生类重复定义冲突。
不推荐的解决方式
虽然以下方法可能临时消除错误,但会引入风险:
- 降级 Kotlin 版本(牺牲新特性)
- 降级其他库版本(可能导致功能缺失)
- 手动删除 .gradle/caches 文件(临时生效)
通过上述标准方案升级到统一版本后,既可解决冲突,又能保持最新特性和安全性更新。