非Android模块通过Hilt提供Retrofit给Android模块时注入失败排查
问题解决:多模块Hilt注入Retrofit出现Missing Binding错误
你的问题出在两个关键地方,都是多模块Hilt配置的常见坑:
1. Network模块的KSP依赖用错了
你当前使用的是ksp(libs.dagger.compiler),但Hilt模块需要用Hilt专属编译器来处理@InstallIn这类Hilt特有的注解,纯Dagger编译器无法识别这些注解,导致你的NetworkModule根本没被Hilt注册到Singleton组件中。
修正:network模块的build.gradle:
plugins { id("java-library") alias(libs.plugins.jetbrainsKotlinJvm) alias(libs.plugins.ksp) } dependencies { implementation(libs.retrofit) implementation(libs.retrofit.moshi.converter) implementation(libs.moshi) implementation(libs.moshi.kotlin) implementation(libs.hilt.core) // 替换为Hilt专属编译器 ksp(libs.hilt.compiler) ksp(libs.moshi.codegen) }
2. 确认App模块的基础配置
- 确保
:app模块已添加对:network模块的依赖:dependencies { // 其他依赖... implementation(project(":network")) } - 确认
:app模块自身的Hilt配置正确:- 插件中包含
alias(libs.plugins.hilt.android)和ksp - 存在标注
@HiltAndroidApp的Application类 - 依赖了
libs.hilt.android和ksp(libs.hilt.compiler)
- 插件中包含
问题根源说明
Hilt的@InstallIn注解用于指定模块归属的Hilt组件(比如SingletonComponent),这个注解只能被Hilt编译器处理。你之前使用Dagger编译器,相当于Hilt完全没有识别到NetworkModule的存在,因此ViewModel请求Retrofit时,Hilt找不到对应的绑定,就抛出了Missing Binding错误。
替换为Hilt编译器后,它会正确识别NetworkModule,将Retrofit和Moshi的绑定注册到Singleton组件中,App模块的ViewModel就能正常注入依赖了。
内容的提问来源于stack exchange,提问作者Daniel Bertoldi
相关产品推荐
相关产品推荐

