在buildFeatures中启用compose后触发NoSuchMethodError问题求助
错误成因
- 开启Compose构建特性后,Compose Kotlin编译器插件默认会对项目内所有Kotlin代码插桩,生成用于Compose预览实时更新字面量的
LiveLiterals相关辅助方法,无论代码是否用到Compose。 - 触发本次崩溃的两个核心可能:
- Compose编译器扩展版本
kotlinCompilerExtensionVersion和项目使用的Kotlin版本不匹配,导致插桩生成的代码结构异常,运行时找不到生成的对应方法。 - 生成的
LiveLiterals辅助代码和现有项目的类加载逻辑冲突,非Compose代码(你的BusStop数据类)初始化时触发了方法找不到的异常。
- Compose编译器扩展版本
解决方案
- 首先对齐版本匹配关系:Compose 1.0.x分支的
kotlinCompilerExtensionVersion = 1.0.4要求项目Kotlin版本必须为1.5.31,请检查根目录build.gradle中Kotlin插件版本是否匹配,不匹配则将Kotlin版本升级到1.5.31,或更换与你当前Kotlin版本对应的Compose编译器扩展版本。 - 不需要LiveLiterals调试功能的话优先选择禁用该插桩,在app模块build.gradle的
kotlinOptions配置块中添加编译器参数即可:
kotlinOptions { jvmTarget = "1.8" // 新增以下配置 freeCompilerArgs += [ "-P", "plugin:androidx.compose.compiler.plugins.kotlin:liveLiteralsEnabled=false" ] }
- 配置完成后清理项目编译缓存,重新构建运行即可解决崩溃问题。
- 可选优化:如果仅部分功能模块使用Compose,不要在application模块全局开启
buildFeatures.compose = true,仅在实际用到Compose的子模块开启该配置即可,避免全局插桩影响老代码。
内容的提问来源于stack exchange,提问作者Harsh Mahajan
相关产品推荐
相关产品推荐

