为了照顾萌新童鞋,最开始还是对热更新的概念做一个通俗易懂的介绍。
热更新用通俗的讲就是软件不通过应用商店的软件版本更新审核,直接通过应用自行下载的软件数据更新的行为。在用户下载安装App之后,打开App时遇到的即时更新,是一种各大手游等众多App常用的更新方式。
大家熟知的王者荣耀,经常就会采用热更新的方式让用户直接在App内下载数据包得到更新,避免了用户耗费时间和流量下载应用。
热更新的技术价值
站在 App 开发者角度的“热”是指在不发版的情况来实现更新,修复 BUG 和发布功能,让开发者得以绕开应用商店的审核机制,避免长时间的审核等待以及多次被拒造成的成本。
在热更新出现之前,通过反射注解、反射调用和反射注入等方式已经可以实现类的动态加载了。热更新的实质就是替换,需要替换运行时新的类和资源文件的加载,就可以认为是热操作了。
热更新的技术选型
其实各家互联网巨头都有自己的热更新技术,目前比较有代表性的技术可以分为两类:类加载、底层替换。
1、类加载
只需要把 Bug 修复涉及到的类文件插入到数组的最前面去,就可以达到热修复的效果。
类加载方案的时效性差 ,需要重新冷启动才能见效,但修复范国广,限制少。代表的有Qzone 超级补丁、微信 Tinker
2、底层替换
底层替换是一种native方案,其操作是在Native修改Filed指针的方式,实现方法的替换,达到即时生效无需重启,对应用无性能消耗的目的。</