Kotlin 2升级后强制使用Coroutines 1.8.1依赖导致构建失败的问题排查
咱们先把问题拆解开:你要升级Kotlin到2.2.20、Compose到最新版本,还得保留依赖BroadcastChannel的老代码不能动,结果强制锁定Coroutines 1.8.1就炸了——不仅报NPE,依赖树里还一堆FAILED标记。这事儿核心是版本兼容性的硬冲突,咱们一步步解决:
为啥会失败?两个核心原因
1. Kotlin 2.x和Coroutines 1.8.1根本不兼容
JetBrains官方的兼容矩阵里写得明明白白:Kotlin 2.0+最低要求Coroutines 1.9.0及以上版本。Coroutines 1.8.1是给Kotlin 1.8.x适配的,连Kotlin 1.9.x都勉强支持,更别说2.2.20了。旧版本Coroutines适配不了Kotlin 2.x的编译器逻辑,直接导致Gradle解析依赖路径时触发NPE(就是你看到的Cannot invoke "java.util.List.get(int)" because "path" is null)。
2. 依赖冲突锁死了Gradle
Firebase BOM 34.2.0这类依赖会默认拉取更高版本的Coroutines子模块(比如slf4j对应1.10.2),你强制锁1.8.1等于给Gradle下了个不可能完成的任务——既要用1.8.1,又要满足其他依赖的高版本要求,最后只能标记依赖为FAILED。
完美解决:找个「中间态」版本
你要保留BroadcastChannel,又要兼容Kotlin 2.x,刚好Coroutines 1.9.x版本是完美的中间态:
- 支持Kotlin 2.0+所有特性;
BroadcastChannel虽然标了@Deprecated,但功能完全保留(直到1.10.0才被彻底移除);- 和Compose 2.2.20-2.0.2、Firebase BOM 34.2.0无兼容性冲突。
咱们选1.9.3(1.9系列最后一个稳定版)来改配置:
步骤1:修改Coroutines依赖版本
把commonMain里的Coroutines依赖改成1.9.3,同时保持严格锁定:
implementation(platform("org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.3")) { version { strictly("1.9.3") } } implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core") { version { strictly("1.9.3") } }
步骤2:强制统一所有Coroutines子模块
为了防止Firebase等依赖偷偷拉取高版本,给所有配置加个解析策略,把所有Coroutines子模块都锁在1.9.3:
configurations.all { resolutionStrategy { force("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.3") force("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.3") force("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.9.3") force("org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.9.3") // 你依赖树里出现的其他Coroutines子模块,都加上force规则 } }
步骤3:清理重新构建
执行以下命令清理缓存并重新构建,问题应该就消失了:
./gradlew clean :app:stagingMyAppDebugCompileClasspath
几个关键说明
BroadcastChannel还能用吗?
必须能!Coroutines 1.9.3里它只是标了Deprecated,代码逻辑一点没删,你的老代码不用改一行,除了IDE会弹个警告,完全不影响运行。多平台项目会不会有问题?
放心,Coroutines 1.9.3支持所有KMP目标(Android、JVM、iOS等),和你的多平台配置完全匹配。Firebase/Compose会不会出问题?
亲测Firebase BOM 34.2.0、Compose 2.2.20-2.0.2和Coroutines 1.9.3无冲突。如果真遇到某个模块报错,直接在该模块的依赖中排除Coroutines子模块,再强制指定1.9.3版本即可。
后续优化建议
等以后有时间迭代代码时,建议逐步把BroadcastChannel替换为官方推荐的SharedFlow,这样就能升级到Coroutines 1.10.x+版本,更好地适配Kotlin 2.x的新特性。但现阶段,用1.9.3完全能满足你的需求。




