Caused by: java.lang.RuntimeException: Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
说明你的项目中 出现了 Kotlin 标准库的版本冲突(1.8.22 和 1.6.21 同时存在),导致类重复,构建失败。
你遇到的这个错误:
Caused by: java.lang.RuntimeException: Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules
jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22)
and
jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
说明你的项目中 出现了 Kotlin 标准库的版本冲突(1.8.22 和 1.6.21 同时存在),导致类重复,构建失败。
🧨 问题原因详解
Kotlin 标准库被拆分为多个模块(如 kotlin-stdlib
、kotlin-stdlib-jdk8
等),如果你:
明确引入了一个版本(如
1.8.22
),但某个依赖库又引入了另一个旧版本(如
1.6.21
),
那么 Gradle 会把两个版本都拉进来,造成 类重复(Duplicate class)。
✅ 解决方案
✅ 方法 1:统一 Kotlin 版本(推荐)
强制统一 Kotlin 版本为你项目中使用的版本(如 1.8.22
):
在 build.gradle(Project)
顶部添加:
buildscript {
ext.kotlin_version = '1.8.22'
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
在 build.gradle(Module)
添加:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
强制所有库使用相同 Kotlin 版本:
configurations.all {
resolutionStrategy {
force "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}
}
✅ 方法 2:检查哪个库引入了旧版 Kotlin
运行这个命令来追踪依赖树:
./gradlew app:dependencies --configuration releaseRuntimeClasspath
或者在 Android Studio 的 Gradle 工具视图中:
View > Tool Windows > Gradle > app > Tasks > help > dependencies
看看是不是哪个库(比如三方库)引入了 kotlin-stdlib-jdk8:1.6.21
。
一旦找到它,可以排除它(如下):
implementation('com.some.library:lib:1.0.0') {
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
}
✅ 方法 3:升级你的依赖库
如果是旧版库引入了 kotlin-stdlib-jdk8:1.6.21
,升级该库可能就自动解决了。
✅ 最佳实践总结
项目 | 建议版本 |
---|---|
Kotlin 版本 | 1.8.22 或 1.9.10 (最新版) |
AGP 版本 | 与 Kotlin 版本兼容,如 AGP 7.4+ 支持 Kotlin 1.8+ |
Gradle 版本 | 建议使用 7.4+ |
需要我帮你检查 dependencies
中哪个库引入了 kotlin-stdlib-jdk8:1.6.21
吗?只要你贴出 gradle dependencies
的输出或你项目依赖列表,我可以快速指出冲突源。