在我向其添加匿名类后,Jetpack Compose项目无法构建

问题描述

我正在尝试将Jetpack Compose添加到我的项目中,但是在对build.gradle文件进行所有更改之后,我将无法构建它。原因是项目中有匿名类。

我没有描述我的项目build.gradle和所做的所有更改,而是将android-compose-codelabs项目用作沙箱。

因此,基本上,我克隆了BasicsCodelab项目并可以成功构建它,但是在onCreate方法(MainActivity.kt)的末尾添加了此块之后:

val listener = object : SearchView.OnQueryTextListener {
    override fun onQueryTextSubmit(query: String): Boolean {
        return false
    }
    override fun onQueryTextChange(newText: String): Boolean {
        return true
    }
}
SearchView(this).setOnQueryTextListener(listener)

并清除项目,我无法再构建它。 因此,将匿名类添加到您的项目(使用Jetpack Compose)会导致构建失败。

错误:

LiveLiterals$MainActivityKt.class

    com.android.tools.r8.errors.b: Space characters in SimpleName 
    'Boolean$fun-onQueryTextSubmit$class-$no name provided$$val-listener$fun-onCreate$class-MainActivity' 
    are not allowed prior to DEX version 040

我认为是no name provided部分的原因(应该是no-name-provided?),但是我对构建解决问题的管道并不熟悉。我试图禁用R8,但没有结果。

解决方法

本周在Kotlinlang Slack中对此进行了几次讨论,特别是this threadthis thread

这是一个内部跟踪的已知错误,尽管我没有在问题跟踪器中看到有关此问题的公共错误报告。解决方法是创建一个常规的命名子类,而不是一个匿名类:

class MyQueryTextListener : SearchView.OnQueryTextListener {
    override fun onQueryTextSubmit(query: String): Boolean {
        return false
    }
    override fun onQueryTextChange(newText: String): Boolean {
        return true
    }
}

val listener = MyQueryTextListener()

SearchView(this).setOnQueryTextListener(listener)
,

Jetpack Compose的版本1.0.0-alpha02中已解决该问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...