为什么我仍然收到“无法将使用 JVM 目标 1.8 构建的字节码内联到使用 JVM 目标 1.6 构建的字节码中”

use*_*225 8 android kotlin dagger-2

我正在使用 Kotlin 和 Dagger 2 开发一个 Android 项目。我有一个NetworkModule它应该提供一个 Retrofit 的单例实例。我在其中定义了所有这些提供程序功能。

下面的所有代码片段都在里面NetworkModule

@Module
object NetworkModule {
   ...
}
Run Code Online (Sandbox Code Playgroud)

我想提供HttpRequestInterceptor,这是我尝试过的:

@Provides
@JvmStatic
internal fun provideHttpRequestInterceptor(): Interceptor {
    // compiler error: Cannot inline bytecode built with JVM target 1.8 into 
    // bytecode that is being built with JVM target 1.6, 
    // please specify proper '-jvm-target' option

    return Interceptor { chain ->
        val original = chain.request()
        val requestBuilder = original.newBuilder()
        val request = requestBuilder.build()
        chain.proceed(request)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是上面的代码总是给我这个编译器错误: Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6, please specify proper '-jvm-target' option

在我的build.gradle我已经指定:

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

我现在有两个问题:

  1. 分别用 jvm 1.6 和 1.8 构建了什么?这怎么会发生(请用例子来解释)?

  2. 正如你在我的 build.gradle 中看到的,我已经声明了构建目标是 JVM 1.8。为什么我仍然收到此错误?

Md.*_*man 24

在您的文件中添加kotlinOptions并设置jvmTarget为 1.8build.gradle以解决问题

kotlinOptions {
    jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)