Android Studio中Kotlin版本不兼容编译错误求助
错误原因
你遇到的编译错误本质是Kotlin版本不匹配:
/home/myuser/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio-jvm/3.6.0/5600569133b7bdefe1daf9ec7f4abeb6d13e1786/okio-jvm-3.6.0.jar!/META-INF/okio.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
Okio 3.6.0是用Kotlin 1.9.0编译的,但你的项目当前使用的是Kotlin 1.7.1,两者的元数据版本不兼容,导致编译器无法解析Okio的字节码。
之所以会引入Okio 3.6.0,是因为你声明的直接依赖会触发传递依赖:OkHttp 4.12.0、Retrofit 2.9.0(依赖OkHttp)、Stetho-OkHttp3 1.6.0(依赖OkHttp)都会间接引入Okio,而OkHttp 4.12.0默认依赖的就是Okio 3.6.0版本。
Gradle依赖处理逻辑
Gradle处理依赖的核心规则:
- 传递依赖自动引入:你写在
implementation里的直接依赖,它们自己依赖的库会被Gradle自动加入项目依赖树,不需要你手动声明。比如Retrofit依赖OkHttp,OkHttp依赖Okio,这些都是自动引入的。 - 版本冲突默认选最新版:如果多个依赖引入了同一个库的不同版本,Gradle默认会选择版本号最高的那个。但如果高版本库的编译环境(比如Kotlin版本)和你的项目不兼容,就会出现你遇到的错误。
解决方案
方案1:升级项目的Kotlin版本(推荐)
把项目的Kotlin版本升级到1.9.0及以上,和Okio 3.6.0的编译版本匹配:
找到项目根目录的build.gradle(或build.gradle.kts),修改Kotlin插件版本:
// 旧版Gradle配置(build.gradle) buildscript { ext { kotlin_version = "1.9.0" } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } // 新版Gradle配置(settings.gradle) plugins { id 'com.android.application' version '7.4.2' apply false id 'org.jetbrains.kotlin.android' version '1.9.0' apply false }
方案2:强制降级Okio到兼容版本
如果暂时不想升级Kotlin,可以强制Gradle使用兼容Kotlin 1.7.1的Okio版本(比如3.4.0):
configurations.all { resolutionStrategy.force 'com.squareup.okio:okio:3.4.0' resolutionStrategy.force 'com.squareup.okio:okio-jvm:3.4.0' }
注意:降级Okio可能和OkHttp 4.12.0存在潜在兼容性问题,需要测试核心网络功能是否正常。
内容的提问来源于stack exchange,提问作者glades

