添加匿名类后,Jetpack Compose 项目无法构建

Vas*_*dan 5 android kotlin android-jetpack-compose

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

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

onCreate所以基本上,我克隆了 BasicsCodelab 项目并可以成功构建它,但是在方法 ( )末尾添加此块之后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)
Run Code Online (Sandbox Code Playgroud)

并清除该项目,我无法再构建它。因此,向项目添加匿名类(使用 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
Run Code Online (Sandbox Code Playgroud)

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

Com*_*are 5

本周,这个问题在 Kotlinlang Slack 中讨论了几次,特别是这个线程这个线程

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

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)
Run Code Online (Sandbox Code Playgroud)


Vas*_*dan 2

该问题已在1.0.0-alpha02Jetpack Compose 版本中修复。