运行时无法实例化Kotlin应用:ClassNotFoundException问题求助
运行时致命异常排查:无法实例化DamroApplication类
错误日志
2023-02-10 10:37:04.008 17261-17261/? E/USNET: USNET: appName: lk.ac.kln.mit.stu.mobileapplicationdevelopment 2023-02-10 10:37:04.251 17261-17261/lk.ac.kln.mit.stu.mobileapplicationdevelopment E/AndroidRuntime: FATAL EXCEPTION: main Process: lk.ac.kln.mit.stu.mobileapplicationdevelopment, PID: 17261 java.lang.RuntimeException: Unable to instantiate application lk.ac.kln.mit.stu.mobileapplicationdevelopment.DamroApplication package lk.ac.kln.mit.stu.mobileapplicationdevelopment: java.lang.ClassNotFoundException: Didn't find class "lk.ac.kln.mit.stu.mobileapplicationdevelopment.DamroApplication" on path: DexPathList[[zip file "/data/app/~~jf7fR-0oBIKxMDmk413RUQ==/lk.ac.kln.mit.stu.mobileapplicationdevelopment-82b_ZM-v8B137LudTn0m0Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~jf7fR-0oBIKxMDmk413RUQ==/lk.ac.kln.mit.stu.mobileapplicationdevelopment-82b_ZM-v8B137LudTn0m0Q==/lib/arm64, /system/lib64, /system/system_ext/lib64]] at android.app.LoadedApk.makeApplication(LoadedApk.java:1464) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7458) at android.app.ActivityThread.access$1600(ActivityThread.java:310) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2281) 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:8669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) Caused by: java.lang.ClassNotFoundException: Didn't find class "lk.ac.kln.mit.stu.mobileapplicationdevelopment.DamroApplication" on path: DexPathList[[zip file "/data/app/~~jf7fR-0oBIKxMDmk413RUQ==/lk.ac.kln.mit.stu.mobileapplicationdevelopment-82b_ZM-v8B137LudTn0m0Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~jf7fR-0oBIKxMDmk413RUQ==/lk.ac.kln.mit.stu.mobileapplicationdevelopment-82b_ZM-v8B137LudTn0m0Q==/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:1177) at android.app.LoadedApk.makeApplication(LoadedApk.java:1456) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7458) at android.app.ActivityThread.access$1600(ActivityThread.java:310) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2281) 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:8669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Llk/ac/kln/mit/stu/mobileapplicationdevelopment/Hilt_DamroApplication; at java.lang.VMClassLoader.findLoadedClass(Native Method) at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) at java.lang.ClassLoader.loadClass(ClassLoader.java:363) ... 15 more Caused by: java.lang.ClassNotFoundException: Didn't find class "lk.ac.kln.mit.stu.mobileapplicationdevelopment.Hilt_DamroApplication" on path: DexPathList[[zip file "/data/app/~~jf7fR-0oBIKxMDmk413RUQ==/lk.ac.kln.mit.stu.mobileapplicationdevelopment-82b_ZM-v8B137LudTn0m0Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~jf7fR-0oBIKxMDmk413RUQ==/lk.ac.kln.mit.stu.mobileapplicationdevelopment-82b_ZM-v8B137LudTn0m0Q==/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)
错误核心:系统无法实例化DamroApplication类,同时找不到Hilt自动生成的Hilt_DamroApplication类。
相关代码文件
1. DamroApplication.kt
package lk.ac.kln.mit.stu.mobileapplicationdevelopment import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class DamroApplication : Application() { }
2. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <application android:name=".DamroApplication" android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MobileApplicationDevelopment" tools:targetApi="31"> <activitya android:name=".activities.ShoppingActivity" android:exported="false"> <meta-data android:name="android.app.lib_name" android:value="" /> </activitya> <activity android:name=".activities.LoginRegisterActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.lib_name" android:value="" /> </activity> </application> </manifest>
3. 文件夹结构

问题分析与解决方法
核心原因
日志显示两类问题:一是DamroApplication类未被找到,二是Hilt自动生成的代理类Hilt_DamroApplication缺失,大概率是Hilt配置不完整、编译过程未生成必要类,或是Manifest配置错误导致类加载失败。
解决步骤
修复AndroidManifest中的语法错误
注意到Manifest中ShoppingActivity的标签写成了<activitya>,这是明显的拼写错误,会导致Manifest解析异常,进而影响Application类的加载。将<activitya>改为<activity>:<activity android:name=".activities.ShoppingActivity" android:exported="false"> <meta-data android:name="android.app.lib_name" android:value="" /> </activity>检查Hilt的完整配置
- 项目级build.gradle:确保添加Hilt插件依赖
buildscript { dependencies { classpath "com.google.dagger:hilt-android-gradle-plugin:2.44" } } - 模块级build.gradle:应用Hilt插件,添加Hilt依赖并启用kapt
plugins { 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" }
注意:使用的Hilt版本需保持一致,建议使用最新稳定版。
- 项目级build.gradle:确保添加Hilt插件依赖
清理并重建项目
编译缓存可能导致生成的类未被正确打包,执行以下操作:- 在Android Studio中点击
Build->Clean Project,完成后点击Rebuild Project - 或者通过命令行执行:
./gradlew clean assembleDebug
- 在Android Studio中点击
验证Dex配置(若开启多Dex)
如果应用开启了多Dex,需确保DamroApplication被包含在主Dex中:- 在模块级build.gradle中启用多Dex:
android { defaultConfig { multiDexEnabled true } } dependencies { implementation "androidx.multidex:multidex:2.0.1" } - 若自定义了Application类,需继承
MultiDexApplication或在attachBaseContext中初始化多Dex:override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) MultiDex.install(this) }
- 在模块级build.gradle中启用多Dex:
确认包路径匹配
检查DamroApplication的包路径lk.ac.kln.mit.stu.mobileapplicationdevelopment与Manifest中android:name=".DamroApplication"的相对路径是否一致,确保类文件放置在正确的包目录下(从文件夹结构看路径是正确的,但需确认编译后的类是否被正确打包)。
内容的提问来源于stack exchange,提问作者Nawoda Jayasinghe
相关产品推荐
相关产品推荐

