Android定制Kotlin编译器使用的Kotlin metadata版本是多少?
Android工具链使用定制版Kotlin Compiler,是否有方法可以获知该定制编译器使用的Kotlin metadata版本?
- Android-tools的Lint组件依赖
/android/tools/external/com-intellij/kotlin-compiler/,底层内置了特定版本的Kotlin metadata。 - 常规Kotlin编译目标通常使用不同版本的Kotlin Compiler。
- 因此项目升级Kotlin版本时,例如从1.5.30升级到1.6.0-M1,会触发如下报错:
Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.6.0, expected version is 1.4.0.
有三种常用方法可以查询到该定制编译器的Kotlin metadata版本:
1. 从定制编译器jar包直接提取
找到项目当前使用的Android Gradle Plugin(AGP)对应的依赖包com.android.tools.external.com-intellij:kotlin-compiler,该包默认存储在本地Gradle缓存的caches/modules-2/files-2.1/com.android.tools.external.com-intellij/kotlin-compiler/路径下。
解压该jar包后,执行以下命令查看metadata版本常量:javap -v kotlin/metadata/Metadata.class | grep "METADATA_VERSION"
命令输出的数值就是当前定制编译器支持的Kotlin metadata版本。
2. 从报错信息直接获取
你遇到的报错信息里已经明确给出了内置版本,其中expected version对应的值就是当前Android工具链要求的metadata版本,比如上述报错里对应的版本就是1.4.0。
3. 通过AGP版本对应查询
不同版本AGP内置的Kotlin metadata版本是固定的,常用映射关系如下:
- AGP 7.0.x 系列:对应metadata版本1.4.0
- AGP 7.1.x ~ 7.3.x 系列:对应metadata版本1.5.1
- AGP 7.4.x 及以上版本:对应metadata版本1.7.1
如果升级Kotlin版本后触发该报错,可在项目根目录的gradle.properties文件中添加以下配置,临时关闭metadata版本校验:kotlin.mpp.stability.nowarn=true
该配置仅为临时规避方案,长期使用建议匹配项目Kotlin版本和AGP支持的metadata版本,避免出现Lint检查失效、编译异常等问题。
内容的提问来源于stack exchange,提问作者Sergei Rybalkin

