Android studio Kotlin编译器生成错误使用-jvm目标1.8重新编译

Android studio Kotlin编译器生成错误使用-jvm目标1.8重新编译,android-studio,kotlin,Android Studio,Kotlin,我正在处理以下问题中描述的相同错误,但提出的所有解决方案都没有解决我的问题 就我而言,有一点不同。我使用的是Android Studio 3.5,最近我将Kotlin版本升级为1.3.61。最初,我收到了常见的错误消息: calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8' 我更改了文件->设置->Kotlin编译器->目标

我正在处理以下问题中描述的相同错误,但提出的所有解决方案都没有解决我的问题

就我而言,有一点不同。我使用的是Android Studio 3.5,最近我将Kotlin版本升级为1.3.61。最初,我收到了常见的错误消息:

calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
我更改了文件->设置->Kotlin编译器->目标JVM版本,在此更改后,它编译时没有出现错误,但后来当我尝试在模拟器上部署时,构建再次失败。因此,当它构建应用程序时,它可以工作,当它进行完整构建以部署时,它会失败,但理论上它们使用的是相同的配置。当我在渐变窗口中单击设置时,无论选择哪个节点,它都会打开主设置的相同窗口。有什么区别? 我检查了所有可能的设置和配置,还检查了项目结构和构建/运行/调试模板,但找不到其他可以设置属性的地方。 我试图在gradle构建中设置JvmTarget,但在这个Kotlin版本中,该属性不再存在。我考虑了一个下载问题,并将mavenCentral添加到存储库中,但没有任何改变。如果最近更改了某些内容,则此页面似乎不是最新的: 我还能试什么?为什么只有完整构建失败

更新: 目前,我通过添加非静态方法来解决这个问题,但这将在性能方面产生成本。所以我希望解决方案迟早会出现。与此同时,我正在添加构建文件,尽管我认为它不会给问题的描述增加太多内容:

//Originally the plugins were declared with the syntax "apply plugin ...."
//Changing to this form did not change the result
plugins {
    id('com.android.application')
    id('org.jetbrains.kotlin.android')
    id('org.jetbrains.kotlin.android.extensions')
}

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId ..........
        minSdkVersion 23
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        multiDexEnabled true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }

// Commented out because the property JvmTarget is not found with Kotlin 1.3.61
//    compileReleaseKotlin {
//        JvmTarget='1.8'
//    }

//    compileDebugKotlin {
//        JvmTarget='1.8'
//    }

    lintOptions {
        abortOnError false
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //I tried also JDK 7
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'

    //Follow other dependencies which are irrelevant
    // ...
}
更新 Kotlin插件的最新版本允许您将
kotlinOptions
放入
android
块中。用Kotlin 1.4.20和Gradle 6.7对此进行了测试

android {
    // ...

    kotlinOptions {
        jvmTarget = "1.8"
    }
}
原始答案 将其放置在
android
块之外的
build.gradle
文件中:

Gradle
compileKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
Gradle KTS
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
tasks.withType{
科特洛普斯酒店{
jvmTarget=“1.8”
}
}

注意
jvmTarget
中的小
j
,并且没有变量名称-这将适用于所有构建变量。

确保正确设置jvmTarget:

就来源而言,它将是:

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
对于测试,它将是:

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

你能分享你的构建文件吗?如果我没记错的话,您还可以直接用字符串(“1.8”)指定版本