如何在多平台Android模块中配置Kotlin jvmTarget?

如何在多平台Android模块中配置Kotlin jvmTarget?,android,gradle,jvm,kotlin-multiplatform,okio,Android,Gradle,Jvm,Kotlin Multiplatform,Okio,我遇到了以下生成错误: 无法将使用JVM目标1.8生成的字节码内联到使用JVM目标1.6生成的字节码中。请指定适当的“-jvm目标”选项 添加对Java8语言特性的支持可以解决这个问题 正在尝试为Android Studio中的多平台模块编译此构建脚本: import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget plugins { kotlin("multiplatform") id(&

我遇到了以下生成错误:

无法将使用JVM目标1.8生成的字节码内联到使用JVM目标1.6生成的字节码中。请指定适当的“-jvm目标”选项 添加对Java8语言特性的支持可以解决这个问题

正在尝试为Android Studio中的多平台模块编译此构建脚本:

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
    kotlin("multiplatform")
    id("com.android.library")
}

repositories {
    mavenCentral()
}

kotlin {
    android()
    ios {
        binaries {
            framework {
                baseName = "bandit"
            }
        }
    }
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.1.1")
                implementation("com.squareup.okio:okio-multiplatform:3.0.0-alpha.3")
                implementation("com.squareup.okio:okio-fakefilesystem-multiplatform:3.0.0-alpha.3")
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test-common"))
                implementation(kotlin("test-annotations-common"))
            }
        }
        val androidMain by getting
        val androidTest by getting {
            dependencies {
                implementation(kotlin("test-junit"))
                implementation("junit:junit:4.13.2")
            }
        }
        val iosMain by getting
        val iosTest by getting

        all {
            languageSettings.apply {
                enableLanguageFeature("InlineClasses")
                useExperimentalAnnotation("kotlin.time.ExperimentalTime")
                useExperimentalAnnotation("okio.ExperimentalFileSystem")
            }
        }
    }
}

android {
    compileSdkVersion(30)
    defaultConfig {
        minSdkVersion(23)
        targetSdkVersion(30)
    }
    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}

val packForXcode by tasks.creating(Sync::class) {
    group = "build"
    val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
    val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator"
    val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64"
    val framework =
        kotlin.targets.getByName<KotlinNativeTarget>(targetName).binaries.getFramework(mode)
    inputs.property("mode", mode)
    dependsOn(framework.linkTask)
    val targetDir = File(buildDir, "xcode-frameworks")
    from({ framework.outputDirectory })
    into(targetDir)
}
tasks.getByName("build").dependsOn(packForXcode)
kotlinOptions在这里是一个未解析的引用。考虑到这个错误是多么普遍,我很惊讶互联网上几乎没有解决它。有一些帖子有相同或类似的jvmTarget错误,但它们都是从与此不同的构建上下文发布的。唯一一个出现完全相同错误的实例是:

奇怪的是,原来的海报据称仅仅通过修改androidx的导入就解决了这个问题。也许值得注意的是,我的六个“不能内联字节码”都与新的多平台Okio库的方法调用相关联。但很可能是我自己的设置出错,而不是杰克·沃顿一伙人所做的错误。

根据文档:

不要被Gradle文档的代码示例愚弄,以为这种编译语法只适用于Java块。以下是为Android构建指定jvm版本目标的方式:

kotlin {
    android {
        compilations.all {
            kotlinOptions.jvmTarget = "1.8"
        }
    }
    ios {
        ...
kotlin {
    android {
        compilations.all {
            kotlinOptions.jvmTarget = "1.8"
        }
    }
    ios {
        ...