Unity-托管代码剥离
Unity托管代码剥离的意义
托管代码剥离,不仅可以减少生成的dll的大小,继而减少安装包的体积,对于一些小型单机 游戏尤其重要,同时也可以提高构建代码的速度,提高项目的开发速度。
Unity托管代码的设置
点击 Player Settings->Player->Managed Stripping Level 进入如下菜单:
- Low: 根据一种保守的原则来剥离代码,因此实际剥离的代码非常少,对于包的大小作用很小。这是unity的il2cpp的默认剥离级别.
- Medium:在Low和High中取得平衡,即没有Low那么谨慎,也不会像High那么极端
- High: 优先考虑的是包的大小,而不是可用性。对于可用性,是通过辅助的link.xml来进行人为保留需要的库里面的命名空间或者制定的类.
link.xml简单使用
- 在Assets目录下或者其子目录下定义一个link.xml文件
- 编写link.xml,如下格式
<linker>
<!--整个程序集-->
<assembly fullname="Unity.Mono" preserve="all"/>
<assembly fullname="Unity.ThirdParty" preserve="all"/>
<assembly fullname="UnityEngine" preserve="all"/>
<!--指定程序集中的指定命名空间-->
<assembly fullname="JsonDotNet">
<namespace fullname="Newtonsoft.Json" preserve="all"/>
</assembly>
<!--指定程序集某个类-->
<assembly fullname="mscorlib">
<type fullname="System.Diagnostics" preserve="all"/>
</assembly>
</linker>
- 在构建时,Unity会使用一个专门用于托管代码剥离的工具UnityLinker来进行剥离处理,其默认将unity中用到的所有程序集合并程一个整体程序集,然后根据一定规则,比如场景中游戏对象继承Monobehavior的对象,标记根元素,再次有根元素进行依赖查询,并将其他依赖的程序集或类或命名空间进行打标记。最后没有被标记的,将会被裁剪剥离。UnityLinker在构建时,回检查link.xml文件,将里面设置的忽略的程序集或者类型直接标记为根元素。因此可以保证不会被剥离。