Android应用启动崩溃:Hilt生成类及Application类找不到求助
启动Android应用时遭遇ClassNotFoundException(Hilt相关)
启动应用时直接崩溃,错误提示找不到com.example.indoorplantcare.IndoorPlantCare类,以及Hilt生成的Hilt_IndoorPlantCare类。已尝试清理项目、重新构建、更新Hilt依赖版本、移除Manifest中的package行,但问题未解决。
错误堆栈信息
java.lang.RuntimeException: Unable to instantiate application com.example.indoorplantcare.IndoorPlantCare: java.lang.ClassNotFoundException: Didn't find class "com.example.indoorplantcare.IndoorPlantCare" on path: DexPathList[[dex file "/data/data/com.example.indoorplantcare/code_cache/.overlay/base.apk/classes5.dex", zip file "/data/app/~~Wk8dSCqJi7pIvbEfnXAmlg==/com.example.indoorplantcare-AlAYeTTWq1xDer_yFmZ9pg==/base.apk"],nativeLibraryDirectories=[/data/app/~~Wk8dSCqJi7pIvbEfnXAmlg==/com.example.indoorplantcare-AlAYeTTWq1xDer_yFmZ9pg==/lib/x86, /system/lib, /system_ext/lib]] at android.app.LoadedApk.makeApplication(LoadedApk.java:1244) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6683) at android.app.ActivityThread.access$1300(ActivityThread.java:237) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal .os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal .os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.indoorplantcare.IndoorPlantCare" on path: DexPathList[[dex file "/data/data/com.example.indoorplantcare/code_cache/.overlay/base.apk/classes5.dex", zip file "/data/app/~~Wk8dSCqJi7pIvbEfnXAmlg==/com.example.indoorplantcare-AlAYeTTWq1xDer_yFmZ9pg==/base.apk"],nativeLibraryDirectories=[/data/app/~~Wk8dSCqJi7pIvbEfnXAmlg==/com.example.indoorplantcare-AlAYeTTWq1xDer_yFmZ9pg==/lib/x86, /system/lib, /system_ext/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207) 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:1158) at android.app.LoadedApk.makeApplication(LoadedApk.java:1236) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6683) at android.app.ActivityThread.access$1300(ActivityThread.java:237) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal .os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal .os.ZygoteInit.main(ZygoteInit.java:947) Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/example/indoorplantcare/Hilt_IndoorPlantCare; at java.lang.VMClassLoader.findLoadedClass(Native Method) at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) at java.lang.ClassLoader.loadClass(ClassLoader.java:363) ... 14 more Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.indoorplantcare.Hilt_IndoorPlantCare" on path: DexPathList[[dex file "/data/data/com.example.indoorplantcare/code_cache/.overlay/base.apk/classes5.dex", zip file "/data/app/~~Wk8dSCqJi7pIvbEfnXAmlg==/com.example.indoorplantcare-AlAYeTTWq1xDer_yFmZ9pg==/base.apk"],nativeLibraryDirectories=[/data/app/~~Wk8dSCqJi7pIvbEfnXAmlg==/com.example.indoorplantcare-AlAYeTTWq1xDer_yFmZ9pg==/lib/x86, /system/lib, /system_ext/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) ... 17 more
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" > <uses-permission android:name="android.permission.INTERNET"/> <application android:name=".IndoorPlantCare" 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.IndoorPlantCare" tools:targetApi="31" tools:ignore="MissingClass"> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.IndoorPlantCare"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
模块build.gradle配置
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'com.google.gms.google-services' id 'dagger.hilt.android.plugin' id 'kotlin-kapt' } android { compileSdk 34 namespace= "com.example.indoorplantcare" defaultConfig { applicationId "com.example.indoorplantcare" minSdk 28 targetSdk 32 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary true } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = JavaVersion.VERSION_17 } buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion compose_version } packagingOptions { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } } dependencies { implementation "androidx.compose.compiler:compiler:1.0.0-beta08" implementation 'androidx.core:core-ktx:1.7.0' implementation "androidx.compose.ui:ui:$compose_version" implementation "androidx.compose.material:material:1.5.4" implementation "androidx.compose.material3:material3:1.1.2" implementation "androidx.compose.material3:material3-window-size-class:1.1.2" implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' implementation 'androidx.activity:activity-compose:1.3.1' implementation "androidx.compose.foundation:foundation:1.3.1" implementation 'androidx.compose.foundation:foundation-android:1.5.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version" //Firebase implementation 'com.google.firebase:firebase-firestore-ktx' implementation platform("com.google.firebase:firebase-bom:$firebase_bom_version") implementation "com.google.firebase:firebase-auth-ktx" implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0' implementation 'com.google.firebase:firebase-messaging-ktx:23.0.6' //Preference DataStore implementation 'androidx.datastore:datastore-preferences:1.0.0' //Navigation Compose implementation "androidx.navigation:navigation-compose:2.4.0-beta02" //Hilt implementation "com.google.dagger:hilt-android:$hilt_version" annotationProcessor "com.google.dagger:hilt-android-compiler:$hilt_version" implementation "androidx.hilt:hilt-navigation-compose:$hilt_navigation_compose_version" // Coil implementation("io.coil-kt:coil-compose:2.1.0") }
版本配置(项目级build.gradle)
ext { gradle_version = '8.1.2' kotlin_version = '1.9.10' hilt_version = '2.48.1' hilt_navigation_compose_version = '1.0.0' }
Application类代码
@HiltAndroidApp class IndoorPlantCare: Application()
修复方案
1. 替换Hilt注解处理器为kapt
你的项目用Kotlin开发,必须使用kapt来处理Hilt的注解处理器,而不是annotationProcessor(后者仅支持Java代码)。修改模块build.gradle中的Hilt依赖:
// 替换前 annotationProcessor "com.google.dagger:hilt-android-compiler:$hilt_version" // 替换后 kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
这是核心问题:如果用annotationProcessor,Kotlin类上的@HiltAndroidApp注解不会被处理,导致Hilt无法生成Hilt_IndoorPlantCare代理类,最终引发ClassNotFoundException。
2. 确认Hilt插件版本与依赖一致
检查项目级build.gradle中的Hilt插件版本,确保和hilt_version一致:
buildscript { dependencies { classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version" } }
3. 彻底清理并重新构建
- 执行
Build > Clean Project - 执行
Build > Rebuild Project - 手动删除项目根目录下的
.idea和.build文件夹,重启Android Studio
4. 移除Manifest中的tools:ignore="MissingClass"
该属性会掩盖编译时的类缺失提示,先移除它,查看编译过程中是否有明确的错误信息。
5. 验证命名空间与类包名一致性
确保IndoorPlantCare类确实在com.example.indoorplantcare包下,和gradle中namespace配置的一致。
6. 确认Multidex配置(可选)
虽然minSdk 28及以上默认开启Multidex,但可以显式添加配置确保正常:
在模块build.gradle的defaultConfig中添加:
multiDexEnabled true
同时添加依赖:
implementation 'androidx.multidex:multidex:2.0.1'
内容的提问来源于stack exchange,提问作者Edita Komarova
相关产品推荐
相关产品推荐

