kotlin 尝试jetpack合成时,显示错误:编译器后端,无法由旧编译器加载

3b6akqbq  于 2023-01-02  发布在  Kotlin
关注(0)|答案(6)|浏览(195)

类“androidx.compose.ui.platform.ComposeView "由新的Kotlin编译器后端编译,无法由旧编译器加载
这是我的onCreate方法:

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return inflater.inflate(R.layout.fragment_delivered, container, false).apply {
        findViewById<ComposeView>(R.id.compose_view).setContent {
            MaterialTheme {
                Surface {
                    Text("Hello")
                }
            }
        }
    }
}

编写版本:

accompanistVersion = "0.1.9"
composeVersion = '0.1.0-dev17'

app.gradle

buildFeatures {
        compose true
        dataBinding true
    }
    composeOptions {
        kotlinCompilerVersion rootProject.kotlinVersion
        kotlinCompilerExtensionVersion rootProject.composeVersion
    }


// Compose
    implementation "androidx.compose.runtime:runtime:$rootProject.composeVersion"
    implementation "androidx.compose.ui:ui:$rootProject.composeVersion"
    implementation "androidx.compose.foundation:foundation:$rootProject.composeVersion"
    implementation "androidx.compose.foundation:foundation-layout:$rootProject.composeVersion"
    implementation "androidx.compose.material:material:$rootProject.composeVersion"
    implementation "androidx.compose.ui:ui-viewbinding:$rootProject.composeVersion"
    implementation "androidx.ui:ui-tooling:$rootProject.composeVersion"
    implementation "androidx.compose.runtime:runtime-livedata:$rootProject.composeVersion"
    implementation "com.google.android.material:compose-theme-adapter:$rootProject.composeVersion"
    implementation "dev.chrisbanes.accompanist:accompanist-coil:$rootProject.accompanistVersion"
b1payxdu

b1payxdu1#

当创建一个带有“Empty Compose Activity”的新项目时,默认的app/build.grade包括以下选项。

android {
    // other options

    kotlinOptions {
        jvmTarget = '1.8'
        useIR = true
    }

    // more options
}

添加这些选项(特别是useIR = true)似乎为我修复了这个错误。
useIR选项引用了Kotlin的新JVM后端,文档对此进行了如下特别说明。
如果启用Jetpack Compose,您将自动选择使用新的JVM后端,而无需在kotlinOptions中指定编译器选项。
这似乎是不正确的。

pepwfjgg

pepwfjgg2#

请将此任务添加到您的应用/build.gradle文件中:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs += ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"]
    }
}
oo7oh9g9

oo7oh9g93#

遵循official setup guide中的步骤会导致同样的问题。
添加必要的dependencies/configuration for the compose library为我修复了这个问题。

pu3pd22g

pu3pd22g4#

.kts版本

tasks.withType<KotlinCompile>() {
    kotlinOptions.jvmTarget = "1.8"
    kotlinOptions.freeCompilerArgs = listOf(
        *kotlinOptions.freeCompilerArgs.toTypedArray(),
        "-Xallow-jvm-ir-dependencies",
        "-Xskip-prerelease-check")
    useIR = true
}
vh0rcniy

vh0rcniy5#

在我的例子中,这是导致相应错误的依赖关系:

androidTestImplementation 'androidx.compose.ui:ui-test-junit4:1.0.5'

我猜玩它应该会有帮助

zbsbpyhn

zbsbpyhn6#

查找Kotlin兼容版本here
更新build.gradle中的依赖关系

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${version}"

这里${version}是Kotlin版本。
在Gradle Setting.

中配置合适的JDK版本
在以下命令下运行

gradle clean

gradle build

对我来说,它解决了我的问题。

  • 如果你不喜欢,请告诉我 *

相关问题