I'm facing a puzzling issue while developing an Android application and would greatly appreciate your insights. Despite meticulously reviewing my code and configuration, I'm encountering a java.lang.ClassNotFoundException error when attempting to launch the MainActivity of my app.
Problem Details:
The package structure, import statements, and AndroidManifest.xml are all correctly set up. The error occurs during the instantiation of the activity component. The error stack trace suggests that the runtime is struggling to locate the class com.project.notetaker.feature_note.presentation.MainActivity. The build completes successfully without any apparent issues.
below is my 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>
here is my 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
)
}
}
}
}
}
}
}
Troubleshooting Steps Taken:
Cleared caches, restarted Android Studio, and invalidated caches/restarted. Double-checked package names, imports, and AndroidManifest.xml entries. Verified build configuration and Gradle settings. Ensured that the class file MainActivity.kt is located at the correct path: app/src/main/java/com/project/notetaker/feature_note/presentation/MainActivity.kt.
Here is the stacktrace
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
here is build.gradle
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"
}
I see you are using Hilt.
Application
class which is annotated with @HiltAndroidApp
annotationmanifest
in Application tag inside name
attribute.kapt
as annotation processor of Hilt
library not ksp
or other annotation processors.plugins {
id 'kotlin-kapt'
}
dependencies {
implementation "com.google.dagger:hilt-android:2.45"
kapt "com.google.dagger:hilt-compiler:2.45"
}