升级Android Studio与Gradle后使用Clickable Modifier出现Jetpack Compose编译错误
解决Android Studio Arctic Fox Canary 5 + Gradle 7.0.0-alpha05下Jetpack Compose Clickable Modifier构建错误
问题背景
你在升级到Android Studio Arctic Fox | 2020.3.1 Canary 5并将Gradle更新到7.0.0-alpha05后,项目构建时触发了java.lang.AssertionError: No such type argument slot: 1的错误,且确认是Jetpack Compose的clickable Modifier导致的——注释Compose相关代码后项目就能正常构建。
问题根源
这个错误属于版本兼容性问题:新版本的Kotlin IR(中间表示)结构发生了变化,而当前使用的Jetpack Compose编译器插件未能适配这种变化,在处理clickable修饰符的Lambda表达式时,尝试访问了不存在的类型参数槽,最终触发了断言错误。
可行解决方案
1. 升级到兼容的Jetpack Compose版本
Compose与Kotlin、Gradle、Android Studio版本强绑定,针对你的环境,推荐使用Compose 1.0.0-beta07及以上版本,同时搭配Kotlin 1.4.32(这是Compose 1.0.0-beta07要求的匹配Kotlin版本)。
- 更新项目级
build.gradle的依赖:
buildscript { repositories { google() mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:7.0.0-alpha05" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32" classpath "androidx.compose:compose-compiler:1.0.0-beta07" } }
- 更新模块级
build.gradle的Compose依赖:
dependencies { // Compose核心依赖 implementation "androidx.compose.ui:ui:1.0.0-beta07" implementation "androidx.compose.material:material:1.0.0-beta07" implementation "androidx.compose.ui:ui-tooling:1.0.0-beta07" }
2. 临时禁用Compose的Lambda Memoization优化
如果暂时无法升级Compose版本,可以通过添加编译参数绕过这个错误(注意:该操作会关闭Compose对Lambda的缓存优化,可能带来轻微的性能影响):
在模块级build.gradle的kotlinOptions中添加参数:
android { ... kotlinOptions { freeCompilerArgs += [ "-P", "plugin:androidx.compose.compiler.plugins.kotlin:noLambdaMemoization=true" ] } }
3. 暂时降级到稳定版本组合
如果上述方案都不生效,可以考虑暂时降级到经过验证的稳定版本组合,比如:
- Android Studio 4.2.x + Gradle 6.7.1 + Jetpack Compose 1.0.0-beta06
等Arctic Fox正式版或Compose后续更新修复该兼容性问题后,再重新升级。
内容的提问来源于stack exchange,提问作者David Ibrahim
相关产品推荐
相关产品推荐

