文章目录
- 问题:
- 解决办法:
-
- [gradle与 java的版本兼容](#gradle与 java的版本兼容)
- AGP与Gradle的版本兼容
- [kotlin 与 jvm 的版本兼容](#kotlin 与 jvm 的版本兼容)
- KGP、Gradle、AGP兼容关系
- [kotlin 与 java 的编译版本配置](#kotlin 与 java 的编译版本配置)
问题:
你从githb上clone了一个项目,本地跑的时候,各种报错。如果这个项目没问题,大概率是Android Studio的版本不一致引起的的
解决办法:
gradle与 java的版本兼容
因为现在Android Studio,自带java环境,不同版本的AS,对应的jdk版本不一致,这个jdk版本会设置到Gradle的JDK,如下图:
根据项目里gradle的版本 和 Java Runtime和Gradle的版本兼容性文档:Compatibility Matrix,修改Gradle JDK为兼容的版本
如果源项目是可以正常运行的,那此时应该没问题了。
AGP与Gradle的版本兼容
如果你是修改了gradle的版本,保持Gradle JDK不变,那么还需要检查AGP的版本,AGP与Gradle的版本兼容文档: Android Gradle plugin 8.7 release notes
AGP 对Android SDK 也有版本要求,也在该文档中,进行查询 。
kotlin 与 jvm 的版本兼容
如果你的代码用到了kotlin,需要注意kotlin与java版本的关系,在kotlin的每个大版本的介绍文档中都有介绍, 例如: What's new in Kotlin 2.1.0 的kotlin-jvm
如果懒得翻文档,这里有个表格 Which versions of Kotlin are compatible with which versions of Java?
KGP、Gradle、AGP兼容关系
不兼容的高版本Gradle,可能指定过高的jvm去编译kotlin,例如:出现Unknown Kotlin JVM target: 21
错误 ,可能是 Android Studio升级到最新版,你升级了Gradle版本,KGP没有跟着升
三种解决办法:
第一种:升级KGP 到支持jvm 21 的版本
第二种:降低Gradle版本,分析是高版本的Gradle,默认指定使用 jvm21去编译kotlin 导致的。
第三种:kotlin 与 java 的编译版本
kotlin 与 java 的编译版本配置
根据文档介绍 Check for JVM target compatibility of related compile tasks,可以手动保证java和kotlin的编译版本一致,也可以使用toolchain(自动发现和安装需要的jdk)
下面介绍手动配置编译:
Compiler options in the Kotlin Gradle plugin 介绍了配置kotlin编译选项的三种方式,每种都可以对kotlin的编译版本进行配置
groovy
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
android {
// 配置java的目标版本
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
// 配置编译kotlin的jvm版本
kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_1_8
}
}