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

use*_*924 19 android android-studio android-gradle-plugin android-studio-arctic-fox

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

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}
Run Code Online (Sandbox Code Playgroud)

但我们也有 Kotlin 选项

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)

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

jvmTarget = JavaVersion.VERSION_1_8或者jvmTarget = 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
}
Run Code Online (Sandbox Code Playgroud)

#2

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)

#3

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)

但我们应该选择什么呢?

小智 18

如果您使用的是 Android Studio Artic Fox 2020.3.1,则第一个选择是首选选项。

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_11
}
Run Code Online (Sandbox Code Playgroud)

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

 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 当您说出首选选项时,您能否详细说明原因以及您拥有的任何可以强制执行该观点的来源? (10认同)