• Android平台 Target API level 升级到 31,在Android 12上启动黑屏卡死


    项目场景:

    项目上架平台要求android API需要升级到31及以上才行,API升级到33版本后经测试在android12/13机型上会卡在启动页面,打开调试日志也没报错。


    问题描述

    Android平台 Target API level 升级到 31,在Android 12上启动黑屏卡死


    原因分析:

    查了一下这个问题,是因为TelephonyManager的listen函数在Android12过期了,如果没有授权READ_PHONE_STATE权限,此函数会抛出一个SecurityException

    Unity在启用了自带的音频系统的情况下,恰巧在启动时机会去调用这个方法以实现“在用户接电话时游戏静音”的功能,抛出的异常影响了后续的流程导致卡死

    有人遇到了类似的问题,但是表现为崩溃:
    https://forum.unity.com/threads/android-12-telephony-crash.1287986/
    项目能升级引擎的话可以试试
    https://issuetracker.unity3d.com/issues/android-player-crashing-in-fmod-when-targetting-sdk-level-31
    里提到的修复的版本


    解决方案:

    1.升级引擎到2019以上版本,我升级到2019.4.9F1和2019.4.40版本经测试在android12、13机型上均可正常进入游戏,不会卡死。

    2.如果项目不能升级引擎,也有一个解决办法:

    • 反编译classes.jar
    • 修改UnityPlayer类的addPhoneCallListener实现,判断
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) return;
      据说Android12开始不需要自己处理静音了
    • 再编回classes.jar

    备注:方法2自己试了下修改classes.jar后不知道怎么重新将.java编译回calss文件,因为在eclipse里边.java文件一直报错,没办法进行编译。

    参考文章

  • 相关阅读:
    2022年11月5日(星期六)骑行回回营村
    LeetCode 第113 双周赛补题
    Linux下编译cpp_redis
    Xcode Cloud
    CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!)
    scrcpy用法大全
    【1++的数据结构】之map与set(二)
    LateX学习笔记
    ES 全字段模糊检索时分词方式对检索结果的影响
    flutter 常用命令
  • 原文地址:https://blog.csdn.net/leo347/article/details/126804229