Jetpack Compose 和 Android Room 兼容性

Jetpack Compose and Android Room compatibility

我正在尝试在我的 Jetpack Compose 项目中设置 Android Room。但是,当尝试添加...

kapt "androidx.room:room-compiler:2.2.3"

... 到应用 build.gradle 依赖项。我的构建失败并出现错误...

e: java.lang.NoSuchMethodError: org.jetbrains.kotlin.codegen.state.GenerationState$Builder.isIrBackend(Z)Lorg/jetbrains/kotlin/codegen/state/GenerationState$Builder;

知道这是为什么吗?我们可以使用 Android Room 和 Jetpack Compose 了吗?

我很确定我们仍然处于注解处理器(用于 Room、Retrofit 等)和实验性 Kotlin 编译器无法相处的状态。目前推荐的方法是将 Compose 的东西隔离在一个独立于需要注释处理器的模块的模块中。

目前不支持此功能,因为 kapt 不能很好地与 Jetpack Compose 配合使用。正在此处跟踪此问题 - https://issuetracker.google.com/issues/143232368

它确实有效,但并非没有一些变化。

对于使用 AndroidStudio 2020.3.1 Canary 2 创建的新项目:

在 build.gradle(项目)中:compose_version 降级为 1.0.0-alpha07 并将 ext.kotlin_version 降级为 1.4.10.

在 build.gradle(模块)中:

在 composeOptions 下将 composeCompilerVersion 降级为 1.4.10.

dependencies 下更改“androidx.compose.ui:ui-tooling:$compose_version”到“androidx.ui:ui-工具:$compose_version”.

在 Main activity - 更改预览的导入,因为它取决于 ui-tooling。

添加房间依赖项。

应该可以。

但是,一些较新的 Compose 功能可能无法使用,正如他们明确指出的那样,应该使用 Kotlin 1.4.20 及更高版本。