【问题标题】:Jetpack Compose: Backend Internal error when calling function with lambda from CoroutineJetpack Compose:使用协程中的 lambda 调用函数时出现后端内部错误
【发布时间】:2020-03-22 08:30:04
【问题描述】:

有点奇怪,但在使用 Jetpack Compose 时出现“后端内部错误”错误,结果发现它是通过调用从协程中获取 lambda 的函数触发的。

很容易重现....已将范围缩小到以下步骤:

使用“Empty Compose Activity”模板创建新项目。更新到 dev07(以前的版本也有问题),并将以下内容添加到 build.gradle

composeOptions {
    kotlinCompilerExtensionVersion = "0.1.0-dev07"
}

添加关注MyActivity.kt

fun someFun(success: (String) -> Unit) {
}

然后将onCreate 更新为以下:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    lifecycleScope.launch {
        someFun {
        }
    }
    setContent {
        MaterialTheme {
            Greeting("Android")
        }
    }
}

构建项目,然后您会看到以下错误:

e: java.lang.IllegalStateException: Backend Internal error: Exception during code generation
Element is unknownThe root cause java.lang.RuntimeException was thrown at: org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:42)
    at org.jetbrains.kotlin.codegen.CompilationErrorHandler.lambda$static$0(CompilationErrorHandler.java:35)
    at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFilesInternal$backend_jvm(JvmBackendFacade.kt:114)

请注意,您还需要将以下依赖项添加到build.gradle

implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"

【问题讨论】:

  • AFAIK、Jetpack Compose 和协程目前不能一起工作。这将长期有效,只是现在不行。
  • 看过一些关于此的内容,但让我感到困惑的是,其他情况似乎正在发挥作用,例如从 ViewModel 中的 viewModelScope 调用挂起函数。问题似乎只有在传递 lambda 时才会发生(例如,如果使用 collect() 或只是此处显示的基本示例)
  • 也许协程在不包含对 @Composable 函数(如 MaterialTheme()Greeting())的调用的 Kotlin 文件中很好。
  • 原始问题将所有此类调用都放在单独的文件中......这在这篇文章中有点捏造,只是为了说明查看问题所需的最低限度。
  • 可能不相关,但是当我没有在 build.gradle (buildFeatures.compose=true) 中启用 compose 时出现“后端内部”错误

标签: android android-jetpack-compose


【解决方案1】:

确保将其添加到您使用 compose 的每个模块中

buildFeatures {
    compose true
}

这是 alashow 的评论,也是唯一有效的方法。

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    相关资源
    最近更新 更多