Android无法实例化Application:Hilt相关ClassNotFoundException问题求助
升级Android Studio到Giraffe | 2022.3.1后,集成Dagger Hilt的App启动报错ClassNotFoundException
错误日志
FATAL EXCEPTION: main Process: com.heet.sleepmagic, PID: 18977 java.lang.RuntimeException: Unable to instantiate application com.heet.sleepmagic.MainApp package com.heet.sleepmagic: java.lang.ClassNotFoundException: Didn't find class "com.heet.sleepmagic.MainApp" on path: DexPathList[[zip file "/data/app/~~vhnGOdaJiLk6ztERW8DzSg==/com.heet.sleepmagic-8TvtgzEu5imBuAIS-WXaGQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~vhnGOdaJiLk6ztERW8DzSg==/com.heet.sleepmagic-8TvtgzEu5imBuAIS-WXaGQ==/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:6720) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2133) 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:7872) 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: Didn't find class "com.heet.sleepmagic.MainApp" on path: DexPathList[[zip file "/data/app/~~vhnGOdaJiLk6ztERW8DzSg==/com.heet.sleepmagic-8TvtgzEu5imBuAIS-WXaGQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~vhnGOdaJiLk6ztERW8DzSg==/com.heet.sleepmagic-8TvtgzEu5imBuAIS-WXaGQ==/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:52) at android.app.Instrumentation.newApplication(Instrumentation.java:1243) at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1458) at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1395) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6720) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2133) 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:7872) 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: Failed resolution of: Lcom/heet/sleepmagic/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.heet.sleepmagic.Hilt_MainApp" on path: DexPathList[[zip file "/data/app/~~vhnGOdaJiLk6ztERW8DzSg==/com.heet.sleepmagic-8TvtgzEu5imBuAIS-WXaGQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~vhnGOdaJiLk6ztERW8DzSg==/com.heet.sleepmagic-8TvtgzEu5imBuAIS-WXaGQ==/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
项目配置与代码
模块级build.gradle
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id ("dagger.hilt.android.plugin") } android { namespace = "com.heet.sleepmagic" compileSdk = 34 defaultConfig { applicationId = "com.heet.sleepmagic" minSdk = 24 targetSdk = 34 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.4.3" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } } dependencies { implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") implementation("androidx.activity:activity-compose:1.8.0") implementation(platform("androidx.compose:compose-bom:2023.03.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00")) androidTestImplementation("androidx.compose.ui:ui-test-junit4") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") // Compose dependencies implementation ("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2") implementation ("androidx.navigation:navigation-compose:2.7.4") //Dagger - Hilt implementation ("com.google.dagger:hilt-android:2.42") annotationProcessor ("com.google.dagger:hilt-android-compiler:2.42") annotationProcessor ("androidx.hilt:hilt-compiler:1.0.0") implementation ("androidx.hilt:hilt-navigation-compose:1.0.0") //Coil implementation ("io.coil-kt:coil-compose:2.3.0") }
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: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:name=".MainApp" android:theme="@style/Theme.SleepMagic" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.SleepMagic"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
MainApp.kt
package com.heet.sleepmagic import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class MainApp:Application()
MainActivity.kt
package com.heet.sleepmagic import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.sp import androidx.navigation.compose.rememberNavController import com.heet.sleepmagic.ui.navigation.Navigation import com.heet.sleepmagic.ui.theme.HattonFontFamily import com.heet.sleepmagic.ui.theme.HattonTypography import com.heet.sleepmagic.ui.theme.SleepMagicTheme import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { SleepMagicTheme { Navigation(navController = rememberNavController()) } } } }
解决方案
核心问题是Hilt生成的Hilt_MainApp类未被正确打包到APK中,导致系统找不到MainApp类,以下是具体修复步骤:
1. 替换annotationProcessor为kapt
项目使用Kotlin,Hilt注解处理器需用kapt而非Java项目的annotationProcessor:
- 在模块级build.gradle的plugins块添加kapt插件:
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("dagger.hilt.android.plugin") id("kotlin-kapt") // 新增该行 }
- 将所有
annotationProcessor替换为kapt:
//Dagger - Hilt implementation ("com.google.dagger:hilt-android:2.42") kapt ("com.google.dagger:hilt-android-compiler:2.42") kapt ("androidx.hilt:hilt-compiler:1.0.0") implementation ("androidx.hilt:hilt-navigation-compose:1.0.0")
2. 清理并重建项目
- 执行
Build > Clean Project - 执行
Build > Rebuild Project - 点击工具栏
Sync Project with Gradle Files确保配置生效
3. 升级Hilt版本(可选但推荐)
旧版本Hilt可能与新Android Studio存在兼容性问题,可升级到稳定版本:
//Dagger - Hilt implementation ("com.google.dagger:hilt-android:2.48") kapt ("com.google.dagger:hilt-android-compiler:2.48") kapt ("androidx.hilt:hilt-compiler:1.1.0") implementation ("androidx.hilt:hilt-navigation-compose:1.1.0")
4. 禁用增量编译(临时排查)
若问题仍存在,可临时禁用Kotlin增量编译:
kotlinOptions { jvmTarget = "1.8" incremental = false // 新增该行 }
之后重新构建项目。
5. 显式配置Multidex(可选)
虽然minSdk24默认支持Multidex,但显式配置可避免潜在问题:
- 在defaultConfig块添加:
defaultConfig { // ...其他配置 multiDexEnabled = true }
- 添加Multidex依赖:
implementation ("androidx.multidex:multidex:2.0.1")
内容的提问来源于stack exchange,提问作者heet kanabar
相关产品推荐
相关产品推荐

