使用Hilt的Android应用启动时出现ClassNotFoundException问题求助
Hilt依赖注入Android应用启动时出现ClassNotFoundException(MainApp类找不到)
我正在开发一款使用Hilt进行依赖注入的Android应用,但运行应用时,出现了针对MainApp类的ClassNotFoundException。以下是Logcat错误信息:
Process: com.nat.abudawood_internal_hr, PID: 22193 java.lang.RuntimeException: Unable to instantiate application com.nat.abudawood_internal_hr.MainApp package com.nat.abudawood_internal_hr: java.lang.ClassNotFoundException: Didn't find class "com.nat.abudawood_internal_hr.MainApp" on path: DexPathList[[zip file "/data/app/~~Yzrf2RBaLzHqDKZsUwqZaA==/com.nat.abudawood_internal_hr-RtyaSVKozlG4L2qYUTxHRA==/base.apk"],nativeLibraryDirectories=[/data/app/~~Yzrf2RBaLzHqDKZsUwqZaA==/com.nat.abudawood_internal_hr-RtyaSVKozlG4L2qYUTxHRA==/lib/arm64, /system/lib64, /system/system_ext/lib64]] at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1574) at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1503) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7558) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2400) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8762) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.nat.abudawood_internal_hr.MainApp" on path: DexPathList[[zip file "/data/app/~~Yzrf2RBaLzHqDKZsUwqZaA==/com.nat.abudawood_internal_hr-RtyaSVKozlG4L2qYUTxHRA==/base.apk"],nativeLibraryDirectories=[/data/app/~~Yzrf2RBaLzHqDKZsUwqZaA==/com.nat.abudawood_internal_hr-RtyaSVKozlG4L2qYUTxHRA==/lib/arm64, /system/lib64, /system/system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76) at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:52) at android.app.Instrumentation.newApplication(Instrumentation.java:1232) at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1566) at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1503) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7558) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2400) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8762) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067) Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/nat/abudawood_internal_hr/Hilt_MainApp; at java.lang.VMClassLoader.findLoadedClass(Native Method) at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) at java.lang.ClassLoader.loadClass(ClassLoader.java:363) ... 16 more Caused by: java.lang.ClassNotFoundException: Didn't find class "com.nat.abudawood_internal_hr.Hilt_MainApp" on path: DexPathList[[zip file "/data/app/~~Yzrf2RBaLzHqDKZsUwqZaA==/com.nat.abudawood_internal_hr-RtyaSVKozlG4L2qYUTxHRA==/base.apk"],nativeLibraryDirectories=[/data/app/~~Yzrf2RBaLzHqDKZsUwqZaA==/com.nat.abudawood_internal_hr-RtyaSVKozlG4L2qYUTxHRA==/lib/arm64, /system/lib64, /system/system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
代码片段
MainApp类
@HiltAndroidApp class MainApp : Application() { }
AndroidManifest.xml
<application android:name=".MainApp" ... </application>
App模块Gradle依赖
// Hilt implementation("com.google.dagger:hilt-android:"2.44") ksp("com.google.dagger:hilt-android-compiler:"2.44") ksp("androidx.hilt:hilt-compiler:1.1.0") implementation("androidx.hilt:hilt-navigation-compose:1.1.0")
项目级Gradle配置
plugins { id("com.android.application") version "8.1.2" apply false id("org.jetbrains.kotlin.android") version "1.9.10" apply false id("com.google.dagger.hilt.android") version "2.44" apply false id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false }
使用开发环境:Android Studio Giraffe | 2022.3.1 Patch 2
已尝试的解决方法
- 检查AndroidManifest.xml中的包名
- 清理并重建项目
- 确认Hilt配置无误
解决方案
1. 修正依赖版本的引号错误
App模块的Hilt依赖中,版本号存在多余引号的语法错误,会导致依赖无法正确解析,修正后:
// Hilt implementation("com.google.dagger:hilt-android:2.44") ksp("com.google.dagger:hilt-android-compiler:2.44") ksp("androidx.hilt:hilt-compiler:1.1.0") implementation("androidx.hilt:hilt-navigation-compose:1.1.0")
2. 在App模块中正确启用插件
项目级Gradle仅声明了插件但未在App模块中启用,需要在App模块的build.gradle顶部添加:
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("com.google.dagger.hilt.android") id("com.google.devtools.ksp") }
3. 启用MultiDex解决分包问题
如果应用方法数超过65536,会导致Dex分包异常,需要启用MultiDex:
- 在App模块的build.gradle中配置:
android { defaultConfig { multiDexEnabled true } } dependencies { implementation("androidx.multidex:multidex:2.0.1") }
- 修改MainApp类继承MultiDexApplication:
@HiltAndroidApp class MainApp : MultiDexApplication() { }
或在无法修改父类时,手动初始化:
@HiltAndroidApp class MainApp : Application() { override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) MultiDex.install(this) } }
4. 清理构建缓存并重启
- 执行
File > Invalidate Caches...,选择Invalidate and Restart - 删除项目根目录的
.gradle文件夹和App模块的build文件夹,重新同步项目
5. 验证Hilt生成类是否存在
查看app/build/generated/ksp/debug/com/nat/abudawood_internal_hr/目录下是否存在Hilt_MainApp类,如果不存在,说明KSP未正确生成代码,需重新检查插件和依赖配置,确保同步无报错。
内容的提问来源于stack exchange,提问作者mohamed
相关产品推荐
相关产品推荐

