不升级Kotlin插件版本,为低版本Kotlin应用添加高版本库的方法
问题背景
项目使用Kotlin 1.7.21,配置:
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.21"
因依赖kotlin-android-extensions插件无法升级Kotlin版本,添加使用Kotlin 1.9.0的第三方库后,构建报错:
.gradle/caches/transforms-3/9d5ec3680cc0f4f2551fcfbe23e12937/transformed/jetified-kotlin-stdlib-1.9.0.jar!/META-INF/kotlin-stdlib-jdk7.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
可行解决方案
1. 强制统一Kotlin标准库版本
在项目根目录的build.gradle(或build.gradle.kts)中配置依赖解析策略,强制所有Kotlin相关依赖使用项目的1.7.21版本,覆盖第三方库引入的1.9.0版本:
Groovy DSL:
allprojects { configurations.all { resolutionStrategy { force "org.jetbrains.kotlin:kotlin-stdlib:1.7.21" force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.21" force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.21" force "org.jetbrains.kotlin:kotlin-reflect:1.7.21" } } }
Kotlin DSL:
allprojects { configurations.all { resolutionStrategy { force("org.jetbrains.kotlin:kotlin-stdlib:1.7.21") force("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.21") force("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.21") force("org.jetbrains.kotlin:kotlin-reflect:1.7.21") } } }
注意:这种方式可能存在风险,如果第三方库使用了Kotlin 1.9.0的专属新特性,运行时可能出现异常,建议先做全面测试。
2. 寻找第三方库的兼容版本
查看该第三方库的发布历史,寻找使用Kotlin 1.7.x编译的版本。大部分开源库会在更新日志或版本说明中标注使用的Kotlin版本,切换到对应版本即可避免版本冲突。
3. 逐步替换kotlin-android-extensions(长期方案)
虽然当前改写工作量大,但kotlin-android-extensions已被官方废弃,推荐用ViewBinding或DataBinding替代:
- 先在单个模块或页面中启用ViewBinding,替换
kotlin-android-extensions的功能 - 逐步完成全项目替换后,即可升级Kotlin版本到1.9.0,彻底解决版本兼容问题
内容的提问来源于stack exchange,提问作者user924

