在Unity中进行打包时,有两种打包方式选择:Mono和IL2CPP
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): 即时编译
程序运行过程中将IL的byte 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 运行
图解:
文章来源:https://www.toymoban.com/news/detail-619715.html
平台支持:Android平台支持Mono和IL2CPP的所有编译方式,而IOS只支持Mono的Full AOT模式和IL2CPP 。文章来源地址https://www.toymoban.com/news/detail-619715.html
如果有不对的地方希望能指出来 感激不尽。
另外,不熟悉的代码一定要写一下加深记忆 只用看的记不了太久。
到了这里,关于初识IL2CPP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!