Jetpack Compose 项目在我向其添加匿名 class 后无法构建
The Jetpack Compose project doesn't build after I add an anonymous class to it
我正在尝试将 Jetpack Compose 添加到我的项目中,但在对我的 build.gradle
文件进行所有更改后,我无法构建它。原因是项目中有匿名 classes。
我没有描述我的项目、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)
并清除项目我无法再构建它。 因此,将匿名 class 添加到您的项目(使用 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 thread and this thread。
这是一个内部跟踪的已知错误,但我在问题跟踪器中没有看到 public 错误报告。解决方法是创建一个常规命名的 subclass,而不是匿名的 class:
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
版本中修复。
我正在尝试将 Jetpack Compose 添加到我的项目中,但在对我的 build.gradle
文件进行所有更改后,我无法构建它。原因是项目中有匿名 classes。
我没有描述我的项目、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)
并清除项目我无法再构建它。 因此,将匿名 class 添加到您的项目(使用 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 thread and this thread。
这是一个内部跟踪的已知错误,但我在问题跟踪器中没有看到 public 错误报告。解决方法是创建一个常规命名的 subclass,而不是匿名的 class:
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
版本中修复。