Unity IUnityLinkerProcessor
Unity IUnityLinkerProcessor是Unity引擎中的一个接口,它允许开发者在Unity项目构建时对代码进行链接处理。这个接口可以用来优化项目构建大小,减少不必要的代码和资源,提高项目的性能和加载速度。
接口定义
IUnityLinkerProcessor接口定义如下:- namespace UnityEditor.Build.IPA
- {
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker>public interface IUnityLinkerProcessor
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker>{
- <linker>
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><assembly fullname="AssemblyName">
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><type fullname="TypeName" preserve="method" />
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker></assembly>
- </linker>void OnBeforeRun(LinkXml linkXml);
- <linker>
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><assembly fullname="AssemblyName">
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><type fullname="TypeName" preserve="method" />
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker></assembly>
- </linker>void OnProcessAssembly(string inputFile, string[] searchDirs, string outputFile);
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker>}
- }
复制代码 其中,OnBeforeRun方法在Unity构建项目之前被调用,可以用来处理Link.xml文件。OnProcessAssembly方法在Unity构建项目时被调用,可以用来处理每个输入程序集。
Link.xml文件
Link.xml文件是Unity项目中的一个XML文件,用于指定需要保留的程序集、类型和成员。Link.xml文件的格式如下:- <linker>
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><assembly fullname="AssemblyName">
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><type fullname="TypeName" preserve="method" />
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker></assembly>
- </linker>
复制代码 其中,assembly元素指定需要保留的程序集,fullname属性指定程序集的完整名称。type元素指定需要保留的类型,fullname属性指定类型的完整名称,preserve属性指定需要保留的成员类型,可以是method、field、property、event等。
使用例子
下面给出三个使用例子,分别演示如何使用IUnityLinkerProcessor接口来优化Unity项目的构建大小。
例子1:保留指定程序集
在Link.xml文件中指定需要保留的程序集,其他程序集将被删除。- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker>
复制代码 在IUnityLinkerProcessor接口的OnBeforeRun方法中读取Link.xml文件,将需要保留的程序集添加到LinkerOptions中。- public void OnBeforeRun(LinkXml linkXml){<linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker>foreach (var assembly in linkXml.Assemblies)<linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker>{<linker>
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><assembly fullname="AssemblyName">
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><type fullname="TypeName" preserve="method" />
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker></assembly>
- </linker>if (assembly.Fullname == "Assembly-CSharp")<linker>
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><assembly fullname="AssemblyName">
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><type fullname="TypeName" preserve="method" />
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker></assembly>
- </linker>{<linker>
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><assembly fullname="AssemblyName">
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><type fullname="TypeName" preserve="method" />
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker></assembly>
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker>LinkerOptions.LinkAssemblies.Add(assembly.Fullname);<linker>
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><assembly fullname="AssemblyName">
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><type fullname="TypeName" preserve="method" />
- <linker>
- <assembly fullname="Assembly-CSharp" />
- </linker></assembly>
- </linker>}<linker>
- <assembly fullname="Assembly-CSharp" />
- </linker><linker>
- <assembly fullname="Assembly-CSharp" />
- </linker>}}
复制代码 例子2:保留指定类型和成员
在Link.xml文件中指定需要保留的类型和成员,其他类型和成员将被删除。
[code] |