Android应用启动MainActivity时触发java.lang.ClassNotFoundException异常
Android启动MainActivity触发ClassNotFoundException问题求助
问题描述
- 包结构、导入语句及AndroidManifest.xml配置均无错误
- 异常发生在Activity实例化阶段
- 堆栈显示找不到类
com.project.notetaker.feature_note.presentation.MainActivity - 构建过程无报错,可正常完成
已执行的排查步骤
- 清理缓存并重启Android Studio(执行Invalidate Caches/Restart)
- 反复核对包名、导入语句及AndroidManifest.xml中的Activity条目
- 验证构建配置与Gradle设置
- 确认MainActivity.kt文件路径正确:
app/src/main/java/com/project/notetaker/feature_note/presentation/MainActivity.kt
相关代码与配置
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" package="com.project.notetaker"> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@drawable/baseline_edit_note_24" android:label="@string/app_name" android:roundIcon="@drawable/baseline_edit_note_24" android:supportsRtl="true" android:theme="@style/Theme.NoteTaker" tools:targetApi="31"> <activity android:name="com.project.notetaker.feature_note.presentation.MainActivity" android:exported="true" android:theme="@style/Theme.NoteTaker" tools:ignore="ExtraText"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
MainActivity.kt
package com.project.notetaker.feature_note.presentation import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import com.project.notetaker.feature_note.presentation.add_edit_note.AddEditNoteScreen import com.project.notetaker.feature_note.presentation.notes.NotesScreen import com.project.notetaker.feature_note.presentation.util.Screen import com.project.notetaker.ui.theme.NoteTakerTheme import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { NoteTakerTheme { // A surface container using the 'background' color from the theme Surface( color = MaterialTheme.colorScheme.background ){ val navController = rememberNavController() NavHost(navController = navController, startDestination = Screen.NotesScreen.route ){ composable(route = Screen.NotesScreen.route){ NotesScreen(navController = navController) } composable(route = Screen.AddEditNoteScreen.route + "?noteId={noteId}¬eColor={noteColor}", arguments = listOf( navArgument( name = "noteId" ){ type = NavType.IntType defaultValue = -1 }, navArgument( name = "noteColor" ){ type = NavType.IntType defaultValue = -1 }, ) ){ val color = it.arguments?.getInt("noteColor") ?: -1 AddEditNoteScreen( navController = navController, noteColor = color ) } } } } } } }
堆栈信息
FATAL EXCEPTION: main Process: com.project.notetaker, PID: 23881 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.project.notetaker/com.project.notetaker.feature_note.presentation.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.project.notetaker.feature_note.presentation.MainActivity" on path: DexPathList[[zip file "/data/app/~~L34MfAJ6YP_Hko4w8tyjlQ==/com.project.notetaker-J8AU4LB827YOnjsIQxkfHA==/base.apk"],nativeLibraryDirectories=[/data/app/~~L34MfAJ6YP_Hko4w8tyjlQ==/com.project.notetaker-J8AU4LB827YOnjsIQxkfHA==/lib/x86_64, /system/lib64, /system_ext/lib64]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3689) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443) 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:8176) 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.project.notetaker.feature_note.presentation.MainActivity" on path: DexPathList[[zip file "/data/app/~~L34MfAJ6YP_Hko4w8tyjlQ==/com.project.notetaker-J8AU4LB827YOnjsIQxkfHA==/base.apk"],nativeLibraryDirectories=[/data/app/~~L34MfAJ6YP_Hko4w8tyjlQ==/com.project.notetaker-J8AU4LB827YOnjsIQxkfHA==/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.instantiateActivity(AppComponentFactory.java:95) at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45) at android.app.Instrumentation.newActivity(Instrumentation.java:1378) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3676) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443) 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:8176) 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/project/notetaker/feature_note/presentation/Hilt_MainActivity; at java.lang.VMClassLoader.findLoadedClass(Native Method) at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) at java.lang.ClassLoader.loadClass(ClassLoader.java:363) ... 17 more Caused by: java.lang.ClassNotFoundException: Didn't find class "com.project.notetaker.feature_note.presentation.Hilt_MainActivity" on path: DexPathList[[zip file "/data/app/~~L34MfAJ6YP_Hko4w8tyjlQ==/com.project.notetaker-J8AU4LB827YOnjsIQxkfHA==/base.apk"],nativeLibraryDirectories=[/data/app/~~L34MfAJ6YP_Hko4w8tyjlQ==/com.project.notetaker-J8AU4LB827YOnjsIQxkfHA==/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) ... 20 more
build.gradle(Module级别)
plugins { id 'com.android.application' id 'kotlin-android' id 'com.google.devtools.ksp' id 'dagger.hilt.android.plugin' } android { compileSdk 34 defaultConfig { applicationId "com.project.notetaker" multiDexEnabled = true minSdk 21 targetSdk 34 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary true } } configurations.all { resolutionStrategy { force "androidx.navigation:navigation-common:2.6.0" } } buildTypes { release { minifyEnabled 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' //useIR = true } kotlin { jvmToolchain(8) } buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.4.4" } packagingOptions { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } namespace 'com.project.notetaker' } dependencies { implementation 'androidx.core:core-ktx:1.10.1' implementation 'androidx.appcompat:appcompat:1.6.1' implementation "androidx.compose.material3:material3:1.1.1" //noinspection GradleDependency implementation "androidx.compose.ui:ui:$compose_version" //noinspection GradleDependency //implementation "androidx.compose.material:material:$compose_version" //noinspection GradleDependency implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1' implementation 'androidx.activity:activity-compose:1.7.2' implementation 'androidx.navigation:navigation-runtime-ktx:2.6.0' testImplementation 'junit:junit:' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' //noinspection GradleDependency androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" //noinspection GradleDependency debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" // Compose dependencies implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1" implementation "androidx.navigation:navigation-compose:2.6.0" //noinspection GradleDependency implementation "androidx.compose.material:material-icons-extended:$compose_version" implementation "androidx.hilt:hilt-navigation-compose:1.1.0-alpha01" // Coroutines implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' //Dagger - Hilt implementation "com.google.dagger:hilt-android:2.45" ksp "com.google.dagger:hilt-android-compiler:2.37" implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03" ksp "androidx.hilt:hilt-compiler:1.0.0" // Room implementation "androidx.room:room-runtime:2.5.2" ksp "androidx.room:room-compiler:2.5.2" // Kotlin Extensions and Coroutines support for Room implementation "androidx.room:room-ktx:2.5.2" // Multi Dex Dependency implementation "androidx.multidex:multidex:2.0.1" }
解决方案建议
从堆栈中的Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/project/notetaker/feature_note/presentation/Hilt_MainActivity;可以看出,问题根源是Hilt生成的代理类未被正确编译或打包,结合Gradle配置,具体修复步骤如下:
统一Hilt依赖版本
当前hilt-android版本为2.45,但hilt-android-compiler版本是2.37,两者必须完全一致。修改依赖配置://Dagger - Hilt implementation "com.google.dagger:hilt-android:2.45" ksp "com.google.dagger:hilt-android-compiler:2.45" implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03" ksp "androidx.hilt:hilt-compiler:1.0.0"配置Hilt Application类
创建继承自Application的类并添加@HiltAndroidApp注解,同时在AndroidManifest.xml中指定该类:// 创建HiltApplication.kt package com.project.notetaker import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class HiltApplication : Application()修改AndroidManifest.xml的application标签:
<application android:name=".HiltApplication" <!-- 其他属性保持不变 --> >清理并重新构建项目
- 执行
Build > Clean Project - 执行
Build > Rebuild Project - 手动删除
app/build文件夹后再重新构建
- 执行
检查KSP插件版本兼容性
确保com.google.devtools.ksp插件版本与项目Kotlin版本匹配,在项目根目录的build.gradle中确认插件版本:plugins { id 'com.android.application' version '8.1.0' apply false id 'com.android.library' version '8.1.0' 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 'dagger.hilt.android.plugin' version '2.45' apply false }
内容的提问来源于stack exchange,提问作者Jashu
相关产品推荐
相关产品推荐

