解决Flutter项目中java.lang.ClassNotFoundException: android.MainActivity错误
Flutter在Nokia G21调试时出现MainActivity类找不到错误
错误日志
Launching lib\main.dart on Nokia G21 in debug mode... Running Gradle task 'assembleDebug'... 21.6s √ Built build\app\outputs\flutter-apk\app-debug.apk Installing build\app\outputs\flutter-apk\app-debug.apk... 31.5s E/AndroidRuntime(12164): FATAL EXCEPTION: main E/AndroidRuntime(12164): Process: we.pos_ssas.pos_ssas, PID: 12164 E/AndroidRuntime(12164): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{we.pos_ssas.pos_ssas/android.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "android.MainActivity" on path: DexPathList[[zip file "/data/app/~~MgJW1GpbwRrVLEWAdxZq9g==/we.pos_ssas.pos_ssas-yWLtXK2bVQAai1FY5c9YPg==/base.apk"],nativeLibraryDirectories=[/data/app/~~MgJW1GpbwRrVLEWAdxZq9g==/we.pos_ssas.pos_ssas-yWLtXK2bVQAai1FY5c9YPg==/lib/arm64, /data/app/~~MgJW1GpbwRrVLEWAdxZq9g==/we.pos_ssas.pos_ssas-yWLtXK2bVQAai1FY5c9YPg==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]] E/AndroidRuntime(12164): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3589) E/AndroidRuntime(12164): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3840) E/AndroidRuntime(12164): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:105) E/AndroidRuntime(12164): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:136) E/AndroidRuntime(12164): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) E/AndroidRuntime(12164): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2252) E/AndroidRuntime(12164): at android.os.Handler.dispatchMessage(Handler.java:106) E/AndroidRuntime(12164): at android.os.Looper.loopOnce(Looper.java:201) E/AndroidRuntime(12164): at android.os.Looper.loop(Looper.java:288) E/AndroidRuntime(12164): at android.app.ActivityThread.main(ActivityThread.java:7941) E/AndroidRuntime(12164): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(12164): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:553) E/AndroidRuntime(12164): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) E/AndroidRuntime(12164): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.MainActivity" on path: DexPathList[[zip file "/data/app/~~MgJW1GpbwRrVLEWAdxZq9g==/we.pos_ssas.pos_ssas-yWLtXK2bVQAai1FY5c9YPg==/base.apk"],nativeLibraryDirectories=[/data/app/~~MgJW1GpbwRrVLEWAdxZq9g==/we.pos_ssas.pos_ssas-yWLtXK2bVQAai1FY5c9YPg==/lib/arm64, /data/app/~~MgJW1GpbwRrVLEWAdxZq9g==/we.pos_ssas.pos_ssas-yWLtXK2bVQAai1FY5c9YPg==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]] E/AndroidRuntime(12164): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) E/AndroidRuntime(12164): at java.lang.ClassLoader.loadClass(ClassLoader.java:637) E/AndroidRuntime(12164): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) E/AndroidRuntime(12164): at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) E/AndroidRuntime(12164): at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:44) E/AndroidRuntime(12164): at android.app.Instrumentation.newActivity(Instrumentation.java:1273) E/AndroidRuntime(12164): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3575) E/AndroidRuntime(12164): ... 12 more
相关文件内容
android/app/src/main/kotlin/we/pos_ssas/pos_ssas/MainActivity.kt
package we.pos_ssas.pos_ssas import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity()
android/app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.INTERNET"/> <application android:label="NoorERP" android:name="${applicationName}" android:icon="@mipmap/launcher_icon"> <activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:taskAffinity="" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- Specifies an Android theme to apply to this Activity as soon as the Android process has started. This theme is visible to the user while the Flutter UI initializes. After that, this theme continues to determine the Window background behind the Flutter UI. --> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- Don't delete the meta-data below. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> <queries> <intent> <action android:name="android.intent.action.PROCESS_TEXT"/> <data android:mimeType="text/plain"/> </intent> </queries> </manifest>
android/app/build.gradle
plugins { id "com.android.application" id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" } android { namespace = "we.pos_ssas.pos_ssas" compileSdkVersion 34 ndkVersion = flutter.ndkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } defaultConfig { applicationId = "we.pos_ssas.pos_ssas" minSdk = flutter.minSdkVersion targetSdkVersion 34 versionCode = flutter.versionCode versionName = flutter.versionName multiDexEnabled true } buildTypes { release { signingConfig = signingConfigs.debug } } sourceSets { main { java.srcDirs = ['./src/main/kotlin/'] } } } flutter { source = "../../" }
android/build.gradle
buildscript { repositories { google() mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:8.2.1" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.20" classpath 'androidx.multidex:multidex:2.0.1' } } allprojects { repositories { google() mavenCentral() } } rootProject.buildDir = "../build" subprojects { afterEvaluate { project -> if (project.plugins.hasPlugin("com.android.application") || project.plugins.hasPlugin("com.android.library")) { project.android { compileSdkVersion 34 buildToolsVersion "34.0.0" } } if (project.hasProperty("android")) { project.android { if (!project.hasProperty("namespace") || namespace == null) { namespace = project.group.toString() } } } } project.buildDir = "${rootProject.buildDir}/${project.name}" if (project.name != "app") { project.evaluationDependsOn(":app") } } tasks.register("clean", Delete) { delete rootProject.buildDir }
排查修复建议
修正AndroidManifest中Activity的全类名
错误日志显示系统在查找android.MainActivity,说明相对路径解析异常。将android:name=".MainActivity"改为全类名android:name="we.pos_ssas.pos_ssas.MainActivity",避免路径解析错误。修复sourceSets配置
当前android/app/build.gradle中用java.srcDirs指定Kotlin目录,可能导致Gradle无法正确识别Kotlin源文件。修改为:
sourceSets { main { kotlin.srcDirs = ['./src/main/kotlin/'] java.srcDirs = ['./src/main/java/'] } }
明确区分Kotlin和Java源目录,确保Gradle能正确编译MainActivity.kt。
- 彻底清理重建项目
执行以下命令清理缓存并重建:
flutter clean cd android && ./gradlew clean cd .. && flutter pub get flutter run
- 完善MultiDex配置
如果你的minSdk低于21,需在Application类中继承MultiDexApplication,或在attachBaseContext方法中调用MultiDex.install(this);若minSdk为21及以上,可忽略此步骤。
内容的提问来源于stack exchange,提问作者techmystic
相关产品推荐
相关产品推荐

