如何解决Dagger-Hilt下Application类的实例化失败问题
问题:Dagger-Hilt配置完成后应用启动崩溃,抛出ClassNotFoundException
崩溃报错信息
FATAL EXCEPTION: main Process: com.example.roomdiexample, PID: 16588 java.lang.RuntimeException: Unable to instantiate application com.example.roomdiexample.MyApplication: java.lang.ClassNotFoundException: Didn't find class "com.example.roomdiexample.MyApplication" on path: DexPathList[[zip file "/data/app/~~oMcb6QXOSnUrrhCyYBR2Cw==/com.example.roomdiexample-ZCL6UuDMUkt4e98K2xdTZw==/base.apk"],nativeLibraryDirectories=[/data/app/~~oMcb6QXOSnUrrhCyYBR2Cw==/com.example.roomdiexample-ZCL6UuDMUkt4e98K2xdTZw==/lib/x86, /system/lib, /system_ext/lib]] at android.app.LoadedApk.makeApplication(LoadedApk.java:1244)
自定义Application类代码
package com.example.roomdiexample import android.app.Application import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class MyApplication: Application() { }
当前Gradle配置
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' id 'dagger.hilt.android.plugin' } implementation "com.google.dagger:hilt-android:2.40.5" annotationProcessor "com.google.dagger:hilt-android-compiler:2.40.5" implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03" annotationProcessor "androidx.hilt:hilt-compiler:1.0.0" implementation 'androidx.hilt:hilt-navigation-compose:1.0.0' buildscript { dependencies { classpath "com.google.dagger:hilt-android-gradle-plugin:2.44" } }
解决方案
统一Hilt版本号:当前配置中Hilt核心依赖版本(2.40.5)与Gradle插件版本(2.44)不匹配,这会导致编译生成的代理类异常,最终引发类找不到的问题。将所有Hilt相关版本统一为同一版本,示例如下:
// 模块级build.gradle plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' id 'dagger.hilt.android.plugin' } dependencies { implementation "com.google.dagger:hilt-android:2.44" kapt "com.google.dagger:hilt-android-compiler:2.44" // Kotlin项目需用kapt替代annotationProcessor implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03" kapt "androidx.hilt:hilt-compiler:1.0.0" implementation 'androidx.hilt:hilt-navigation-compose:1.0.0' } // 项目级build.gradle中保持插件版本一致 buildscript { dependencies { classpath "com.google.dagger:hilt-android-gradle-plugin:2.44" } }清理并重建项目:版本修正后,执行
Build -> Clean Project,再执行Build -> Rebuild Project,彻底清除旧编译产物,确保新代码正确生成。移除无用注解:自定义Application类中导入了
AndroidEntryPoint但未使用,直接删除该导入语句,避免编译阶段的不必要处理。验证Manifest配置:确认AndroidManifest.xml中Application的name属性与类的全路径完全匹配,示例:
<application android:name="com.example.roomdiexample.MyApplication" <!-- 其他属性 --> > <!-- 组件配置 --> </application>也可以使用相对路径
.MyApplication,前提是Manifest的package属性与类的包名一致。启用Multidex(按需):若项目方法数超过65536,需启用Multidex。在模块级build.gradle中添加配置:
android { defaultConfig { multiDexEnabled true } } dependencies { implementation 'androidx.multidex:multidex:2.0.1' }同时修改Application类:
@HiltAndroidApp class MyApplication: MultiDexApplication() { }或者如果无法继承
MultiDexApplication,在attachBaseContext中添加:override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) MultiDex.install(this) }
内容的提问来源于stack exchange,提问作者Victor kiptoo
相关产品推荐
相关产品推荐

