同时拉入了两个不同版本的 Kotlin 标准库(1.8.22 和 1.6.0),导致大量重复类冲突。解决思路就是让所有模块只使用同一个、统一版本的 Kotlin 标准库。
一、查看依赖树,定位引入来源
先执行:
./gradlew :app:dependencies --configuration debugCompileClasspath
找出哪些依赖引入了 kotlin-stdlib-jdk7:1.6.0
或 kotlin-stdlib-jdk8:1.6.0
,以便后续排除。
二、方案一:在全局强制统一版本
在项目根目录下 build.gradle
(或 settings.gradle
)中添加:
buildscript {
ext.kotlin_version = "1.8.22"
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
configurations.all {
resolutionStrategy {
// 强制所有 kotlin-stdlib 相关依赖都使用 1.8.22
force "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}
}
}
这样 Gradle 在解析依赖时会把所有低版本的 kotlin-stdlib 替换成 1.8.22。
三、方案二:针对单个依赖排除旧版模块
如果排查到某个第三方库(比如 some-lib
)带入了旧版的 stdlib,可以在 app/build.gradle
中:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.22"
implementation('com.example:some-lib:1.2.3') {
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7'
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
}
// ……其他依赖
}
或者更通用的做法,对所有依赖统一排除:
configurations.all {
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7'
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
}
四、方案三:升级/替换带旧版 stdlib 的库
如果某些核心库版本过旧(自带 Kotlin 1.6),建议直接把它升级到最新版本,或者换成兼容 Kotlin 1.8 的同类库。这样从根本上避免不同版本冲突。
小结
-
定位冲突:用
./gradlew dependencies
查清哪些库带了 1.6.0。 -
统一版本:用
resolutionStrategy.force
强制所有 kotlin-stdlib 都是同一版本(推荐)。 -
必要时排除:对个别依赖做
exclude
或直接升级库版本。
做完以上修改后,执行 ./gradlew clean assembleDebug
,冲突就会消失。