You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}&noteColor={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配置,具体修复步骤如下:

  1. 统一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"
    
  2. 配置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"
        <!-- 其他属性保持不变 -->
    >
    
  3. 清理并重新构建项目

    • 执行Build > Clean Project
    • 执行Build > Rebuild Project
    • 手动删除app/build文件夹后再重新构建
  4. 检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 16:32:00