第4章 Kotlin编译器版本不匹配

4.1 现象识别

构建项目时出现以下错误,编译中断:

Unsupported Kotlin version. The Kotlin compiler extension version (1.5.21) 
does not match the required Kotlin compiler version (1.9.0). 
Please update kotlinCompilerExtensionVersion in your build.gradle.

该错误通常出现在使用Compose Compiler的Kotlin编译器扩展(kotlinCompilerExtensionVersion)与项目实际使用的Kotlin编译器版本(kotlinVersion)不兼容时。错误提示中会直接指出当前扩展版本与期望的Kotlin版本,是定位问题的第一线索。

4.2 数据采集

收集以下三个关键数据,形成排查表:

数据项 采集命令/位置 示例值
Kotlin编译器版本 build.gradle.kts 中 kotlin("jvm") version "1.9.0" 1.9.0
Compose编译器扩展版本 build.gradle.kts 中 composeOptions { kotlinCompilerExtensionVersion = "1.5.21" } 1.5.21
项目使用的Compose BOM或单独版本 依赖声明中 implementation(platform("androidx.compose:compose-bom:2023.10.01")) 2023.10.01
提示:如果项目使用libs.versions.toml版本目录,上述值可能定义在versions块中,需同时检查目录和构建脚本。

4.3 原因定位

核心原因:kotlinCompilerExtensionVersion 与 Kotlin 版本之间存在严格的对应关系。Compose Compiler 的每个版本只支持特定范围的 Kotlin 版本。下表列出常用对应规则:

Compose Compiler 扩展版本 支持的最早 Kotlin 版本 支持的最晚 Kotlin 版本(通常等于该扩展编译时使用的Kotlin版本)
1.5.0 – 1.5.31.9.01.9.22
1.5.4 – 1.5.81.9.221.9.23
1.5.10 – 1.5.141.9.241.9.24
1.6.0 – 1.6.22.0.02.0.0
1.6.10 – 1.6.112.0.102.0.10
注意:此对应规则随Compose版本更新而变化。官方文档或GitHub Releases页面会发布兼容性矩阵。切勿随意猜测版本号的对齐关系。

判断规则:若 kotlinCompilerExtensionVersion 不在项目使用的 Kotlin 版本所支持的范围内,则触发错误。例如:项目使用 Kotlin 1.9.0,但 kotlinCompilerExtensionVersion 为 1.6.0(需要 Kotlin 2.0.0),则出现不匹配。

4.4 故障树分析

下图为 Kotlin 版本不匹配问题的故障树,展示从现象到根因的排查路径:

Kotlin版本不匹配故障树 Unsupported Kotlin version 错误 kotlinCompilerExtensionVersion 不兼容 项目Kotlin版本与扩展不匹配 扩展版本太低 扩展版本太高 Kotlin版本过旧 Kotlin版本过新 调整二者版本至兼容范围 检查Compose Compiler扩展版本与Kotlin版本对应矩阵(见下表) 更新其中一个版本直至满足兼容关系

4.5 修复动作

  1. 确定目标兼容对:根据项目使用的 Kotlin 版本,从兼容矩阵中找到对应的 kotlinCompilerExtensionVersion。若 Kotlin 是 1.9.22,则扩展版本应选 1.5.4 – 1.5.8 区间内的一个。
  2. 更新 build.gradle.kts:
// 在 android 块中
composeOptions {
    kotlinCompilerExtensionVersion = "1.5.8"
}
// 或者在 libs.versions.toml 中更新版本号后同步
  1. 或者升级 Kotlin 版本:如果项目需要较新扩展特性,可对应增加 Kotlin 版本。
// 在 root 或模块 build.gradle.kts 中
kotlin("jvm") version "1.9.23"
// 同步后,扩展版本可保留为 1.5.8 或升级至 1.5.10+
经验法则:尽量使用与 Compose Compiler 扩展版本同时发布的 Kotlin 版本。通常扩展版本号中的 1.5.x 对应 Kotlin 1.9.x,1.6.x 对应 Kotlin 2.0.x。

4.6 复测及预防

复测步骤:

  • 执行 ./gradlew assembleDebug(Android)或对应构建命令,观察是否不再出现 Unsupported Kotlin version 错误。
  • 检查编译日志中是否有其他不兼容警告(如Kotlin API版本弃用)。
  • 运行单元测试验证Compose代码正常编译。

预防措施:

预防方法 说明
使用Compose BOM BOM会指定兼容的编译器扩展版本,减少手动对齐错误。
版本目录集中管理 在libs.versions.toml中定义kotlin和compose-compiler版本,避免散落在多处。
升级前查阅兼容矩阵 参考官方兼容性表(示例链接,实际教学用)。
CI流水线中增加版本检查 编写Gradle任务在校验阶段检测版本对是否匹配。
建议:在项目README或Wiki中维护当前使用的Kotlin版本与Compose Compiler扩展版本的对应记录,方便团队所有成员查阅。