问题描述
最近将游戏适配到车机上(Android系统),碰到了一个严重bug,启动的时候有概率会遇到黑屏,表现就是全黑,无法进入Unity的场景。
经过查看LogCat日志,也没有任何报错,也没有任何的Unity日志输出。
经过比较正常的时候和非正常的时候的日志,发现正常的时候会有这条日志。
ActivityTaskManager: Displayed com.xxx.xxx/com.unity3d.player.MainActivity: +285ms
其中MainActivity是继承于UnityPlayerActivity的我们自己写的类。
而黑屏的时候没有这条日志,也就是并没有启动成功UnityPlayerActivity,在 UnityPlayerActivity生命周期中写了日志,发现有执行到,但是表现就是黑屏。
排查问题
经过了以下几种方式排查:
- 删除接入的第三方SDK:黑屏
- 删除Plugin/Android下的所有代码:黑屏
- 直接Unity出包:黑屏
- 删除所有场景,新建了一个新场景:黑屏
- 升级Unity版本:黑屏
- 修改targetsdk为30、31、32、33、34:黑屏
- jdk改为8和11:黑屏
- 新建一个Unity工程:正常不会黑屏
- 将新建的工程的ProjectSetting文件覆盖到黑屏的工程:正常不会黑屏
经过对问题的排查,最终定位到了应该是ProjectSetting的某个设置导致的,但是设置那么多,于是继续排查,将空工程的配置一项一项修改为黑屏的设置,最终排查到了这个选项导致的。
解决方案
将Resizable Window勾选上,会有概率黑屏,Unity场景都进不了,Unity的相关日志也没有任何输出。取消勾选"Resizable Window"这样直出apk是没有再碰到黑屏问题了。
但是接入了第三方SDK后,会出现了别的问题,也就是应用尺寸不对了。
经过尝试,修改了AndroidManifest.xml的下面选项,则目前结果正常了。
将主Activity加上android:resizeableActivity="true",这样既可解决。
上面的应该是对于会改变应用尺寸的系统,可能需要这么操作才会避免黑屏问题,猜测是因为系统的代码有bug导致需要这么处理规避问题,如果你也碰到这个问题,可以进行如上尝试。
总结
如果你在车机上碰到Unity应用有概率黑屏,可以尝试如下设置:
- 在PlayerSetting里将Android下的Resizable Window取消勾选,注意是不要勾选
- 在AndroidManifest.xml里将主Activity的android:resizeableActivity设置为true
这样可能能解决你们的问题。