初识IL2CPP

在Unity中进行打包时,有两种打包方式选择:MonoIL2CPP

Mono和IL2Cpp是Unity的脚本后处理方式,通过脚本后处理实现Unity的跨平台


1.Mono


(1). Mono组成组件:

C#编辑器,CLI虚拟机,以及核心类别程序库

(2).跨平台过程

Mono通过C#编辑器把脚本打包成中间语言(IL)IL所在的文件就是.dll后缀的文件,
然后和其他dll文件一起在Mono虚拟机(MonoVM)中运行
在不同的平台上MonoVM将IL翻译成不同的平台语言

(3).MonoVM运行IL的3中方式:

1.JIT(just in time): 即时编译

程序运行过程中将ILbyte code(字节码)转译为目标平台的原生码
即生成新的代码又运行新代码,其实就是将对应的机器码映射到内存空间中,此时就需要对内存空间的读写权限

而ios封了内存的可执行权限,所以ios不能使用JIT的方式

2.AOT(Ahead of time):提前编译

程序运行前将.exe/.dll文件中的IL的byte code(字节码)部分转译为目标平台的原生码并且储存起来 程序运行过程中仍有一部分代码通过JIT即时编译

3.Full-AOT(Full ahead of time):完全静态编译

程序运行前,将所有源码编译成目标平台的原生码

其中:android 使用JIT的方式 IOS只支持Full-AOT的方式

图解:

2.IL2Cpp

(1).IL2Cpp的组成部分:

AOT编译器(il2cpp.exe),运行时库

AOT编译器:把IL转换成CPP文件
运行时库:GC等

(2).跨平台过程:

IL2Cpp通过AOT编辑器,把IL语言转换成c++语言,然后通过运行机器平台的编译器 编译成对应平台能执行的原生汇编代码,再使用IL2Cpp VM 运行

图解:

 平台支持:Android平台支持Mono和IL2CPP的所有编译方式,而IOS只支持Mono的Full AOT模式和IL2CPP 。

如果有不对的地方希望能指出来 感激不尽。
另外,不熟悉的代码一定要写一下加深记忆 只用看的记不了太久。

猜你喜欢

转载自blog.csdn.net/SmillCool/article/details/128643478