在含Dagger/Hilt的遗留应用集成Jetpack Compose时遇运行崩溃
解决Compose集成Hilt时的LiveLiterals运行时错误
问题根源
这个错误的核心原因是:Compose编译器错误地给非Compose模块(也就是你的CommonModule所在的模块)生成了LiveLiterals相关代码,但该模块并没有引入Compose依赖,导致运行时找不到对应的方法。就算你在app模块禁用了LiveLiterals,其他模块可能仍被Compose编译器误处理。
分步解决方案
仅在Compose模块应用编译配置
打开包含CommonModule的模块(比如di模块)的build.gradle.kts(或.gradle)文件,移除所有Compose相关的编译插件和配置:// 移除Compose编译器插件引用 // id("org.jetbrains.kotlin.plugin.compose") // 移除Compose编译器参数配置 // kotlinOptions { // freeCompilerArgs += listOf( // "-plugin-option", "androidx.compose.compiler.plugins.kotlin:liveLiteralsEnabled=false" // ) // }确保只有实际使用Compose的app模块保留这些配置。
全局禁用LiveLiterals
如果上面的操作无效,在项目根目录的gradle.properties中添加全局配置,强制所有模块禁用LiveLiterals:androidx.compose.compiler.plugins.kotlin.liveLiteralsEnabled=false彻底清理重建项目
执行以下操作清除旧编译产物:- 点击Android Studio菜单栏的
Build > Clean Project - 接着执行
Build > Rebuild Project - 必要时手动删除项目根目录的
.gradle文件夹和各模块的build文件夹,重启Android Studio
- 点击Android Studio菜单栏的
排查模块依赖
用./gradlew :your-di-module:dependencies命令查看CommonModule所在模块的依赖树,确认没有间接引入不必要的Compose依赖,如有则通过exclude排除。
额外注意
如果项目用了模块化Hilt配置,确保各模块的@Module、@InstallIn等注解配置正确,避免Compose编译器误识别Hilt模块类为Compose相关代码。
内容的提问来源于stack exchange,提问作者kingston
相关产品推荐
相关产品推荐

