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

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。

  • 具体修复步骤

    1. 修改MainActivity的包名:将MainActivity顶部的包声明改为package com.example.tester,与Manifest中的包名保持一致:
      package com.example.tester
      
      // 后续代码保持不变
      
    2. 移除Manifest中的忽略标记:删除Activity标签内的tools:ignore="Instantiatable,MissingClass",这个标记是包名不匹配时IDE报错的临时处理,修复包名后无需保留。
    3. 清理并重建项目:在Android Studio中依次点击Build -> Clean Project,然后Build -> Rebuild Project,确保编译后的APK包含正确路径的类文件。
  • 额外检查项

    • 确认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包名。

内容的提问来源于stack exchange,提问作者user23049825

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:24:54