【问题标题】:Why am I getting Backend Internal error: "Exception during IR lowering error" when using Jetpack Compose clickable-Modifier?为什么我在使用 Jetpack Compose clickable-Modifier 时收到后端内部错误:“IR 降低错误期间出现异常”?
【发布时间】:2021-09-18 11:26:48
【问题描述】:

我正在一个 Surface 中创建一个自定义 Checkbox,它有一个 Modifier.clickable

    Surface(
        modifier = Modifier
            .clickable(
                enabled = enabled,
                interactionSource = interactionSource,
                indication = rememberRipple(),
                role = Role.Checkbox,
                onClick = { onCheckedChange(!checked) }
            )
            .then(modifier),
    ) {
        Row {
            Checkbox(checked = checked, onCheckedChange = {}, colors = colors)
            Text(text = text ?: "")
        }
    }

当我尝试构建它时,我收到 Exception during IR lowering error 错误:

org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering
File being compiled: /home/rene/AndroidStudioProjects/pass13/app/src/main/java/com/aresid/simplepasswordgeneratorapp/ui/widgets/Checkbox.kt

查看完整的堆栈跟踪 here

删除Modifier.clickable 解决了构建问题。

我已经尝试升级/降级某些版本,但没有任何工作正常。
目前,我正在使用这些版本:

    ext.versions = [
            'compileSdk': 31,
            'targetSdk' : 30,
            'minSdk'    : 26,
            'kotlin'    : '1.5.30',
            'navigation': '2.3.5',
            'compose'   : '1.0.2'
    ]

有人知道如何解决这个问题吗?

【问题讨论】:

  • compose 1.0.2 不支持 kotlin 1.5.30,它需要 1.5.21。如果需要使用1.5.30,可以切换到alpha1.1.0-alpha03
  • @PhilipDukhov 感谢您的回答。我不需要 Kotlin 版本 1.5.30,但不幸的是,降级到 1.5.21 会导致完全相同的错误。在此处查看完整的堆栈跟踪 pastebin.com/qXpyF8p4
  • 很难说到底是什么导致了错误,你的代码对我来说很好。首先确保您使用的是最新的 AS,即北极狐 | 2020.3.1 补丁 2。如果你已经在使用它,BackendException 表示 compose 编译器或 kotlin 后端的错误,我建议你将它报告给compose issue trackerJetBrains issue tracker,包括你的 Android 的完整项目和版本Studio,因此可以轻松复制
  • @PhilipDukhov 再次感谢。 Android Studio 是最新的。我在您发送给我的每个跟踪器中都创建了错误。让我们期待最好的!
  • @RenéJörgSpies 我遇到了类似的问题...您能提供该问题的链接

标签: android kotlin android-jetpack-compose


【解决方案1】:

所以我按照@PhilipDukhov 的建议通过问题跟踪器与 JetBrains 团队取得了联系,他们解决了我的问题:https://youtrack.jetbrains.com/issue/KT-48815

我在我的应用程序的build.gradle 文件中使用了kotlinCompilerExtensionVersion = versions.composeVersion,这是不正确的。 versions.composeVersion 是 Gradle 提供的,但似乎已被弃用。自己应该手动编写他们正在使用的版本。

【讨论】:

    【解决方案2】:

    就我而言,我忘了在 build.gradle 中添加

    android {
     ... 
    
        buildFeatures {
           compose true
        }
        composeOptions {
           kotlinCompilerExtensionVersion '1.0.3'
           kotlinCompilerVersion '1.5.30'
        }
    }
    

    【讨论】:

    • kotlinCompilerVersion 现已贬值:/
    【解决方案3】:

    在我的例子中,我创建了独立的模块来维护独立于功能模块的组件和主题。 因此,在 android 内部的模块 gradle 中更新下面对我有用。

       android {
    .
    .
    .
             buildFeatures {
                    compose true
                }
                composeOptions {
                     kotlinCompilerExtensionVersion '1.0.3'
                     kotlinCompilerVersion '1.5.30'
                }
        }
    

    【讨论】:

      【解决方案4】:

      因为JetpackCompose! 在gradle 7.2 中,您应该在build.gradle 中的android 块中添加这些行:

        kotlinOptions {
              jvmTarget = "1.8"
          }
          
          buildFeatures {
              compose = true
          }
          composeOptions {
              kotlinCompilerExtensionVersion = "1.0.4"
          }
      

      【讨论】:

        【解决方案5】:

        这听起来可能违反直觉(毕竟,错误显示“Backend Internal Error”),但对我来说,重新启动 Android Studio 客户端解决了它。

        【讨论】:

          【解决方案6】:

          我通过以下步骤解决了我的问题

          1. 清理项目
          2. 删除 .gradle 和 .idea 文件夹
          3. 使缓存无效/重新启动
          4. 同步分级
          5. 重建项目

          【讨论】:

            猜你喜欢
            • 2021-09-08
            • 2022-06-22
            • 2019-02-04
            • 2020-02-27
            • 2019-08-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-10
            相关资源
            最近更新 更多