Flutter升级后三星S7/S8旧机型出现SecurityException user -1报错
问题根因
该错误是Flutter 3.10+版本引入的三星老系统兼容性bug,触发场景完全匹配描述:仅在搭载安卓9及更早版本的三星S7/S8等真机上复现,模拟器无异常,首次安装启动正常,二次冷启动直接崩溃。
崩溃触发点是Flutter引擎渲染完第一帧后,FlutterActivity.onFlutterUiDisplayed方法调用了系统reportFullyDrawn接口,而三星老版本系统对该接口的实现存在缺陷,会错误触发跨用户权限校验,抛出SecurityException异常。
可用解决方案
方案1:重写Activity方法直接规避(推荐,改造成本最低)
在主FlutterActivity类中重写onFlutterUiDisplayed方法,手动捕获异常即可,代码示例:
import android.os.Bundle; import io.flutter.embedding.android.FlutterActivity; public class MainActivity extends FlutterActivity { @Override public void onFlutterUiDisplayed() { try { super.onFlutterUiDisplayed(); } catch (SecurityException e) { // 忽略三星老系统的异常上报 } } }
如果使用Kotlin写法:
import android.os.Bundle import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity() { override fun onFlutterUiDisplayed() { try { super.onFlutterUiDisplayed() } catch (e: SecurityException) { // 忽略三星老系统的异常上报 } } }
方案2:清单文件添加对应权限
在AndroidManifest.xml的manifest标签下添加权限声明:
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /> <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
方案3:升级Flutter版本
该问题已经在Flutter 3.13.0及以上稳定版本完成修复,可直接升级Flutter版本解决。
此前做的manifest配置检查、flutter doctor检测、flutter clean清理缓存操作均无问题,该问题为Flutter引擎侧兼容性缺陷,和业务侧配置无关。
内容的提问来源于stack exchange,提问作者David Marquardt
相关产品推荐
相关产品推荐

