Expo开发的React Native安卓应用在Nokia1切换地图类型时触发Native崩溃
排查与修复方案
你遇到的Cannot get a dirty matrix!是谷歌地图Android SDK在低内存设备上的已知原生崩溃,触发场景就是地图图层类型切换时渲染线程无法获取正确的变换矩阵,刚好匹配Nokia 1 1G内存、Android 8.1的低端设备配置,可按以下步骤处理:
- 升级地图依赖库
如果使用的是react-native-maps,先升级到适配你当前Expo SDK版本的最新稳定版,谷歌地图SDK在2022年及之后的版本已经修复了这个偶现崩溃问题,Expo项目直接执行expo install react-native-maps即可拉取匹配版本。 - 添加场景兜底逻辑
在切换地图类型的业务代码外层加try-catch捕获异常,避免崩溃直接退出应用。同时增加设备判断逻辑:针对Android SDK版本<=27、系统可用内存小于2G的设备,默认隐藏hybrid地图切换入口,或者点击切换时先检测系统可用内存,剩余内存低于200MB时直接提示用户当前设备暂不支持该地图模式,不执行切换操作。 - 调整Android构建配置
在项目的app.json中增加Android大内存和硬件加速配置,降低低端设备上的渲染崩溃概率:
{ "expo": { "android": { "largeHeap": true, "hardwareAccelerated": true } } }
- 针对性复现调试
不需要额外购买Nokia 1实体机,直接用Google Play Console内置的测试实验室功能,可以直接启动官方提供的Nokia 1远程真机进行调试,拿到完整的调用栈定位问题,比自行创建的自定义模拟器复现概率高很多。 - 临时上线规避方案
如果当前版本上线时间紧张,可以先在Google Play Console的设备目录中,临时排除所有1G内存、Android 8.1的入门级设备,待后续问题修复后再放开支持,不影响其他绝大多数设备的正常发布。
内容的提问来源于stack exchange,提问作者laneboyandrew
相关产品推荐
相关产品推荐

