安卓包在真机上安装时的“风险提示”问题

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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


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

Android

Q最近在安卓真机上安装游戏的过程中突然出现了风险提示以前没有。有的手机甚至需要输入密码授权才能安装。

如图

不知道有没有大佬们最近也遇到了这样的问题可否提供个修改的思路

A首先是32位问题这个是必然要升级的不要挣扎了。至于风险提示和密码授权都是国内手机的问题。Rom里面限制了你不上架它的商店就会有这种提示。OPPO限制了adb直接安装每次要密码授权。

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

感谢江南@UWA问答社区提供了回答


AssetBundle

QiOS下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问答社区提供了回答

A2Unity上遇到这种问题最好把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

QIL2CPP编译的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/current/Manual/ScriptingRestrictions.html

和我这个问题不同点是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
官方问答社区answer.uwa4d.com

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: android