使用ILRuntime,你可能需要了解这些

是否要选用IL2CPP

总结:最好选用IL2CPP
ios
目前unity只有il2cpp模式的编译才支持64位系统,mono是不支持的。
苹果在2016年1月就要求所有新上架游戏必须支持64位架构,所以必须要选il2cpp。
android
从2019年8月1日起,在Google Play上发布app必须支持64位体系。从021年8月1日起,Google Play将停掉尚未支持64位体系的APP。
国内上架应该 32 64 都可以

IL2CPP是什么?

请阅读这篇文章
https://www.cnblogs.com/decode1234/p/10270911.html
总结一下,对于Unity来说,脚本是这样运行的:
Mono
Mono虚拟机保证跨平台,C#这样遵循CLI(Common Language Infrastructure)规范的高级语言,被先被各自的编译器编译成中间语言:IL(中间语言) ,等到需要真正执行的时候,这些IL会被加载到运行时库,由Mono虚拟机动态的编译成汇编代码(JIT)然后在执行。
IL2CPP
现在出现了IL2CPP,顾名思义,就是把IL中间语言转换成CPP文件,这么做的原因有很多,比如说Mono的各个移植很费劲,Mono的版权等等,现在可以在得到中间语言IL后,使用IL2CPP将他们重新变回C++代码,然后再由各个平台的C++编译器直接编译成能执行的原生汇编代码。

为何Ios热更困难

因为 iOS平台禁止JIT编译

AOT(Ahead Of Time)、JIT(Just In Time)、Full AOT

JIT即时编译:
从名字就能看的出来,即时编译,或者称之为动态编译,是在程序执行时才编译代码,解释一条语句执行一条语句
AOT静态编译:
其实Mono的AOT静态编译和JIT并非对立的。AOT同样使用了JIT来进行编译,只不过是被AOT编译的代码在程序运行之前就已经编译好了。当然还有一部分代码会通过JIT来进行动态编译。
Full AOT
默认情况下AOT并不编译所有IL代码,而是在优化和JIT之间取得一个平衡。由于iOS平台禁止JIT编译,于是Mono在iOS上需要Full AOT编译和运行。即预先对程序集中的所有IL代码进行AOT编译生成一个本地代码映像,然后在运行时直接加载这个映像而不再使用JIT引擎
IL2CPP
由于C++是一门静态语言,这就意味着我们不能使用动态语言的那些酷炫特性。运行时生 成代码并执行肯定是不可能了,使用了IL2CPP,就完全是AOT方式

ILRuntime原理

官网
https://ourpalm.github.io/ILRuntime/public/v1/guide/principle.html
更直观的解释:
在这里插入图片描述