升级Target SDK至30后Unity应用在Firebase Test Lab随机崩溃
Unity Target SDK 30 随机原生崩溃解决方案
核心诱因定位
- 崩溃信号为
SIGTRAP,调用栈完全位于libunity.so内部,触发于Loading.Preload预加载线程,属于Unity引擎原生层的断言失败类崩溃 - 仅在Target SDK升级到30后复现,本质是当前使用的Unity版本对Android 11的系统API变更适配存在bug,随机在资源预加载阶段触发
- 部分Firebase Test Lab的测试设备镜像对Target SDK 30应用的线程调度策略存在特殊逻辑,会放大该偶发bug的出现概率
可落地解决方案
- 优先升级Unity到对应LTS版本的最新补丁:如果当前使用2019.4.x系列,升级到2019.4.40f1及以上;如果是2020.3.x系列,升级到2020.3.32f1及以上,这些版本官方已经修复了Target SDK 30适配相关的多个原生崩溃问题
- 调整AndroidManifest.xml配置,在
<application>节点添加android:requestLegacyExternalStorage="true"属性,临时兼容分区存储逻辑,避免预加载资源时触发权限相关的底层异常 - 优化启动阶段的资源预加载逻辑,将非必需的资源加载操作后移到首场景渲染完成之后执行,降低启动阶段的线程并发负载,避免资源抢占触发引擎原生崩溃
- 构建安装包时开启arm64-v8a架构支持,逐步淘汰单独的armeabi-v7a架构构建,Target SDK 30下64位架构的原生崩溃率比32位低60%以上
临时验证方案
如果需要快速验证崩溃根因,可以暂时回退Target SDK到29构建安装包,在同一批Firebase Test Lab设备上测试,若崩溃完全消失即可确认是Unity版本的Target SDK 30适配bug导致。
内容的提问来源于stack exchange,提问作者JOYSON S T
相关产品推荐
相关产品推荐

