Hilt Gradle配置报错求助:无法解析ViewModelFactory相关类
解决Hilt编译错误:找不到DefaultActivityViewModelFactory类
问题描述
配置Hilt Gradle时出现编译失败,提示无法解析dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory和DefaultFragmentViewModelFactory,导致Hilt组件处理失败。
报错信息
Task :app:hiltJavaCompileDebug FAILED error: ComponentProcessingStep was unable to process 'com.example.todolist.TASKapp_HiltComponents.SingletonC' because 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' could not be resolved. Dependency trace: => element (CLASS): androidx.hilt.lifecycle.ViewModelFactoryModules.ActivityModule => element (METHOD): provideFactory(android.app.Activity,android.app.Application,java.util.Map<java.lang.String,javax.inject.Provider<androidx.hilt.lifecycle.ViewModelAssistedFactory<? extends androidx.lifecycle.ViewModel>>>) => annotation: @DefaultActivityViewModelFactory => type (ERROR annotation type): dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory If type 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' is a generated type, check above for compilation errors that may have prevented the type from being generated. Otherwise, ensure that type 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' is on your classpath. error: ComponentProcessingStep was unable to process 'com.example.todolist.TASKapp_HiltComponents.ActivityRetainedC' because 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' could not be resolved. Dependency trace: => element (CLASS): androidx.hilt.lifecycle.ViewModelFactoryModules.ActivityModule => element (METHOD): provideFactory(android.app.Activity,android.app.Application,java.util.Map<java.lang.String,javax.inject.Provider<androidx.hilt.lifecycle.ViewModelAssistedFactory<? extends androidx.lifecycle.ViewModel>>>) => annotation: @DefaultActivityViewModelFactory => type (ERROR annotation type): dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory If type 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' is a generated type, check above for compilation errors that may have prevented the type from being generated. Otherwise, ensure that type 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' is on your classpath. error: ComponentProcessingStep was unable to process 'com.example.todolist.TASKapp_HiltComponents.ActivityC' because 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' could not be resolved. Dependency trace: => element (CLASS): androidx.hilt.lifecycle.ViewModelFactoryModules.ActivityModule => element (METHOD): provideFactory(android.app.Activity,android.app.Application,java.util.Map<java.lang.String,javax.inject.Provider<androidx.hilt.lifecycle.ViewModelAssistedFactory<? extends androidx.lifecycle.ViewModel>>>) => annotation: @DefaultActivityViewModelFactory => type (ERROR annotation type): dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory If type 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' is a generated type, check above for compilation errors that may have prevented the type from being generated. Otherwise, ensure that type 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' is on your classpath. error: ComponentProcessingStep was unable to process 'com.example.todolist.TASKapp_HiltComponents.FragmentC' because 'dagger.hilt.android.internal.lifecycle.DefaultFragmentViewModelFactory' could not be resolved. Dependency trace: => element (CLASS): androidx.hilt.lifecycle.ViewModelFactoryModules.FragmentModule => element (METHOD): provideFactory(androidx.fragment.app.Fragment,android.app.Application,java.util.Map<java.lang.String,javax.inject.Provider<androidx.hilt.lifecycle.ViewModelAssistedFactory<? extends androidx.lifecycle.ViewModel>>>) => annotation: @DefaultFragmentViewModelFactory => type (ERROR annotation type): dagger.hilt.android.internal.lifecycle.DefaultFragmentViewModelFactory If type 'dagger.hilt.android.internal.lifecycle.DefaultFragmentViewModelFactory' is a generated type, check above for compilation errors that may have prevented the type from being generated. Otherwise, ensure that type 'dagger.hilt.android.internal.lifecycle.DefaultFragmentViewModelFactory' is on your classpath. 4 errors ComponentProcessingStep was unable to process 'com.example.todolist.TASKapp_HiltComponents.SingletonC' because 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' could not be resolved. ComponentProcessingStep was unable to process 'com.example.todolist.TASKapp_HiltComponents.ActivityRetainedC' because 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' could not be resolved. ComponentProcessingStep was unable to process 'com.example.todolist.TASKapp_HiltComponents.ActivityC' because 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' could not be resolved. ComponentProcessingStep was unable to process 'com.example.todolist.TASKapp_HiltComponents.FragmentC' because 'dagger.hilt.android.internal.lifecycle.DefaultFragmentViewModelFactory' could not be resolved.
当前配置
模块Gradle文件
plugins { alias(libs.plugins.android.application) alias(libs.plugins.jetbrains.kotlin.android) alias(libs.plugins.hilt) id("kotlin-kapt") id("androidx.room") } android { namespace = "com.example.todolist" compileSdk = 34 defaultConfig { applicationId = "com.example.todolist" minSdk = 24 targetSdk = 34 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.10" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } room { schemaDirectory("$projectDir/schemas") } } dependencies { implementation(libs.androidx.navigation.runtime.ktx) val room_version = "2.6.1" implementation(libs.androidx.room.runtime) annotationProcessor(libs.androidx.room.room.compiler) // To use Kotlin annotation processing tool (kapt) kapt(libs.androidx.room.room.compiler) implementation(libs.androidx.room.ktx) implementation(libs.kotlinx.coroutines.android) implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.ui) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.material3) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) implementation(libs.hilt.android) kapt(libs.hilt.android.compiler) implementation(libs.androidx.hilt.lifecycle.viewmodel) kapt(libs.androidx.hilt.compiler.v100) implementation(libs.androidx.hilt.navigation.compose) } kapt {correctErrorTypes = true}
项目根目录Gradle文件
plugins { alias(libs.plugins.android.application) apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("org.jetbrains.kotlin.android") version "1.9.22" apply false id("androidx.room") version "2.6.1" apply false }
libs.versions.toml文件
[versions] agp = "8.5.0" googleHiltAndroid = "2.52" hiltAndroid = "2.51.1" hiltAndroidCompiler = "2.52" hiltAndroidVersion = "2.44" hiltCompiler = "1.0.0-alpha01" hiltCompilerVersion = "1.2.0" hiltLifecycleViewmodel = "1.0.0-alpha03" hiltWork = "1.2.0" kotlin = "1.9.22" coreKtx = "1.13.1" junit = "4.13.2" junitVersion = "1.2.1" espressoCore = "3.6.1" kotlinxCoroutinesAndroid = "1.9.0" lifecycleRuntimeKtx = "2.8.6" activityCompose = "1.9.2" composeBom = "2024.09.02" navigationRuntimeKtx = "2.8.1" roomRuntime = "2.6.1" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "hiltWork" } androidx-hilt-compiler-v100 = { module = "androidx.hilt:hilt-compiler", version.ref = "hiltCompilerVersion" } androidx-hilt-compiler-v100alpha01 = { module = "androidx.hilt:hilt-compiler", version.ref = "hiltCompiler" } androidx-hilt-lifecycle-viewmodel = { module = "androidx.hilt:hilt-lifecycle-viewmodel", version.ref = "hiltLifecycleViewmodel" } androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltCompilerVersion" } androidx-hilt-work = { module = "androidx.hilt:hilt-work", version.ref = "hiltWork" } androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomRuntime" } androidx-room-room-compiler = { module = "androidx.room:room-compiler", version.ref = "roomRuntime" } androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomRuntime" } hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hiltAndroid" } hilt-android-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hiltAndroid" } #noinspection SimilarGradleDependencyhilt-android-compiler-v252 = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hiltAndroidCompiler" } #noinspection SimilarGradleDependencyhilt-android-v244 = { module = "com.google.dagger:hilt-android", version.ref = "hiltAndroidVersion" } #noinspection SimilarGradleDependencyhilt-android-v252 = { module = "com.google.dagger:hilt-android", version.ref = "googleHiltAndroid" } hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hiltAndroidVersion" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } androidx-ui = { group = "androidx.compose.ui", name = "ui" } androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-material3 = { group = "androidx.compose.material3", name = "material3" } androidx-navigation-runtime-ktx = { group = "androidx.navigation", name = "navigation-runtime-ktx", version.ref = "navigationRuntimeKtx" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutinesAndroid" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hiltAndroid" }
解决方案
问题根源是Hilt依赖版本不统一,且使用了过时的AndroidX Hilt测试版本,导致类路径缺失。按以下步骤修正:
1. 统一Hilt版本,清理冗余配置
- Google Hilt(
com.google.dagger:hilt-android)和AndroidX Hilt(androidx.hilt:*)必须保持版本兼容,推荐使用匹配的稳定版。 - 清理
libs.versions.toml中冗余的Hilt版本变量,只保留统一版本。
2. 替换过时的AndroidX Hilt依赖
- 废弃的
androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03已被合并到androidx.hilt:hilt-navigation-compose,直接使用稳定版即可。
3. 修正各配置文件
修改后的libs.versions.toml
[versions] agp = "8.5.0" hilt = "2.52" androidxHilt = "1.2.0" kotlin = "1.9.22" coreKtx = "1.13.1" junit = "4.13.2" junitVersion = "1.2.1" espressoCore = "3.6.1" kotlinxCoroutinesAndroid = "1.9.0" lifecycleRuntimeKtx = "2.8.6" activityCompose = "1.9.2" composeBom = "2024.09.02" navigationRuntimeKtx = "2.8.1" roomRuntime = "2.6.1" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "androidxHilt" } androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "androidxHilt" } androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomRuntime" } androidx-room-room-compiler = { module = "androidx.room:room-compiler", version.ref = "roomRuntime" } androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomRuntime" } hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" } hilt-android-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } androidx
相关产品推荐
相关产品推荐

