Flutter Release版App在部分安卓设备崩溃并显示灰屏求助
解决Flutter安卓Release版重复初始化导致的灰屏崩溃
问题根源
日志里的FlutterJNI.loadLibrary/init等重复调用警告,直接指向Flutter引擎被多次初始化,这就是灰屏崩溃的核心原因。
排查与修复步骤
- 检查Android原生初始化逻辑
别在Application、多个Activity里重复创建FlutterEngine实例,也不要手动多次调用FlutterMain.startInitialization——FlutterActivity会自动处理初始化,多此一举就会触发重复加载。如果用了多个Flutter页面,改用引擎复用:在Application里初始化单例FlutterEngine存入缓存,所有Flutter页面都复用这个实例。 - 排查第三方插件
有些原生交互插件可能内部偷偷初始化引擎,把最近新增的插件先移除测试,定位到问题插件后换替代方案或者向开发者反馈。 - 检查Flutter端代码
确保runApp只调用一次,别在initState、异步回调里重复执行,不然会触发引擎重启。 - 核对混淆规则
Release版混淆如果写错了,可能篡改FlutterJNI相关方法导致重复初始化。把官方推荐的规则加到proguard-rules.pro:-keep class io.flutter.app.** { *; } -keep class io.flutter.plugin.** { *; } -keep class io.flutter.util.** { *; } -keep class io.flutter.view.** { *; } -keep class io.flutter.** { *; } -keep class io.flutter.plugins.** { *; } - 适配老旧设备
Android 7及以下设备对多引擎支持差,用单例引擎模式:// Application类里初始化单例引擎 class MyApp : Application() { lateinit var flutterEngine: FlutterEngine override fun onCreate() { super.onCreate() flutterEngine = FlutterEngine(this) flutterEngine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ) FlutterEngineCache.getInstance().put("shared_engine", flutterEngine) } } // FlutterActivity里复用引擎 class MainFlutterActivity : FlutterActivity() { override fun provideFlutterEngine(context: Context): FlutterEngine? { return (application as MyApp).flutterEngine } }
验证方式
每次改完打包Release版测试,看日志里的重复调用警告是否消失,同时检查设备是否还会灰屏卡死。
内容的提问来源于stack exchange,提问作者mvasco
相关产品推荐
相关产品推荐

