乐趣区

关于android:安卓包在真机上安装时的风险提示问题

1)安卓包在真机上安装时的“危险提醒”问题
​2)iOS 下 AssetBundle 的加载疑难
3)特效用粒子系统,模拟器里呈现花屏问题
4)IL2CPP 编译的 Protobuf,反射类运行时报空


这是第 321 篇 UWA 技术常识分享的推送,精选了 UWA 社区的热门话题,涵盖了 UWA 问答、社区帖子等技术知识点,助力大家更全面地把握和学习。

UWA 社区主页:answer.uwa4d.com
UWA QQ 群:465082844

Android

Q:最近在安卓真机上安装游戏的过程中忽然呈现了危险提醒(以前没有)。有的手机甚至须要输出明码受权能力装置。

如图:

不晓得有没有大佬们最近也遇到了这样的问题,可否提供个批改的思路?

A:首先是 32 位问题,这个是必然要降级的不要挣扎了。至于危险提醒和明码受权,都是国内手机的问题。Rom 外面限度了你不上架它的商店就会有这种提醒。OPPO 限度了 adb 间接装置,每次要明码受权。

这些都属于研发层面无从下手的问题,能做的就是倡议玩家别用国产手机。

感激江南 @UWA 问答社区提供了答复

AssetBundle

Q:iOS 下 AssetBundle 加载时候 Animator 下面失落 AnimatorController。

问题:
1.0 版本里 A.prefab 是打在 AssetsBundle1 外面,A.prefab 援用的 AnimatorController 是打在 AssetsBundle2 外面,A.prefab 上援用的其余资源在 AssetsBundle3 外面。

2.0 版本热更新时,扭转了援用文件的文件夹,A.prefab 上援用的 AnimatorController 生成的 Bundle 变到了 AssetsBundle3 外面,A.prefab 上援用的其余资源生成的 Bundle 变到 AssetsBundle2 外面。

A.prefab 所在的 AssetsBundle1 没有变动,所以热更新上来的是 AssetsBundle2 和 AssetsBundle3。

热更新之后加载 AssetsBundle2 和 AssetsBundle3,再加载 AssetsBundle1,运行后发现 A.prefab 上的 Animator 组件还在,然而下面的 runtimeAnimatorController 失落了,变成了 Missing。

有人遇到这个问题吗?

A1:有一些排查思路,首先在 Android 平台看下是否也有问题,排除下是否是与平台相干。另外在出问题的机器上预制体模式,如果失常则应用 AssetBundle 模式来加载看下是否失常,如果是 Bundle 问题,那能够齐全删除波及到的 Bundle 从新打一遍再试一下。

感激 Knight-132872@UWA 问答社区提供了答复

A2:Unity 上遇到这种问题,最好把 A、B、C 3 个 AssetsBundle 包先删除,再打包,让 Unity 全新生成,应该就好了。

感激 1 9 7 3-311135@UWA 问答社区提供了答复

Simulator

Q:游戏特效用了粒子系统,其余平台都失常,就在模拟器下呈现了花屏问题,时不时地花屏闪动。

特效用了粒子系统的 Mesh 和 Billboard 两种模式,而后粒子上挂材质球,是用本人写的 Shader,然而切换成 Unity 自带的 URP 粒子系统 Shader,也一样花屏。不必粒子系统就不会花屏。

用 RenderDoc 抓帧,只剖析出局部花屏,是用 Mesh 模式的粒子网格,顶点产生拉扯偏移产生的。然而其余花屏,查不出是哪个对象产生的问题,谁晓得是怎么回事吗?

A1:能够尝试换一下 Shader 的采样精度。

感激 NG 週 @UWA 问答社区提供了答复

A2:能够尝试一下把粒子特效对应 Shader 变量类型从 fixed 改为 half 或者 float。

感激 beikeshell@UWA 问答社区提供了答复

针对以上问题,有教训的敌人欢送转至社区交换分享

Build

Q:IL2CPP 编译的 Protobuf,反射类运行时报空。
问题产生时,会闪崩,闪崩日志信息:
Error_Not_Null:”c# exception:System.TypeInitializationException: The type initializer for‘abcConfigReflection’threw an exception. —> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. —> System.ExecutionEngineException: Attempting to call method ‘Google.Protobuf.Reflection.ReflectionUtil+ReflectionHelper`2[[System.IntPtr&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]::.ctor’for which no ahead of time (AOT) code was generated.\n

(残缺日志信息,请见原问答。)

看下来是因为 AOT 编译时,代码剔除所致,问题十分偶现。咱们的 QA 基本上没有跑进去过这个问题,然而放到外网就有一堆玩家遇到此问题。蹊跷的是哪怕同一个手机也是偶尔才报。

Proto GitHub 我的项目有人提过这个问题,包含上面回复次要提了两点:
1. Linker 蕴含 Google.Protobuf 程序集
2. AOT 编译器不会为 T 为 Any Enum 的泛型办法,针对枚举参数泛型办法创立显式调用类
https://docs.unity3d.com/cn/c…

和我这个问题不同点是,abcConfigReflection 是一个类,不是枚举,而且整个我的项目这个类会有很多。

我用的 Proto 3.6.1 版本,而且 Proto 也在 3.6.0 版本批改了
> AOT generics issues in Unity/il2cpp have a workaround (see commit 1b219a1 for details)

Protobuf 源码的确加了强制反射的代码:

    static FileDescriptor()
    {ForceReflectionInitialization<Syntax>();
        ForceReflectionInitialization<NullValue>();
        ForceReflectionInitialization<Field.Types.Cardinality>();
        ForceReflectionInitialization<Field.Types.Kind>();
        ForceReflectionInitialization<Value.KindOneofCase>();}

当然我有加 Google.Protobuf 程序集到 Linker,还是不能解决。起初我加了 Assembly-CSharp 程序集到 Linker,也就是整个自定义代码全副不剔除,目前因为不不便放外网,也不分明有没有解决这个问题。

应用 Protobuf 序列化数据按讲是惯例操作,置信应该有很多人遇到,不晓得大家解决计划是什么,有没有解决这个问题?

针对以上问题,有教训的敌人欢送转至社区交换分享

封面图来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:465082844

退出移动版