Android Studio Artic Fox - Java 和 Kotlin JVM 目标 - 8 对 11

Android Studio Artic Fox - Java and Kotlin JVM Target - 8 vs 11

Android Studio内置JRE是11版本。 Artic Fox 允许使用 Java 11 编译项目:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}

但我们也有 Kotlin 选项

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8
}

我们现在应该设置什么JVM目标版本?

jvmTarget = JavaVersion.VERSION_1_8jvmTarget = JavaVersion.VERSION_11

Kotlin 库使用 JDK 8:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

kotlin-stdlib-jdk11 还不存在

所有下一个配置都适用于 Artic Fox:

#1

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
    jvmTarget = JavaVersion.VERSION_11
}

#2

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8
}

#3

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8
}

但是我们应该选择什么?

如果您使用的是Android Studio Artic Fox 2020.3.1,首选是首选。

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_11
}

现在来到kotlin-stdlib,可以使用jdk8版本了

 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

kotlin-stdlib-jdk8 库与 JDK 11 SDK 完全兼容。

或者,对于仅限 Kotlin 的项目,您也可以忽略 kotlin-stdlib-jdk8 依赖项,因为 Gradle 插件会在编译期间自动添加必要的库源。

根据当前文档使用 java 8:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8
}

Android Developer docs (Java8 Support) 是沉默的。关于 jvmTarget 和 Java 11.

Kotlin Docs 表示 1.8 是 Kotlin 1.5 的默认 jvmTarget。

另请注意,在当前 Android Studio Artic Fox 2021.3.1 补丁 3 中创建新的基于 Kotlin 的项目时,它会创建一个 build.gradle 和 jvmTarget 1.8。