为什么需要热更新?


什么是热更

所谓热更就是在不卸载原程序的情况下动态更新

资源热更

在unity中这个就是常说的AB包,现在新出AdreassAB可寻址AB包,是此类问题的解决方案

代码热更

代码的情况就稍显复杂了,还是拿unity来说,打包时将C#编译成IL代码,在程序启动时拿到本机的IL通过VM去解释执行,运行程序

所以代码热更如果还是如资源热更一样加载新的C#文件,显然是不可行的,因为没有能编译C#的运行时环境

这里说一下Lua,为什么它就能动态编译呢?首先lua是解释型语言,C#是编译型语言,再者lua有他自己的runtime compiler,可以直接解释运行

而C#是需要先进行编译成中间语言IL而后才可以在VM中解释执行,当然如果C#也有他自己的runtime compiler,同样也可以直接解释运行

那就是说如果C#也有他自己的runtime compiler,就会热更吗,非也,这就要提起C#的一个很重要的特性-反射,反射是可以获取一个未知的IL文件任何

程序信息(类型,方法,参数等),所以这也是C#在一些热更方案中可行的基础(ILRuntime),同时也要有平台的支持,C#在安卓上可以实现热更新

但在苹果上却不能,苹果对反射机制有限制,不能实现这样的热更。

相关