Flutter应用Release模式崩溃:Dart VM初始化失败报错
解决Flutter Release模式崩溃:Precompiled runtime requires a precompiled snapshot
问题描述
Flutter应用在Debug模式下正常运行,但Release模式启动即崩溃。单独打开Android文件夹在Android Studio中以Release模式运行时,触发如下报错:
A/flutter: [FATAL:flutter/runtime/dart_vm_initializer.cc(22)] Error while initializing the Dart VM: Precompiled runtime requires a precompiled snapshot
A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 9712
环境版本信息
flutter version : 3.0.5 compileSdkVersion 33 minSdkVersion 21 targetSdkVersion 33 dependencies { classpath 'com.android.tools.build:gradle:4.1.3' // classpath 'com.android.tools.build:gradle:3.6.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.5' }
LogCat关键日志(开启debuggable true后)
01/22 00:12:00: Launching 'app' on Pixel 4 API 31. Install successfully finished in 4 s 839 ms. $ adb shell am start -n "com.ore/com.ore.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Connected to process 16685 on device 'Pixel_4_API_31 [emulator-5554]'. Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page. I/.outreachexper: Late-enabling -Xcheck:jni W/.outreachexper: Unexpected CPU variant for X86 using defaults: x86_64 D/CompatibilityChangeReporter: Compat change id reported: 171979766; UID 10163; state: ENABLED V/GraphicsEnvironment: ANGLE Developer option for 'com.ore' set to: 'default' V/GraphicsEnvironment: Neither updatable production driver nor prerelease driver is supported. D/NetworkSecurityConfig: No Network Security Config specified, using platform default D/NetworkSecurityConfig: No Network Security Config specified, using platform default D/libEGL: loaded /vendor/lib64/egl/libEGL_emulation.so D/libEGL: loaded /vendor/lib64/egl/libGLESv1_CM_emulation.so D/libEGL: loaded /vendor/lib64/egl/libGLESv2_emulation.so I/ResourceExtractor: Found extracted resources res_timestamp-1-1674385878848 I/ResourceExtractor: Resource version mismatch res_timestamp-1-1674387737896 I/ResourceExtractor: Extracted baseline resource assets/flutter_assets/kernel_blob.bin I/ResourceExtractor: Extracted baseline resource assets/flutter_assets/vm_snapshot_data I/ResourceExtractor: Extracted baseline resource assets/flutter_assets/isolate_snapshot_data W/.ore: type=1400 audit(0.0:310): avc: denied { map } for path="/data/data/com.ore/app_flutter/flutter_assets" dev="dm-5" ino=148729 scontext=u:r:untrusted_app:s0:c163,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c163,c256,c512,c768 tclass=dir permissive=0 app=com.ore A/flutter: [FATAL:flutter/runtime/dart_vm_initializer.cc(22)] Error while initializing the Dart VM: Precompiled runtime requires a precompiled snapshot --------- beginning of crash A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 16685 (.ore), pid 16685 (.ore) W/.ore: type=1400 audit(0.0:311): avc: denied { map } for path="/data/data/com.ore/app_flutter/flutter_assets" dev="dm-5" ino=148729 scontext=u:r:untrusted_app:s0:c163,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c163,c256,c512,c768 tclass=dir permissive=0 app=com.ore W/.ore: type=1400 audit(0.0:312): avc: denied { read } for name="max_map_count" dev="proc" ino=183138 scontext=u:r:untrusted_app:s0:c163,c256,c512,c768 tcontext=u:object_r:proc_max_map_count:s0 tclass=file permissive=0 app=com.ore
解决方案
1. 用Flutter命令构建Release包
不要直接在Android Studio中单独打开Android文件夹构建,回到Flutter项目根目录执行命令:
flutter build apk --release
或使用Flutter插件的Release构建选项,确保Flutter完整生成预编译快照文件。
2. 检查Android构建配置
- 打开
android/app/build.gradle,确认release构建类型没有干扰Flutter预编译的设置:buildTypes { release { signingConfig signingConfigs.release // 不要添加禁用混淆或修改资源处理的自定义逻辑 } } - 检查
gradle.properties,确保没有禁用预编译快照的配置:# 确保以下配置不存在或为false # flutter.disablePrecompiledSnapshot=true
3. 清理缓存后重新构建
执行以下命令清理项目缓存,再重新构建:
flutter clean flutter pub get flutter build apk --release
4. 处理SELinux权限问题
日志中出现avc: denied权限报错,模拟器上通常是环境问题,优先通过前几步解决;真实设备上需:
- 避免自定义文件操作修改
flutter_assets目录权限 - 测试关闭应用内的权限管理逻辑,确认是否是权限限制导致快照无法加载
5. 升级Flutter及Gradle版本
当前使用的Flutter 3.0.5和Gradle 4.1.3版本较旧,存在已知兼容性问题,建议升级:
- 升级Flutter到最新稳定版:
flutter upgrade - 同步升级Gradle插件,修改
android/build.gradle中的classpath:
同时修改classpath 'com.android.tools.build:gradle:7.4.2'android/gradle/wrapper/gradle-wrapper.properties中的gradle版本:distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
内容的提问来源于stack exchange,提问作者Dhiren Basra
相关产品推荐
相关产品推荐

