使用Dagger Hilt构建Pokédex应用时遭遇ClassNotFoundException求助
Dagger Hilt构建Pokédex应用时遭遇ClassNotFoundException
我正在用Dagger Hilt开发Pokédex应用,配置好API获取对象列表后,运行应用持续抛出如下异常:
java.lang.RuntimeException: Unable to instantiate application com.example.pokedex_tutorial.PokedexApplication: java.lang.ClassNotFoundException: Didn't find class "com.example.pokedex_tutorial.PokedexApplication" on path: DexPathList[[zip file "/data/app/~~dm2RLkrZitO-2YAba3pu3A==/com.example.pokedex_tutorial-4k4KLyudFgSUrCU--HNRXA==/base.apk"],nativeLibraryDirectories=[/data/app/~~dm2RLkrZitO-2YAba3pu3A==/com.example.pokedex_tutorial-4k4KLyudFgSUrCU--HNRXA==/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.pokedex_tutorial.PokedexApplication" on path: DexPathList[[zip file "/data/app/~~dm2RLkrZitO-2YAba3pu3A==/com.example.pokedex_tutorial-4k4KLyudFgSUrCU--HNRXA==/base.apk"],nativeLibraryDirectories=[/data/app/~~dm2RLkrZitO-2YAba3pu3A==/com.example.pokedex_tutorial-4k4KLyudFgSUrCU--HNRXA==/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:51) 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/pokedex_tutorial/Hilt_PokedexApplication; 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.pokedex_tutorial.Hilt_PokedexApplication" on path: DexPathList[[zip file "/data/app/~~dm2RLkrZitO-2YAba3pu3A==/com.example.pokedex_tutorial-4k4KLyudFgSUrCU--HNRXA==/base.apk"],nativeLibraryDirectories=[/data/app/~~dm2RLkrZitO-2YAba3pu3A==/com.example.pokedex_tutorial-4k4KLyudFgSUrCU--HNRXA==/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
相关源码已上传至GitHub仓库,我怀疑问题出在Gradle配置上,以下是我的配置文件:
项目级build.gradle
plugins { id("com.android.application") version "8.1.1" apply false id("org.jetbrains.kotlin.android") version "1.8.10" apply false id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false id("com.google.dagger.hilt.android") version "2.44.2" apply false }
模块级build.gradle
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("com.google.devtools.ksp") id("com.google.dagger.hilt.android") } android { namespace = "com.example.pokedex_tutorial" compileSdk = 34 defaultConfig { applicationId = "com.example.pokedex_tutorial" minSdk = 30 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_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.4.3" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } } dependencies { implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") implementation("androidx.activity:activity-compose:1.7.2") 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") implementation("androidx.compose.material:material:1.5.1") implementation("androidx.compose.material:material-icons-core:1.5.1") implementation("androidx.compose.material:material-icons-extended:1.5.1") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0-alpha02") implementation("androidx.navigation:navigation-compose:2.7.2") implementation("androidx.constraintlayout:constraintlayout-compose:1.1.0-alpha12") // Retrofit implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.squareup.retrofit2:converter-gson:2.9.0") implementation("com.squareup.okhttp3:okhttp:4.9.0") implementation("com.squareup.okhttp3:logging-interceptor:4.9.0") // Timber implementation("com.jakewharton.timber:timber:4.7.1") // Coroutines implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1") // Coroutine Lifecycle Scopes implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") // Coil implementation("io.coil-kt:coil:1.1.1") implementation("com.google.accompanist:accompanist-coil:0.7.0") //Dagger - Hilt implementation("com.google.dagger:dagger:2.44.2") ksp("com.google.dagger:dagger-compiler:2.44.2") implementation("com.google.dagger:hilt-android:2.44.2") implementation("androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03") implementation("androidx.hilt:hilt-navigation-compose:1.1.0-alpha01") ksp("androidx.hilt:hilt-compiler:1.1.0-alpha01") ksp("com.google.dagger:hilt-android-compiler:2.44.2") implementation("androidx.palette:palette-ktx:1.0.0") }
解决建议
- 确认
PokedexApplication类已添加@HiltAndroidApp注解,并且在AndroidManifest.xml的<application>标签中通过android:name属性正确指定该类 - 执行清理重建:运行
./gradlew clean后再执行./gradlew assembleDebug,清除旧的编译缓存 - 检查包名一致性:确保
PokedexApplication类的实际包名与build.gradle中声明的namespace = "com.example.pokedex_tutorial"完全一致 - 验证KSP配置:Hilt编译器依赖必须使用ksp而非kapt,当前配置中已使用ksp,但需确保KSP版本与Kotlin版本(1.8.10)匹配
- 检查混淆设置:即使release版本未开启混淆,若debug版本有自定义混淆规则,需确保Hilt生成的类(如
Hilt_PokedexApplication)未被移除 - 升级依赖版本:当前Hilt版本2.44.2较旧,可尝试升级到稳定新版本(如2.48),同时确保Compose、Kotlin、KSP版本相互兼容
内容的提问来源于stack exchange,提问作者baqterya
相关产品推荐
相关产品推荐

