Android 热修复方案小结

之前一个blog简单介绍了Android热修复的nuwa使用demo。这篇blog主要来汇总下Android热修复的几种方案和利弊比较。

Android热修复技术方案主要是两种:1.QQ空间超级补丁和微信Tinker方式。2.阿里巴巴的And Fix、Hot Fix方案。

现在分别介绍下这两种方案的利弊,及使用场景。

1. QQ空间超级补丁和微信Tinker方式。

    这两种方案设计的出发点是替换原有的资源、成员变量、方法和类。这两种方式实现的又略有不同。

   1)QQ空间超级补丁

        实现原理是基于Google提供的mutlidex方式。即apk可以加载多个dex文件。针对apk中需要修复的dex,做一个修复的patch.dex文件。当apk重新加载的时候,优先加载patch.dex。之后再加载其他dex文件。这样apk运行的时候,使用的就是新的class文件。

        限制:a)  需要apk重新启动才能生效   

                   b)   需要考虑到Android 对类的verify操作。

                      “Android对类的verify操作”,即apk安装到机器上,在运行时,虚拟机会将dex文件优化成odex文件,

                       在这个过程中,会对类检查,如果一个类的引用都在同一个dex文件中,则会打上CLASS_ISPREVERIFIED的标志。

                        所以,这里我们需要对需要热修复的类都要避免打上这个标志。nuwa(采用该原理),实现方式是让app中所有java都导入一个辅助apk中的类。这样app中所有java文件,导入的类,都不在一个dex文件中,所以,就不会打上CLASS_ISPREVERIFIED标志。

                  c)  patch.dex的加载,会影响app的启动速度。

                  d)  Android ART模式下,如果改动了类的结构,就可能会出现内存错乱的问题。所以,需要将相关类和父类、子类都放到patch.dex。

 2)微信Tinker方式。

     微信的实现原理,则是将patch.dex,与自由的dex文件合并。第二次启动app的时候,会执行新的dex文件,从而解决此问题。

     限制:a) 需要app二次启动才能生效

b) dex文件合并可能会出现失败

                c) dex文件合并会占用机器的存储

    总结:1)可以进行成员变量、方法、类的替换。支持力度较大。

               2)app需要重新启动才能生效

                   

2.AndFix、HotFix方式。

     HotFix是AndFix的升级版,即将patch.dex文件可以进行加密等安全方面处理。

     它的实现方式是更改方法的引用指针指向,然后及时更新。

     限制:1)只能修改函数。热修复使用范围有限,修改点有限。

     

    总结:1)只能修改函数,不能更新资源文件、添加成员变量等

               2)app运行时候立刻就能起作用

               3)代价较小。

            适合函数的bug修复。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值