gradle&java&kotlin版本冲突问题
java&kotlin version
在使用android时,通常会遇到因为jvm版本不匹配导致的报错问题,因此现在说明一下关于这些内容。
通常我们可以看到以下内容
1 | compileOptions { |
java version and java bite code version
通常我们写出来的代码,即直接java代码这些被称为·java version,and另一个版本就是这些代码被转化为字节码即java bitecode version。通常java版本越高,我们可以使用到的语言功能越多。而java bitecode version通常发展的比java版本慢很多,他与我们可以使用到语言特点,功能没有直接的关系。
至于compileOptions
和kotlinOptions
的区别是由于,在一个项目中,我们通常可以看到kotlin
和java
混用,而这就是分别对于他们的编译器版本
对于sourceCompatibility
通常指的是我们能够使用到java版本,通常你可以设置为更高级的版本,但那并不意味这你看也i使用这些高版本的java功能。因为实际上android不一定能够支持这些高版本的java。例如android14才最高·1支持java17的版本,而android13以前都最高只支持java11的版本。
targetCompatibility
在这里他指的是java bitecode version。你甚至可以设定为18,因为他不会对你选择的java版本的语言功能造成影响。而且java bitecode version通常可以和旧版本的兼容
kotlinOptions
中的jvmTarget
指的就是target的版本,也就是java bitecode version
版本冲突问题
通常对于你引入的library,或许他们支持的字节码版本是jvm18.而你的android的目标字节码版本是jvm8。那么他们很可能是兼容的,但这并不一定,也会有例外
很多时候的问题是因为gradle的版本问题,因为到了gradle8之后,他便必须使用jdk17以上