Dagger Hilt编译错误:找不到DefaultActivityViewModelFactory相关类
Dagger Hilt编译错误:找不到DefaultActivityViewModelFactory/DefaultFragmentViewModelFactory类
问题概述
在Android项目中使用Dagger Hilt时触发编译错误,提示dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory和dagger.hilt.android.internal.lifecycle.DefaultFragmentViewModelFactory类未在类路径中找到,尝试将androidx.hilt版本降至1.0.0-alpha01后问题仍未解决。
原因分析
核心问题为依赖版本不兼容:
- 项目中使用的
androidx.hilt:hilt-lifecycle-viewmodel版本为1.0.0-alpha03,属于早期预览版,而Dagger Hilt核心版本为2.48。后续版本中,AndroidX Hilt的ViewModel相关功能已被整合到Dagger Hilt核心库中,旧版androidx.hilt库依赖的内部类在新版Dagger Hilt中已不存在或路径变更。 - 旧版androidx.hilt库的
@DefaultActivityViewModelFactory注解会引用Dagger Hilt内部的DefaultActivityViewModelFactory类,但该类在Dagger Hilt 2.48中已不再是公开可依赖的类,依赖关系完全调整。
解决方案
步骤1:更新libs.versions.toml配置
移除旧的androidx.hilt版本定义及相关库:
[versions] # 移除该行:hiltLifecycleViewmodel = "1.0.0-alpha03" # 保持hilt与hiltAndroidCompiler版本一致(均为2.48) hilt = "2.48" hiltAndroidCompiler = "2.48" # 其他版本配置保持不变 [libraries] # 删除以下两个androidx-hilt相关定义 # androidx-hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "hiltLifecycleViewmodel" } # androidx-hilt-lifecycle-viewmodel = { module = "androidx.hilt:hilt-lifecycle-viewmodel", version.ref = "hiltLifecycleViewmodel" } # 其他库配置保持不变
步骤2:调整app模块build.gradle.kts依赖
移除旧的androidx-hilt依赖,仅保留Dagger Hilt核心依赖:
dependencies { // 其他依赖保持不变... // 仅保留Dagger Hilt核心依赖 implementation(libs.hilt.android) ksp(libs.hilt.android.compiler) // 移除以下两行旧依赖 // implementation(libs.androidx.hilt.lifecycle.viewmodel) // ksp(libs.androidx.hilt.compiler) // 其他依赖保持不变... }
步骤3:代码适配(若需)
将原androidx.hilt.lifecycle.HiltViewModel注解替换为Dagger Hilt核心库的注解:
// 替换前 // import androidx.hilt.lifecycle.HiltViewModel // @HiltViewModel // 替换后 import dagger.hilt.android.lifecycle.HiltViewModel @HiltViewModel class YourViewModel @Inject constructor(/* 依赖参数 */) : ViewModel() { // 业务逻辑 }
步骤4:清理缓存并重新编译
执行以下操作确保缓存完全清理:
- Android Studio菜单栏:
Build→Clean Project→Rebuild Project - 或终端执行命令:
./gradlew clean assembleDebug
验证基础配置
确保Application类正确添加@HiltAndroidApp注解:
import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class ChatApplication : Application() { // 自定义逻辑 }
内容的提问来源于stack exchange,提问作者NikshA36
相关产品推荐
相关产品推荐

