You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:55:56