多模块Android项目中Hilt注入Retrofit出现MissingBinding报错怎么解决?
问题修复方案
核心原因
Hilt无法识别到skeleton公共模块中提供的Retrofit实例,属于跨模块Hilt依赖注入的配置疏漏。
具体修复步骤
- 第一步:检查skeleton模块的Hilt依赖配置
确保skeleton模块的build.gradle.kts(或groovy版本)中已经引入Hilt相关依赖,保证Hilt配置可以跨模块传递:
// skeleton模块build.gradle.kts plugins { id("com.android.library") id("org.jetbrains.kotlin.android") id("kotlin-kapt") } dependencies { // 版本需要和app模块的Hilt版本保持一致 implementation("com.google.dagger:hilt-android:2.48") kapt("com.google.dagger:hilt-android-compiler:2.48") } kapt { correctErrorTypes = true }
- 第二步:修复app模块现有配置疏漏
你贴出的ComingSoonViewModelModule代码里InstallIn前缺少@符号,属于语法错误,修正后如下:
@Module @InstallIn(ViewModelComponent::class) // 补充缺失的@符号 object ComingSoonViewModelModule { @Provides @ViewModelScoped fun provideComingSoonRepository(comingSoonService: ComingSoonService) = ComingSoonRepository(comingSoonService) @Provides @ViewModelScoped fun provideComingSoonService(retrofit: Retrofit): ComingSoonService = retrofit.create(ComingSoonService::class.java) }
同时确认app模块的自定义Application类已经添加@HiltAndroidApp注解,这是Hilt初始化的必要配置:
@HiltAndroidApp class MyCustomApp : Application()
- 第三步:显式引入skeleton模块的Hilt Module
如果Hilt仍然无法自动扫描到skeleton模块的RetrofitBuilder配置,可以在app模块中显式指定包含该Module,强制Hilt识别公共模块的依赖提供规则:
// app模块下新增Hilt配置类 @Module @InstallIn(SingletonComponent::class) @Module(includes = [RetrofitBuilder::class]) // 显式引入skeleton模块的Retrofit配置 object AppCommonHiltModule
额外代码优化提示
你当前providesHttpLoggingInterceptor方法中连续两次设置日志级别,最后只有HEADERS级别生效,若需要打印完整的请求响应体,可删除第二行多余的级别设置:
@Singleton @Provides fun providesHttpLoggingInterceptor() = HttpLoggingInterceptor() .apply { level = HttpLoggingInterceptor.Level.BODY // 删除多余的 level = HttpLoggingInterceptor.Level.HEADERS }
内容的提问来源于stack exchange,提问作者Mahmoud Omara
相关产品推荐
相关产品推荐

