Android热修复总结

作者: 阿迪scar | 来源:发表于2019-07-02 00:08 被阅读35次

    插件化和热修复是Android开发较为高级的知识点,是中级开发人员通向高级开发中必备知识点,插件化知识:插件化。下文是对热修复的总结:

    什么是热修复?

    简单来讲,热修复就是为了修复线上问题而提出的修补方案,程序修补过程无需重新发版。

    优点:

    正常开发软件流程一般是: 线下开发-->上线-->发现bug-->紧急修复上线。这种方式代价太大。

    而热修复的开发流程显得更加灵活,无需重新发布版本,实时高效热修复,无需下载新的应用,代价小,最重要的是及时修复了bug。

    当前热门的热修复技术

    1:qq空间超级补丁

    2:微信Tinker

    3:饿了么Amigo

    4:美团Robust :

    5:360RePlugin :

    6:滴滴出行VirtualAPK 等

    热修复

    要弄清热修复技术的原理,就要先弄清Android的ClassLoader机制。Android的ClassLoader分为PathClassLoader和DexClassLoader,它们都都继承自BaseDexClassLoader,其中PathClassLoader用来加载系统类和应用类;DexClassLoader用来加载jar、apk、dex文件。例如下面要介绍的阿里的Andfix和Sophix的原理如下:

    AndFix:

    由补丁类的classLoader加载补丁类,在native层针对不同Android架构中的不同的ArtMethod结构调用对应的replaceMethod方法按照定义好的ArtMethod结构一一替换方法的所有信息如所属类、访问权限、代码内存地址等。 稳定性较差,会受到国内ROM厂商对ArtMethod结构更改的影响,所以这正是AndFix不支持很多机型的原因。

    Sophix:

    由补丁类的classLoader加载补丁类,在native层直接memcpy(smeth,dmth,sizeof(ArtMethod))替换整个artMethod的结构。初始化类时会为这个类分配空间,AllocArtMethodArray会紧挨着的new出来放入art中的方法数组中。通过计算辅助类的前后两个方法的起始地址就可以计算出artMethod结构的大小了。 注:补丁类初始化时,也会分配自己的artMethod空间,拿这个修复过的新ArtMethod去替换旧ArtMethod的内容,不用管ArtMethod的结构。稳定性大大提高!

    代码修复有两大主要方案:一种是阿里系的底层替换方案,另一种是腾讯系的类加载方案。底层替换方案限制颇多,但时效性最好,加载轻快,立即见效。类加载方案时效性差,需要重新冷启动才能见效,但修复范围广,限制少。

    相关文章

      网友评论

        本文标题:Android热修复总结

        本文链接:https://www.haomeiwen.com/subject/pqbocctx.html