Android应用启动崩溃:MainActivity类找不到问题修复求助
Android应用启动崩溃:ClassNotFoundException
这是我开发的第一个Android应用,运行时总是崩溃,以下是Logcat中捕获的错误信息:
2024-08-13 16:11:02.769 13034-13034 System com.example.tester W ClassLoader referenced unknown path: /data/app/com.example.tester-1/lib/x86 2024-08-13 16:11:02.784 13034-13034 FirebaseApp com.example.tester I Device unlocked: initializing all Firebase APIs for app [DEFAULT] 2024-08-13 16:11:02.785 13034-13034 FirebaseInitProvider com.example.tester I FirebaseApp initialization successful 2024-08-13 16:11:02.793 13034-13034 AndroidRuntime com.example.tester D Shutting down VM 2024-08-13 16:11:02.793 13034-13034 AndroidRuntime com.example.tester E FATAL EXCEPTION: main Process: com.example.tester, PID: 13034 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.tester/com.example.tester.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.tester.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.tester-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.tester-1/lib/x86, /system/lib, /vendor/lib]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2567) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.tester.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.tester-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.tester-1/lib/x86, /system/lib, /vendor/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:380) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.Instrumentation.newActivity(Instrumentation.java:1078) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2557) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 2024-08-13 16:11:17.753 13034-13040 art com.example.tester I Debugger is no longer active 2024-08-13 16:11:17.754 13034-13040 art com.example.tester I Starting a blocking GC Instrumentation
我的MainActivity代码:
package com.example.sktt import android.os.Bundle import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import com.example.tester.R import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DatabaseError import com.google.firebase.database.FirebaseDatabase import com.google.firebase.database.ValueEventListener class MainActivity : AppCompatActivity() { private val databaseReference = FirebaseDatabase.getInstance().getReference() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //getting TextViews from xml file //getting data from Firebase databaseReference.addValueEventListener(object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { val getKey1Value = snapshot.child("EEG").getValue( String::class.java ) val key1Value = findViewById<TextView>(R.id.key1Value) //getting data to TextViews key1Value.text = getKey1Value } override fun onCancelled(error: DatabaseError) { } }) } }
AndroidManifest文件:
<?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.example.tester"> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Tester" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.Tester" tools:ignore="Instantiatable,MissingClass"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
本项目用于从Firebase和ESP32获取数据,恳请告知如何修复该错误。
修复方案
核心问题:包名不匹配
Manifest文件中声明的应用包名是com.example.tester,但MainActivity的包声明是package com.example.sktt,系统尝试寻找com.example.tester.MainActivity类,但实际类在com.example.sktt包下,导致ClassNotFoundException。具体修复步骤
- 修改MainActivity的包名:将MainActivity顶部的包声明改为
package com.example.tester,与Manifest中的包名保持一致:package com.example.tester // 后续代码保持不变 - 移除Manifest中的忽略标记:删除Activity标签内的
tools:ignore="Instantiatable,MissingClass",这个标记是包名不匹配时IDE报错的临时处理,修复包名后无需保留。 - 清理并重建项目:在Android Studio中依次点击
Build->Clean Project,然后Build->Rebuild Project,确保编译后的APK包含正确路径的类文件。
- 修改MainActivity的包名:将MainActivity顶部的包声明改为
额外检查项
- 确认MainActivity的文件路径为
app/src/main/java/com/example/tester/MainActivity.kt,包名需与文件目录结构一一对应。 - 若你确实想使用
com.example.sktt作为应用包名,需修改Manifest根标签的package属性为com.example.sktt,同时将代码中com.example.tester.R改为com.example.sktt.R,但这种方式改动更大,推荐直接修改Activity包名。
- 确认MainActivity的文件路径为
内容的提问来源于stack exchange,提问作者user23049825
相关产品推荐
相关产品推荐

