Unity 的 Strip Engine Code
问题描述项目中新增了 AudioMixer 相关的一些东西,打包之后,包体直接在调用到 AudioMixer 相关的地方闪退。
其它信息:
[*]AudioMixer 相关的 assest 会被拆出来作为 Assest Bundle,AudioMixer 相关的代码则正常包含在包体内。
[*]设置中使用了 il2cpp,开启了代码裁剪。
问题分析
刚开始没想到是代码裁剪的问题,而是怀疑自己是不是遇到了资源加载/初始化顺序/Unity 的 Bug 等原因,反复尝试后毫无效果。
后来仔细检查报错日志,经排查后发现一句:
UnityLogError Could not produce class with ID 245.
经查阅官方文档得知,AudioMixerSnapshotController类被裁减掉了。
解决问题
于是新建 link.xml,以防万一,决定保留该类命名空间下的所有类:
<linker>
<assembly fullname=&#34;UnityEngine.AudioModule&#34;>
<namespace fullname=&#34;UnityEngine.Audio&#34; preserve=&#34;all&#34;/>
<!-- <type fullname=&#34;UnityEngine.Audio.AudioMixerSnapshotController&#34; preserve=&#34;all&#34;/> -->
</assembly>
</linker>
具体这个程序集的名字叫什么,命名空间如何,可以直接 VS F12 定位到相关 API 的反编译代码部分查看。重新打包,问题解决。
参考链接
[*]https://www.jianshu.com/p/e7120f025281
[*]https://docs.unity3d.com/2020.3/Documentation/Manual/ManagedCodeStripping.html
[*]https://docs.unity3d.com/Manual/ClassIDReference.html
本文使用 Zhihu On VSCode 创作并发布
页:
[1]