美文网首页
热修复框架研究

热修复框架研究

作者: 瀚海网虫 | 来源:发表于2020-02-29 18:36 被阅读0次

    1. 当前常见热修复框架

    基本上只在国内用,国外比较佛系,有错发版改就哦了。就像在国外Kotlin大行其道的时候,国内还在java 一统江湖,Kotlin 畏畏缩缩,还没成气候。

    热修复框架笼统讲,分为两个流派:

    • multidex 流
      Tinker Q-Zone 鹅厂出品
      AndFix 阿里出品

    • Instantrun 流
      Robust 美团出品

    image.png

    2. AndFix 方案

    image.png

    native层动态hook java 层代码,NDK开发,注解方式,实现AOP,AndFix 为即时生效。

    3. Robust

    image.png
    image.png

    对每个函数都在编译打包阶段自动的插入了一段代码。类似于代理,将方法执行的代码重定向到其他方法中。 即时生效 + 插桩 + 代理 java 层实现

    3. Tinker

    image.png

    问题dex 与修正dex 做差分计算,下发差分dex。
    重启后生效。 hook 类加载,利用了dex 加载机制。

    Tinker 的热修复的一大亮点是改进了差分算法,bsdiff。针对dex特性,做了优化,dexdiff,效率更高。 但so的热修,依然是基于bsdiff(二进制文件差分)

    关于Android N 混合编译:系统可能提前缓存了部分热点class,解决方式为在ActivityThread 启动时,直接替换PathClassLoader,以绕过系统缓存。

    关于:Devik 虚拟机 Pre-verified 问题(MainActivity所引用的class,如果被打进同一个dex,且会做Pre-verified 标记),tinker 机制插入dex 至数组头部时,就会报跨dex调用的异常信息:
    解决方式:主要是避免类被打上Pre-verified标识,使用gradle插桩的方式,干涉gradle打包流程,在生成javac命令之后,在dx命令之前,在所有我们编写的class构造函数内部,加上 相关类 的直接使用(反射引用是不行的)。

    4. 类查找过程

    image.png

    相关文章

      网友评论

          本文标题:热修复框架研究

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