简单说明
如果没有热更新,软件发布之后如果需要进行更新,往往需要重新下载整个应用,当应用出现需要更新时,需要让用户转到商店进行重新下载对整个用户体验是会带来灾难性后果的,所以,在应用上线之后,对其进行实时的修复和更新,避免了用户需要重新下载或重新安装应用的麻烦,同时也能够加快应用的迭代速度。
需要注意的是,由于软件的热更新机制往往会绕过应用商店的审核,出于用户安全的考虑,平台往往会加以限制。所以还需要根据平台规则提供相应的方案 旧闻:苹果再次重申全面禁止热更新,不移除相关代码就下架
热更新分为 资源热更新 和 代码热更新 两种,代码热更新实际上也是把代码当成资源的一种热更新,但通常所说的热更新一般是指代码热更新。
- 资源热更新 主要通过AssetBundle来实现,在Unity编辑器内为游戏中所用到的资源指定AB包的名称和后缀,然后进行打包并上传服务器,待游戏运行时动态加载服务器上的AB资源包。
- 代码热更新 主要包括Lua热更新、ILRuntime热更新和C#直接反射热更新等。由于ILRuntime热更新还不成熟可能存在一些坑,而C#直接反射热更新又不支持IOS平台,因此目前大多采用更成熟的、没有平台限制的Lua热更新方案。
以下主要介绍代码热更新
热更新原理
热更新希望做到的是,当软件进行更新时,我们只需要将新的资源与旧的资源进行替换而不需要重新下载整个安装包即可完成一次更新。
了解完远比想象的复杂啊!!!!,本来想一文搞定,看来只能简单介绍了。
Lua热更原理
Lua是解释型语言,意味着Lua代码进行调整时并不需要经过重新编译即可使用,所以可以将逻辑代码转化为Lua脚本,以更新资源的形式对资源进行替换即可。
相对应的框架有:
- XLua
- SLua
- ToLua
通过IL2CPP进行热更新
IL2CPP(Intermediate Language to C++)是Unity引擎中一种用于将C#代码编译为C++代码的转换器。它将C#的中间语言(IL)转换为高效的、可执行的C++代码,以提高游戏在不同平台上的性能和安全性。
相对应的框架有:
- HybridCLR
- ILRuntime