Android热修复技术实现

来源:互联网 发布:东北师范大学网络教育招生简章 编辑:程序博客网 时间:2024/05/16 10:08

    一般情况下如果我们发布上线的应用,在大量用户使用时,突然发现一些漏洞与问题,一般我们都会将此问题进行修复然后打包新版本然后在应用内引导用户(弹出一个版本更新窗口)进行新版本的下载与安装,并且在出现重大问题(比如崩溃)的时候还需要强制弹框使用户更新,这种传统的方式我们称之为冷修复

这里写图片描述

    传统的版本更新的方式已经可以将问题进行解决,但是如果用户量很大并且问题相对较小那么冷修复的方式就有点大材小用,那么此时使用热修复将会是很好的选择,也就是说我们不必通过下载新的版本直接在应用程序的后台下载补丁文件然后将之前的问题代码在用户使用的同时进行修复,这样在用户不知情的情况下对问题进行了修改处理,这种方式我们称之为热修复

热修复的优势:
    1.不需要重新下载新版本,可以在应用运行的同时进行修复
    2.只需要下载补丁文件,流量损耗少,相对占用用户时间少
    3.可以在用户不知情的情况下后台修复,相对体验好

注意:实现热修复的前提首先程序入口不能出现问题

1.如何实现热修复

    目前市面上关于热修复的实现框架比较好的有三种方式:

    1. 阿里巴巴的AndFix技术

    主要是通过修改成员的指针指向来实现,比如你的应用中的一个方法需要进行实时修复,那么我们将补丁文件架子啊到内存之后,当用户需要使用到问题方法的时候我们只需要将方法的指针指向我们修复的补丁中的方法即可。

    2. 腾讯的超级补丁技术

    通过类加载的原理:DexClassLoader通过pathList去找到dex对应的目录pathList—>dexElements {class.dex,class2.dex}在数组中存在先后,当我们需要加载一个类的时候,会在这个数组中按顺序一个一个的找类找到了就加载 否则找下一个,可以将我们修复的放在最前面后面的坏的就不会加载了。

    3.微信Tinker技术

    直接下载的是一个dex差量补丁包,与之前的dex包进行比对然后直接与之前的dex包进行合并,替换掉之前有问题的。

1.AndroidStudio使用AndFix实现方式

    持续更新中