Android Studio Artic Fox下Java与Kotlin JVM目标版本8与11如何选择
方案选择建议
根据你的项目需求决定即可,三种方案的适用场景如下:
- 优先选方案1:如果你的项目需要使用Java 11的新特性(比如
var局部类型推断、新版HTTP Client、新增的集合/字符串工具方法等),且已经配置了核心库脱糖(Core Library Desugaring)兼容低版本Android系统,直接把compileOptions和kotlinOptions.jvmTarget都设为11即可。
注意:kotlin-stdlib-jdk8和jvmTarget 11完全兼容,标准库后缀的jdk8仅代表它提供的API兼容JDK 8,不会限制字节码的编译目标版本,设置jvmTarget为11还能让Kotlin代码享受到JVM 11的字节码优化,和Java编译目标保持一致也能避免跨语言调用的潜在兼容问题。 - 次选方案2:如果你需要用Java 11编译,但项目里存在老旧的第三方依赖仅支持JDK 8字节码,担心jvmTarget升级到11会引发兼容问题,可以选择Java编译目标设11,Kotlin的jvmTarget保持1.8。这是过渡方案,兼容性更稳妥,缺点是Kotlin代码无法享受JVM 11的字节码优化。
- 选方案3的场景:如果你的项目完全不需要Java 11的新特性,有大量历史老旧代码,或者minSdk版本极低又不想配置脱糖,直接全设为1.8即可,这是兼容性最好的方案,没有任何适配风险。
补充注意事项
如果选择方案1或2在Android Studio Arctic Fox(北极狐)版本启用Java 11编译,必须配置核心库脱糖,否则Java 11的新增API在Android 12以下系统运行会直接抛出类不存在/方法不存在的异常。
内容的提问来源于stack exchange,提问作者user924
相关产品推荐
相关产品推荐

