Android Dagger-Hilt忽略@Provides方法 无法注入ApiService报错如何解决
问题原因
该报错本质是Hilt无法匹配到provideLoginRepository方法所需的ApiService依赖,因此判定该提供方法无效,最终抛出LoginRepository无法提供的错误,常见触发原因如下:
- 类导入不一致:
NetworkModule中provideApiService返回的ApiService,与RepositoryModule中参数声明的ApiService不是同一个包下的同名类,Hilt无法匹配类型 - 跨模块Hilt配置缺失:如果
NetworkModule定义在独立的Library模块中,该模块未正确引入Hilt注解处理器依赖,导致模块对外暴露的提供方法无法被主模块的Hilt识别 - 注解导入错误:
@Module、@Provides等Hilt核心注解错误导入了其他库的同名注解,导致Hilt没有识别到NetworkModule是合法的DI模块 - 构建缓存异常:注解处理器的构建缓存损坏,导致
NetworkModule的提供方法没有被Hilt生成的代码收录
解决步骤
按照以下顺序排查即可解决问题:
- 校验类导入一致性
分别检查两个Module文件中ApiService的import语句,确认路径完全一致,不存在导错不同模块下同名类的问题。 - 校验跨模块Hilt配置
如果NetworkModule在独立子模块中,需要确保子模块的构建配置和主模块对齐:
子模块build.gradle.kts必须添加如下配置(Groovy配置对应调整即可):plugins { id("com.google.dagger.hilt.android") kotlin("kapt") } android { // 开启kapt错误类型校正,避免跨模块类识别异常 kapt { correctErrorTypes = true } } dependencies { // Hilt版本和主模块保持完全一致 implementation("com.google.dagger:hilt-android:2.44") kapt("com.google.dagger:hilt-android-compiler:2.44") } - 校验注解导入正确性
确认两个Module的注解都来自正确的包:@Module导入自dagger.Module@InstallIn导入自dagger.hilt.InstallIn@Provides导入自dagger.Provides@Singleton导入自javax.inject.Singleton
- 清理缓存重建项目
依次执行:- 点击Android Studio菜单栏
Build -> Clean Project - 关闭Android Studio,删除项目根目录下的
.gradle、.idea文件夹 - 重新打开项目执行
Build -> Rebuild Project
- 点击Android Studio菜单栏
内容的提问来源于stack exchange,提问作者Vojtěch Hořánek
相关产品推荐
相关产品推荐

