

Target API level升级到31后Android 12启动黑屏卡死
source link: https://blog.uwa4d.com/archives/TechSharing_309.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1)Target API level升级到31后Android 12启动黑屏卡死
2)Unity Renderer中SortingLayer、SortingOrder底层如何实现渲染排序
3)如何用Addressable实现按需下载
4)多个Package需要不同版本的DLL的解决方案
这是第309篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)
Android
Q:当前海外版本有硬性要求:Target API level必须升级到31,升级之后在Android 12机型上启动游戏,Unity闪屏之后卡死,其他Android版本正常。
我们使用的Unity版本:2017.4.27f
其他一些简单测试:去掉闪屏, 导出新的空工程,都会出现启动卡死。
其他一些Unity论坛上的方式尝试均失败:
https://forum.unity.com/threads/unity-2017-and-android-12.1271753/
https://forum.unity.com/threads/android-targeting-api-level-31-makes-the-game-freeze-on-android-12.1237576/
之前我们也遇到升级之后无法安装的问题,然后参照其他解决了安装,只是黑屏无法解决。当前最新尝试Unity 2019版本是正常,初步判断是与以下问题同时修复的:
https://issuetracker.unity3d.com/issues/install-parse-failed-manifest-malformed-errors-are-thrown-when-trying-to-run-an-android-application-with-target-api-level-31
不知道是否有其他大神遇到此问题并解决了?如果有升级之后正常,请告知一下Unity版本号,谢谢。
A:查了一下这个问题,是因为TelephonyManager的listen函数在Android 12过期了,如果没有授权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如果项目不能升级引擎,也有一个解决办法:
- 反编译classes.jar
- 修改UnityPlayer类的addPhoneCallListener实现,判断if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) return;据说Android 12开始不需要自己处理静音了
- 再编回classes.jar
感谢littlesome@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/63049f1a6d82e96d844891ec
Rendering
Q:Unity Renderer中SortingLayer、SortingOrder底层是如何实现渲染排序的?
A1:第一级是材质RenderQueue的区间:不透明(<2499)优先,然后半透明(>=2500)。
第二级是SortingLayer。
第三级是SortingOrder。
第四级是材质RenderQueue本身。
感谢欧月松@UWA问答社区提供了回答
A2:Unity完整渲染顺序如下:
- CameraDepth从小到大
开始渲染不透明物体(RenderQueue < 2500)- SortingLayer从小到大
- SortingOrder从小到大
- RenderQueue从小到大
- 物体深度近到深度远
开始渲染半透明物体(RenderQueue >= 2500)- SortingLayer从小到大
- SortingOrder从小到大
- RenderQueue从小到大
- 物体深度远到深度近
感谢萧小俊@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/631950e68d3e026b0d2bc20e
Addressable
Q:如何用Addressable实现按需下载,大体是想要实现下面两个功能:
1. 一部分资源是在游戏启动的时候去更新的。
2. 还有一部分资源是在玩家玩到某个关卡的时候,让玩家手动触发下载。当然,这些关卡,没有下载完成之前,玩家是不能玩的。
A:可参考Unity官方实例Git,其中Advanced/Play Asset Delivery这个案例很好地展示了AssetBundle和Google新格式aab的结合以及打包Asset Packs后,哪些资源预下载,哪些资源实时下载。
https://github.com/Unity-Technologies/Addressables-Sample
感谢郑骁@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/63155ee152100855895179a8
Scripting
Q:具体情况就是Google ProtoBuf库的高版本会强制依赖 System.Runtime.CompilerServices.Unsafe.dll 4.0.4.1版本。
然后Unity内置的Package com.unity.collections会自己带进来一个DLL,并且版本不匹配。
现在有没有办法,导入一个DLL,并且只让某一个Package内的代码进行引用。或者有没有其他替代方案,比如禁止com.unity.collections带入自己的Unsafe.dll之类的流程?
其他就是考虑一个流程重新编译ProtoBuf的动态库,使其内含一个自己用的依赖库。但是这个依赖库也不好找源码。
主要问题是:com.unity.collections是Unity原生并自动植入的,不进入Packages路径,直接植入到Library。所以没有办法手动调整路径。现在暂时是用脚本在启动编辑器时替换Library里面的动态库。但是这个流程不干净,希望有个干净的做工。
A:先把项目中重复度高的DLL都放在一个Common Package中,然后把com.unity.collections拉到本地变成Local Package,再去依赖Common Package,最后就让Google ProtoBuf也去依赖这个Common Package。
对于Unity原生并自动植入的Package,一般从Library拉到本地就行,注意一下最后的package-lock.json文件中com.unity.collections的Version为file:XXXXX,并且Source显示为Embedded就代表成功了。
感谢萧小俊@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/631873958d3e026b0d2b0c02
封面图来源于网络
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)
Recommend
-
96
前言 相信做过Android的朋友都知道,当一个APP启动时,界面会首先展示一个白屏或者黑屏,然后再进入欢迎页,稍作停留最后进入APP主页。那么这个黑屏或者白屏到底是怎么一回事呢?它的最好的解决方案应该是怎样的呢?今天我们认真的讨论一下这个小问题。 历史原因...
-
77
1.修改AndroidManifest.xml 设置App的全局Theme或者Activity的界面Theme <application android:allowBackup="true" android:icon="@drawable/ipod_icon" android:label="@string/app_name" android:launchM...
-
12
三星手机,再次翻车。2020年5月23日,据三星手机用户反应,其三星设备遭遇黑屏和大面积重启问题。从反应情况来看,此次受影响手机主要包括S8、S9、S10、S20等机型。只能说,眼前的手机,它不是手机,是一块没有感情的“砖”。
-
8
setterm 防止黑屏 2018-12-12 01:17:00 https://unix.stackexchange.com/questions/8056/disable-screen-bl...
-
8
苹果发新版macOS Big Sur:修复M1设备黑屏等诸多Bug 2021年01月26日08:25 快科技 我有话说(23人参与) 收藏本文 ...
-
0
车主曝特斯拉高速惊魂一幕:仪表盘黑屏 续航蹭蹭掉 2021年05月09日 10:44 4702 次阅读 稿源:快科技 9 条评论 如今,...
-
7
黑屏解决方法、微软正版验证解决方法 作者: JavasBoy 分类: 电脑 发布时间: 20...
-
5
macOS Mojave 升级后开机卡在进度条和唤醒时黑屏的解决方法第一次升级 macOS 在抱着对 Apple 高质量软硬件的幻想中破灭,从 macOS High Sierra 手贱升级到 macOS Mojave (version 10.14),各种字体发虚,Kernel Panic(六国语言重启),系统卡顿,耗电快等问题接...
-
6
Appflow and Capacitor are built for mobile developers, and we know the challenges o...
-
12
New Android App Bundle and target API level requirem...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK