Kotlin Compose+Hilt应用运行时遇DexPathList类找不到异常求助
Android应用运行时Dex类找不到问题(Kotlin+Compose+Hilt)
问题概况
- 技术栈:Kotlin、Jetpack Compose、Hilt
- 错误现象:构建成功,但运行时抛出
java.lang.RuntimeException: Didn't find class on path: DexPathList,提示com.example.tstrade.MyApplication及Hilt生成的Hilt_MyApplication类找不到 - 已确认:APK中实际存在该类,且尝试过GitHub上所有公开解决方案无效
完整错误日志
FATAL EXCEPTION: main Process: com.example.tstrade, PID: 5771 java.lang.RuntimeException: Unable to instantiate application com.example.tstrade.MyApplication package com.example.tstrade: java.lang.ClassNotFoundException: Didn't find class "com.example.tstrade.MyApplication" on path: DexPathList[[dex file "/data/data/com.example.tstrade/code_cache/.overlay/base.apk/classes2.dex", zip file "/data/app/~~0aEP9N-to8KWK8_bUN3_qw==/com.example.tstrade-ICE0Zr5srgLSyF6wlZQibw==/base.apk"],nativeLibraryDirectories=[/data/app/~~0aEP9N-to8KWK8_bUN3_qw==/com.example.tstrade-ICE0Zr5srgLSyF6wlZQibw==/lib/x86_64, /system/lib64, /system_ext/lib64]] at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1466) at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1395) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6959) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2236) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.app.ActivityThread.main(ActivityThread.java:8177) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.tstrade.MyApplication" on path: DexPathList[[dex file "/data/data/com.example.tstrade/code_cache/.overlay/base.apk/classes2.dex", zip file "/data/app/~~0aEP9N-to8KWK8_bUN3_qw==/com.example.tstrade-ICE0Zr5srgLSyF6wlZQibw==/base.apk"],nativeLibraryDirectories=[/data/app/~~0aEP9N-to8KWK8_bUN3_qw==/com.example.tstrade-ICE0Zr5srgLSyF6wlZQibw==/lib/x86_64, /system/lib64, /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:51) at android.app.Instrumentation.newApplication(Instrumentation.java:1282) at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1458) at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1395) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6959) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2236) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.app.ActivityThread.main(ActivityThread.java:8177) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/example/tstrade/Hilt_MyApplication; 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.example.tstrade.Hilt_MyApplication" on path: DexPathList[[dex file "/data/data/com.example.tstrade/code_cache/.overlay/base.apk/classes2.dex", zip file "/data/app/~~0aEP9N-to8KWK8_bUN3_qw==/com.example.tstrade-ICE0Zr5srgLSyF6wlZQibw==/base.apk"],nativeLibraryDirectories=[/data/app/~~0aEP9N-to8KWK8_bUN3_qw==/com.example.tstrade-ICE0Zr5srgLSyF6wlZQibw==/lib/x86_64, /system/lib64, /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) ... 19 more Suppressed: [CIRCULAR REFERENCE: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/example/tstrade/Hilt_MyApplication;]
针对性排查与解决方案
1. 校验Hilt核心配置
- 确认
MyApplication类添加@HiltAndroidApp注解:@HiltAndroidApp class MyApplication : Application() { // ... } - 根目录
build.gradle必须包含Hilt插件依赖:buildscript { dependencies { classpath "com.google.dagger:hilt-android-gradle-plugin:2.48" // 使用最新稳定版 } } - app模块
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.48" kapt "com.google.dagger:hilt-android-compiler:2.48" }
2. 彻底清理构建缓存
- 执行Gradle命令:
./gradlew clean build --refresh-dependencies - Android Studio中操作:
File -> Invalidate Caches... -> Invalidate and Restart
3. 检查Dex分包配置
- 若minSdk < 21,强制启用multidex:
android { defaultConfig { multiDexEnabled true } } dependencies { implementation "androidx.multidex:multidex:2.0.1" } - 若minSdk >=21,检查是否存在自定义Dex规则导致Hilt生成类被排除在主Dex之外
4. 确认清单文件配置
AndroidManifest.xml中application标签的name必须指向自己的MyApplication类,而非Hilt生成的代理类:<application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.TSTrade"> <!-- ... --> </application>
5. 验证Hilt生成类
- 查看
app/build/generated/source/kapt/debug/com/example/tstrade目录,确认Hilt_MyApplication.java存在,若不存在说明编译时Hilt未正确生成代理类,需检查注解配置或依赖版本兼容性
内容的提问来源于stack exchange,提问作者Denis Znevsky
相关产品推荐
相关产品推荐

