常用热修复方案以及原理

bsdiff.exe 比对文件不同

bspatch.exe 生成增量包

增量级别更新,应用很广泛,抖音微信都有使用增量更新

所有的热修复都是使用 反射和类加载机制完成热修复,和增量更新的

热修复框架

  • andfix 阿里的以前热修复方案,现在已经废弃

    在C++层级替换,所以无需重启应用,不支持资源替换

    public class Test{@MethodReplace(class="con.dabin.test",method="test")public void test(){}
    }
    
    1. 第一步android开发端 使用gradle生成patcheRelease生成patch包
    2. 移动段从服务端下载patch.jar,包内包含 dex文件,dex文件中是编译后的class文件
    3. classloader,加载class文件到内存中,使用反射找到方法,根据方法中的 @methodreplace注解 找到要替换的类,要替换的方法。
  • Robust 美团的热修复

    字节码自动插桩,会增加包的大小,即时生效,无需重启,不支持资源替换

    //编写的代码
    @modify //改动代码后手动添加坠恶用于补丁包生成
    public long getIndex()
    {return 100;
    }
    //经过插桩后实际执行的代码
    public long getIndex()
    {if(changQuiceRedirect!=null){return changQuiceRedirect.accessDispatch();}return 100l;
    }
    
    1. 使用Robust 会对类自动添加一个 “字节码插桩”
    2. 修复后会执行“字节码插桩”.accessDispatch();方法,调用修复后的代码,打包后生成dex.patch文件
    3. 使用类加载,反射修改方法的真实实现,实现热加载

Tinker 腾讯热修复工具

getPackageManger().getApplication(getPackageName(),0).sourceDir;//就可以获取到当前运行程序的全路径

因为是完整包会比较大,不支持热重启

  1. 将原版本有bug的apk作为基准包,和修复的apk进行比较,生成一个差分包patch.dex
  2. 将生成的patch.dex 和app中运行的classes.dex 合并生成完整的包(包含原本dex中的完整类)

Qzone腾讯热修复

Qzon包会更小,不支持热重启

  1. 修复后的类生成patch.dex作为补丁包
  2. 合并两个dex文件

常用热修复方案以及原理相关推荐

  1. Robust热修复方案实现原理

    前言 本文旨在通过分析源码一步步分析Robust热修复的实现原理,前半部分首先分析一下Robust思路中运用到的技术方案:后半部分多为源码部分,即Robust对于技术方案的实现与运用. 1.关于Rob ...

  2. Android热修复实现及原理

    前言 说起热修复,已经是目前Android开发必备技能.我所了解的一种实现方式就是类加载方案,即 dex 插桩,这种思路在插件化中也会用到.除此之外,还有底层替换方案,即修改替换 ArtMethod. ...

  3. android热修复方案

    热补丁方案有很多,其中比较出名的有腾讯Tinker.阿里的AndFix.美团的Robust以及QZone的超级补丁方案.他们的优劣如下: 一.Tinker 热修复 Tinker通过 Dexdiff 算 ...

  4. Android—常用热修复框架

    前言 热修复即<打补丁>,当一个app上线后,如果发现重大的bug,需要紧急修复.常规的做法是修复bug,然后重新打包,再上线到各个渠道.这种方式的成本高,效率低. 于是热修复技术应运而生 ...

  5. JAndFix: 基于Java实现的Android实时热修复方案

    简述 JAndFix是一种基于Java实现的Android实时热修复方案,它并不需要重新启动就能生效.JAndFix是在AndFix的基础上改进实现,AndFix主要是通过jni实现对method(A ...

  6. android 热修复 需要重启应用嘛?_Android热修复方案盘点

    前言 上一个大的系列文章叫 "手把手讲解", 历时10个月,出产博文二十余篇,讲解细致,几乎每一篇都提供了详实的原理讲解,提供了可运行 githubDemo,并且针对Demo中的关 ...

  7. 干货满满,Android热修复方案介绍

    摘要:在云栖社区技术直播中,阿里云客户端工程师李亚洲(毕言)从技术原理层面解析和比较了业界几大热修复方案,揭开了Qxxx方案.Instant Run以及阿里Sophix等热修复方案的神秘面纱,帮助大家 ...

  8. Android热更新五:四大热修复方案对比分析

    很早之前就想深入的研究和学习一下热修复,由于时间的原因一直拖着,现在才执笔弄起来. Android而更新系列: Android热更新一:JAVA的类加载机制 Android热更新二:理解Java反射 ...

  9. Android 热修复方案分析

    绝大部分的APP项目其实都需要一个动态化方案,来应对线上紧急bug修复发新版本的高成本.之前有利用加壳,分拆两个dex结合DexClassLoader实现了一套全量更新的热更方案.实现原理在Andro ...

最新文章

  1. 【ACM】杭电OJ 1002
  2. 使用SHA256证书进行微软数字签名代码签名
  3. 什么是TCP三次握手?
  4. 将项目导入myeclipse后 tortoise svn 右键项目不能更新和提交
  5. popupwindow 不抢夺焦点_央视专访“上个厕所就要3000块”的亲历者, 被“坑”的不愉快经历...
  6. mcq 队列_MCQ | 软件程序分析工具和组件分类| 免费和开源软件
  7. 1. 搭建scapy
  8. Mac 苹果OS X小技巧:如何更改文件的默认打开方式
  9. win10 64位 JavaJDK的下载、安装与配置。
  10. 博物馆施工组织设计方案
  11. Linux 命令之 gzip -- 压缩和解压文件
  12. DSP学习(3)—— DSP调试与追踪
  13. 前缀树python实现
  14. 华为交换机 查ip冲突_华为交换机根据ip查端口号
  15. 微盟WOS新商业操作系统正式公测
  16. 了解“新基建”、读罢IDC报告后,还请查收来自浪潮的硬核实力!
  17. 暴光史上最强的女生勾引男生的方法
  18. android Q特性与进阶
  19. html页面手机端不能上下滑动翻页,HTML5 移动端的上下左右滑动问题
  20. Undefined control sequence.<recently read> \multirow

热门文章

  1. FPGA设计思想与技巧(转载)
  2. CommandArgument属性 绑定参数
  3. 群发邮件很多都进了垃圾箱,怎么办?
  4. qemu网络配置-桥接-IOT固件模拟
  5. linux中位置变量
  6. 微信小程序Canvas卡顿优化解决方法
  7. 大数开根号(蓝桥杯-矩阵翻硬币)
  8. 罗生门:动荡时代下人性的恶与善
  9. 手把手微信机器人部署教学
  10. chalk.js(node终端样式库)