Flutter应用启动崩溃:Activity类找不到实例化异常求助
问题:Flutter应用启动崩溃,抛出ClassNotFoundException
崩溃日志
E/AndroidRuntime(11852):FATAL EXCEPTION: main E/AndroidRuntime(11852):java.lang.RuntimeException: 无法实例化Activity ComponentInfo{com.name.name/com.name.name.name}: java.lang.ClassNotFoundException: 在路径DexPathList[[zip文件"/data/app/com.portal.name-nCBiBcVsHFUgEAoWt_8Nbw==/base.apk"],]上未找到类"com.name.name.name"
相关配置文件
app/build.gradle
def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('key.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply plugin: 'com.google.gms.google-services' android { compileSdkVersion 33 sourceSets { main.java.srcDirs += 'src/main/kotlin' } lintOptions { disable 'InvalidPackage' } defaultConfig { TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.name.name" minSdkVersion 24 targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true manifestPlaceholders = [ appAuthRedirectScheme: 'com.name.name' ] } /*buildTypes { release { TODO: Add your own signing config for the release build. Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } }*/ signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } } buildTypes { release { multiDexKeepProguard file('multidex-config.pro') signingConfig signingConfigs.release } } } flutter { source '../..' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" def multidex_version = "2.0.1" implementation "androidx.multidex:multidex:$multidex_version" implementation 'com.google.firebase:firebase-core:12.0.1' }
android/build.gradle
buildscript { ext.kotlin_version = '1.6.21' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:7.2.1' // classpath 'com.android.tools.build:gradle:4.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.10' } } allprojects { repositories { google() jcenter() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir }
排查与解决方案
核心问题是指定的Activity类未被找到,按以下步骤修复:
1. 校验Activity注册正确性
- 打开
AndroidManifest.xml,检查注册的Activity全类名com.name.name.name是否与实际Kotlin/Java文件的包名、类名完全一致,注意拼写和大小写错误 - 确认该Activity类文件确实存在于
src/main/kotlin或src/main/java的对应包路径下
2. 修复MultiDex分包配置
虽然已开启multiDexEnabled true,但release模式下可能出现类未被包含进主Dex的情况:
- 检查
multidex-config.pro文件,确保缺失的Activity类被加入保留列表,添加规则:-keep class com.name.name.name { *; } - 若没有该文件,直接创建并添加上述规则,同时确保
buildTypes.release中正确引用了该文件
3. 升级兼容依赖版本
- 当前
firebase-core:12.0.1版本过旧,与gradle插件7.2.1、kotlin 1.6.21存在兼容风险,建议升级至com.google.firebase:firebase-core:21.1.1 - 修改
android/build.gradle中的ext.kotlin_version为1.7.10,适配gradle 7.2.1版本
4. 清理重建项目
- 执行命令:
flutter clean清理构建缓存 - 执行命令:
flutter pub get重新拉取依赖 - 重启Android Studio后重新构建运行
5. 统一包名配置
报错中出现两个不一致的包名:com.name.name(applicationId)和com.portal.name(apk路径):
- 检查
local.properties、AndroidManifest.xml、app/build.gradle中的applicationId是否统一为com.name.name - 确认
pubspec.yaml中的android.applicationId与上述配置保持一致
内容的提问来源于stack exchange,提问作者Bekzat Zamirbekov
相关产品推荐
相关产品推荐

