什么是IL2CPP?
从技术层面上来说,我们说的IL2CPP包含了两部分:
- 一个进行 预先编译的编译器(译注:ahead-of-time,又叫AOT,以下一律使用AOT缩写)
- 另外一个部分就是对虚拟机提供支持的运行时库。
AOT编译器将由.NET 输出的中间语言(IL)代码生成为C++代码。
运行时库则提供诸如垃圾回收,与平台无关的线程,IO以及内部调用(C++原生代码直接访问托管代码结构)这样的服务和抽象层。
IL2CPP如何工作?
开始构建时使用,Unity自动执行以下步骤:
- C#代码编译为常规.NET DLL(托管程序集)。
- 不属于脚本的所有托管程序集(如插件和基类库)由名为Unused Bytecode Stripper的Unity工具处理,该工具查找所有未使用的类和方法,并从这些DLL中删除它们(动态链接库)。此步骤显着减少了构建游戏的大小。
- 然后将所有托管程序集转换为标准C++代码。
- 生成的C++代码和IL2CPP的运行时库,使用编译器进行编译。
- 最后,代码链接到可执行文件。