使用Hilt DI无法创建ViewModel实例的技术求助
Hilt注入ViewModel失败:无法创建实例异常解决
遇到的异常:
java.lang.RuntimeException: Cannot create an instance of class com.example.testing.MainViewModel
相关代码如下:
Composable代码
@Composable fun MainScreen( viewModel: MainViewModel = hiltViewModel(), ) {}
MainViewModel.kt
@HiltViewModel class MainViewModel @Inject constructor( private val initialName: String, ) : ViewModel() {
依赖模块(AppModule)
@Module @InstallIn(SingletonComponent::class) object AppModule { @Provides @Singleton fun provideInitialName(): String = "ABCD" }
根目录build.gradle
plugins { ... // Dagger Hilt id 'com.google.dagger.hilt.android' version '2.44' apply false }
app目录build.gradle
plugins { ... id 'kotlin-kapt' id 'dagger.hilt.android.plugin' } android { ... compileSdk 34 defaultConfig { targetSdk 34 ... } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } composeOptions { kotlinCompilerExtensionVersion '1.3.2' } } dependencies { ... // Dagger-Hilt implementation 'com.google.dagger:hilt-android:2.46.1' kapt 'com.google.dagger:hilt-android-compiler:2.46.1' kapt "com.google.dagger:hilt-compiler:2.44" implementation 'androidx.hilt:hilt-navigation-compose:1.0.0' }
Application类
@HiltAndroidApp class DOBApp: Application()
Manifest配置
android:name=".DOBApp"
问题原因
核心问题是Hilt相关依赖版本不统一:根目录插件版本为2.44,app模块中implementation版本为2.46.1,还混入了2.44版本的hilt-compiler,版本不一致会导致编译生成的代码不兼容,进而无法正确注入ViewModel。
解决步骤
统一所有Hilt版本
- 修改根目录build.gradle中的Hilt插件版本,与app模块依赖版本保持一致(这里统一用2.46.1):
plugins { ... // Dagger Hilt id 'com.google.dagger.hilt.android' version '2.46.1' apply false } - 修改app目录build.gradle的依赖,移除重复的
hilt-compiler依赖(hilt-android-compiler已经包含该功能):dependencies { ... // Dagger-Hilt implementation 'com.google.dagger:hilt-android:2.46.1' kapt 'com.google.dagger:hilt-android-compiler:2.46.1' implementation 'androidx.hilt:hilt-navigation-compose:1.0.0' }
- 修改根目录build.gradle中的Hilt插件版本,与app模块依赖版本保持一致(这里统一用2.46.1):
清理并重新构建项目
在Android Studio中执行:Build -> Clean ProjectBuild -> Rebuild Project
完成以上操作后,Hilt就能正确生成注入代码,ViewModel实例可以正常创建。
内容的提问来源于stack exchange,提问作者sdboyapati
相关产品推荐
相关产品推荐

