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

Jetpack Compose中Dagger Hilt依赖注入失败:无法实例化应用

问题分析:Dagger Hilt集成导致ClassNotFoundException及相关问题

当前使用Jetpack Compose + Dagger Hilt时出现以下问题:

  • 无法实例化com.lelestacia.submissioncompose.application.MyApp类,抛出ClassNotFoundException
  • Hilt未生成ViewModel工厂的Java代码
  • App Module中的函数虽有Hilt消费标识,但仍被标记为未使用(相同配置在其他项目可正常运行)

异常信息

FATAL EXCEPTION: main
Process: com.lelestacia.submissioncompose, PID: 6340
java.lang.RuntimeException: 无法实例化应用程序com.lelestacia.submissioncompose.application.MyApp(包名com.lelestacia.submissioncompose):java.lang.ClassNotFoundException: 未在路径DexPathList[[dex文件"/data/data/com.lelestacia.submissioncompose/code_cache/.overlay/base.apk/classes3.dex", zip文件"/data/app/~~UPDLbuW7-1MIDHePtZAPuw==/com.lelestacia.submissioncompose-VtqvuByd7B1W6Uwl4SYgJA==/base.apk"],nativeLibraryDirectories=[/data/app/~~UPDLbuW7-1MIDHePtZAPuw==/com.lelestacia.submissioncompose-VtqvuByd7B1W6Uwl4SYgJA==/lib/x86_64, /system/lib64, /system_ext/lib64]]上找到类"com.lelestacia.submissioncompose.application.MyApp"
    at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1466)
    at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1395)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6746)
    at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2134)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:201)
    at android.os.Looper.loop(Looper.java:288)
    at android.app.ActivityThread.main(ActivityThread.java:7898)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: java.lang.ClassNotFoundException: 未在路径DexPathList[[dex文件"/data/data/com.lelestacia.submissioncompose/code_cache/.overlay/base.apk/classes3.dex", zip文件"/data/app/~~UPDLbuW7-1MIDHePtZAPuw==/com.lelestacia.submissioncompose-VtqvuByd7B1W6Uwl4SYgJA==/base.apk"],nativeLibraryDirectories=[/data/app/~~UPDLbuW7-1MIDHePtZAPuw==/com.lelestacia.submissioncompose-VtqvuByd7B1W6Uwl4SYgJA==/lib/x86_64, /system/lib64, /system_ext/lib64]]上找到类"com.lelestacia.submissioncompose.application.MyApp"
    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:1458)
    at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1395) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6746) 
    at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2134) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loopOnce(Looper.java:201) 
    at android.os.Looper.loop(Looper.java:288) 
    at android.app.ActivityThread.main(ActivityThread.java:7898) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 
Suppressed: java.lang.NoClassDefFoundError: 无法解析类Lcom/lelestacia/submissioncompose/application/Hilt_MyApp;
    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: 未在路径DexPathList[[dex文件"/data/data/com.lelestacia.submissioncompose/code_cache/.overlay/base.apk/classes3.dex", zip文件"/data/app/~~UPDLbuW7-1MIDHePtZAPuw==/com.lelestacia.submissioncompose-VtqvuByd7B1W6Uwl4SYgJA==/base.apk"],nativeLibraryDirectories=[/data/app/~~UPDLbuW7-1MIDHePtZAPuw==/com.lelestacia.submissioncompose-VtqvuByd7B1W6Uwl4SYgJA==/lib/x86_64, /system/lib64, /system_ext/lib64]]上找到类"com.lelestacia.submissioncompose.application.Hilt_MyApp"
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    ... 19 more

排查与解决方案

从异常中的Hilt_MyApp未找到可以看出,核心问题是Hilt的注解处理器没有生成必要的代码,或者生成的代码未被正确打包进APK。以下是针对性的排查步骤:

1. 检查Hilt依赖配置是否完整

确保build.gradle(项目级和模块级)的依赖和插件配置正确:

  • 项目级build.gradle:
    plugins {
        id 'com.android.application' version 'x.x.x' apply false
        id 'org.jetbrains.kotlin.android' version 'x.x.x' apply false
        id 'com.google.dagger.hilt.android' version '2.x.x' apply false
    }
    
  • 模块级build.gradle:
    plugins {
        id 'com.android.application'
        id 'org.jetbrains.kotlin.android'
        id 'kotlin-kapt'
        id 'com.google.dagger.hilt.android'
    }
    
    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
        kotlinOptions {
            jvmTarget = '1.8'
        }
    }
    
    dependencies {
        implementation "com.google.dagger:hilt-android:2.x.x"
        kapt "com.google.dagger:hilt-android-compiler:2.x.x"
        // ViewModel相关依赖
        implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
        kapt "androidx.hilt:hilt-compiler:1.0.0"
    }
    
    kapt {
        correctErrorTypes = true
    }
    

2. 确认MyApp类的注解配置

MyApp类必须正确添加@HiltAndroidApp注解,且继承Application:

@HiltAndroidApp
class MyApp : Application() {
    // ...
}

同时检查AndroidManifest.xml中是否正确声明了这个Application类:

<application
    android:name=".application.MyApp"
    <!-- 其他配置 -->
>

3. 清理并重新构建项目

Hilt的注解处理器生成的代码可能因缓存问题未更新,执行以下操作:

  • 点击Android Studio的Build -> Clean Project
  • 然后点击Build -> Rebuild Project
  • 或直接删除项目根目录下的.gradle、build文件夹,重新同步项目

4. 检查Dex配置

如果开启了MultiDex,确保MyApp类被包含在主Dex中:

  • 添加MultiDex依赖:implementation "androidx.multidex:multidex:2.0.1"
  • 让MyApp继承MultiDexApplication,或在attachBaseContext中调用MultiDex.install(this):
    @HiltAndroidApp
    class MyApp : MultiDexApplication() {
        // ...
    }
    

5. 检查ViewModel的Hilt注解使用

确保ViewModel使用@HiltViewModel注解,且在Compose中通过hiltViewModel()获取:

@HiltViewModel
class MyViewModel @Inject constructor(
    private val repo: MyRepository
) : ViewModel() {
    // ...
}

在Compose中:

@Composable
fun MyScreen(viewModel: MyViewModel = hiltViewModel()) {
    // ...
}

6. 检查Module的注解与使用

确保App Module的注解正确,比如@Module、@InstallIn(SingletonComponent::class),且提供的依赖被其他类通过@Inject消费:

@Module
@InstallIn(SingletonComponent::class)
object AppModule {
    @Provides
    fun provideMyRepository(): MyRepository {
        return MyRepositoryImpl()
    }
}

如果Module中的函数被标记为未使用,可能是没有地方通过@Inject依赖该对象,或Hilt注解处理器未识别到消费点,可尝试重新构建后查看是否消失。


内容的提问来源于stack exchange,提问作者lelestacia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:45:35