【问题标题】:Android Studio throws build error in Kotlin project which calls static method in java interfaceAndroid Studio 在调用 Java 接口中的静态方法的 Kotlin 项目中引发构建错误
【发布时间】:2018-02-23 17:14:45
【问题描述】:

我在 Android Studio 中有一个 Kotlin 项目。我正在从 Kotlin 代码调用 Java 接口中的静态方法。构建失败并出现错误,

Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'

我的 build.gradle 中有以下内容,

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

我还在 Kotlin 编译器设置中将 Target JVM 版本更改为 1.8。尽管如此,构建还是会引发错误。还尝试了使缓存无效并重新启动。

Android Studio 版本:3.0.1

【问题讨论】:

  • 在 android studio 中尝试 File > Invalidate Cashes & Restart...
  • 试过了。仍然出现同样的错误。

标签: android android-studio kotlin


【解决方案1】:

在 android gradle 中设置 Kotlin 编译选项的正确方法。 对您的应用级别进行这些更改Build.gradle

改变

实现“org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version”

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

那就写这个任务

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8

    kotlinOptions {
        jvmTarget = '1.8'
        apiVersion = '1.1'
        languageVersion = '1.1'
    }
}

就在下面(不一定)

repositories {
    mavenCentral()
}

详情请参考here

【讨论】:

    【解决方案2】:

    build.gradle 中的 compileOptions 部分会影响 Java 编译器,而不是 Kotlin 编译器。要为 Kotlin 编译器设置目标 JVM 版本,请使用以下代码块:

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

    更多信息请参见the documentation

    【讨论】:

    • 我将以下代码添加到我的根 build.grade 文件中,仍然得到相同的错误。 plugins { id "org.jetbrains.kotlin.jvm" version "1.2.21" } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }
    【解决方案3】:

    我遇到了同样的问题,因为我的集成测试文件夹与单元测试文件夹不同。所以 build.gradle 需要更多的配置:

    compileKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
    compileTestKotlin {
        kotlinOptions.jvmTarget = "1.8"
    } 
    //added this
    compileIntegrationTestKotlin {
      kotlinOptions.jvmTarget = "1.8"
    }
    

    【讨论】:

      【解决方案4】:

      我可以通过添加以下块来解决此问题,因为我的 build.gradle 不在 dsl 中。要为 Kotlin 编译器设置目标 JVM 版本,请使用以下代码块:

      tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
          kotlinOptions {
              jvmTarget = "1.8"
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-25
        • 1970-01-01
        • 2014-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多