尝试在 Android 应用程序中启动“MainActivity”时出现“java.lang.ClassNotFoundException”

问题描述 投票:0回答:1

我在开发 Android 应用程序时面临一个令人困惑的问题,非常感谢您的见解。尽管仔细检查了我的代码和配置,但在尝试启动应用程序的 MainActivity 时,我还是遇到了 java.lang.ClassNotFoundException 错误。

问题详情:

包结构、导入语句和 AndroidManifest.xml 均已正确设置。 该错误发生在活动组件的实例化过程中。 错误堆栈跟踪表明运行时正在努力定位类 com.project.notetaker.feature_note.presentation.MainActivity。 构建成功完成,没有任何明显问题。

下面是我的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
                            )
                        }

                    }
                }
            }
        }
    }
}

采取的故障排除步骤:

清除缓存,重新启动Android Studio,并使缓存无效/重新启动。 仔细检查包名称、导入和 AndroidManifest.xml 条目。 已验证构建配置和 Gradle 设置。 确保类文件 MainActivity.kt 位于正确的路径:app/src/main/java/com/project/notetaker/feature_note/presentation/MainActivity.kt。

这是堆栈跟踪

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                                                                                                  
android kotlin runtime-error classnotfoundexception
1个回答
0
投票

我看到你正在使用 Hilt。

  • 检查您是否有一个带有
    Application
    注释的
    @HiltAndroidApp
  • 将其添加到
    manifest
    属性内的应用程序标记中的
    name
  • 确保您使用
    kapt
    作为
    Hilt
    库的注释处理器,而不是
    ksp
    或其他注释处理器。
plugins {
       id 'kotlin-kapt'
}

dependencies {
    implementation "com.google.dagger:hilt-android:2.45"
    kapt "com.google.dagger:hilt-compiler:2.45"
}
© www.soinside.com 2019 - 2024. All rights reserved.