常用热修复方案以及原理
常用热修复方案以及原理
bsdiff.exe 比对文件不同
bspatch.exe 生成增量包
增量级别更新,应用很广泛,抖音微信都有使用增量更新
所有的热修复都是使用 反射和类加载机制完成热修复,和增量更新的
热修复框架
andfix 阿里的以前热修复方案,现在已经废弃
在C++层级替换,所以无需重启应用,不支持资源替换
public class Test{@MethodReplace(class="con.dabin.test",method="test")public void test(){} }
- 第一步android开发端 使用gradle生成patcheRelease生成patch包
- 移动段从服务端下载patch.jar,包内包含 dex文件,dex文件中是编译后的class文件
- classloader,加载class文件到内存中,使用反射找到方法,根据方法中的 @methodreplace注解 找到要替换的类,要替换的方法。
Robust 美团的热修复
字节码自动插桩,会增加包的大小,即时生效,无需重启,不支持资源替换
//编写的代码 @modify //改动代码后手动添加坠恶用于补丁包生成 public long getIndex() {return 100; } //经过插桩后实际执行的代码 public long getIndex() {if(changQuiceRedirect!=null){return changQuiceRedirect.accessDispatch();}return 100l; }
- 使用Robust 会对类自动添加一个 “字节码插桩”
- 修复后会执行“字节码插桩”.accessDispatch();方法,调用修复后的代码,打包后生成dex.patch文件
- 使用类加载,反射修改方法的真实实现,实现热加载
Tinker 腾讯热修复工具
getPackageManger().getApplication(getPackageName(),0).sourceDir;//就可以获取到当前运行程序的全路径
因为是完整包会比较大,不支持热重启
- 将原版本有bug的apk作为基准包,和修复的apk进行比较,生成一个差分包patch.dex
- 将生成的patch.dex 和app中运行的classes.dex 合并生成完整的包(包含原本dex中的
完整类
)
Qzone腾讯热修复
Qzon包会更小,不支持热重启
- 将
修复后的类
生成patch.dex作为补丁包 - 合并两个dex文件
常用热修复方案以及原理相关推荐
- Robust热修复方案实现原理
前言 本文旨在通过分析源码一步步分析Robust热修复的实现原理,前半部分首先分析一下Robust思路中运用到的技术方案:后半部分多为源码部分,即Robust对于技术方案的实现与运用. 1.关于Rob ...
- Android热修复实现及原理
前言 说起热修复,已经是目前Android开发必备技能.我所了解的一种实现方式就是类加载方案,即 dex 插桩,这种思路在插件化中也会用到.除此之外,还有底层替换方案,即修改替换 ArtMethod. ...
- android热修复方案
热补丁方案有很多,其中比较出名的有腾讯Tinker.阿里的AndFix.美团的Robust以及QZone的超级补丁方案.他们的优劣如下: 一.Tinker 热修复 Tinker通过 Dexdiff 算 ...
- Android—常用热修复框架
前言 热修复即<打补丁>,当一个app上线后,如果发现重大的bug,需要紧急修复.常规的做法是修复bug,然后重新打包,再上线到各个渠道.这种方式的成本高,效率低. 于是热修复技术应运而生 ...
- JAndFix: 基于Java实现的Android实时热修复方案
简述 JAndFix是一种基于Java实现的Android实时热修复方案,它并不需要重新启动就能生效.JAndFix是在AndFix的基础上改进实现,AndFix主要是通过jni实现对method(A ...
- android 热修复 需要重启应用嘛?_Android热修复方案盘点
前言 上一个大的系列文章叫 "手把手讲解", 历时10个月,出产博文二十余篇,讲解细致,几乎每一篇都提供了详实的原理讲解,提供了可运行 githubDemo,并且针对Demo中的关 ...
- 干货满满,Android热修复方案介绍
摘要:在云栖社区技术直播中,阿里云客户端工程师李亚洲(毕言)从技术原理层面解析和比较了业界几大热修复方案,揭开了Qxxx方案.Instant Run以及阿里Sophix等热修复方案的神秘面纱,帮助大家 ...
- Android热更新五:四大热修复方案对比分析
很早之前就想深入的研究和学习一下热修复,由于时间的原因一直拖着,现在才执笔弄起来. Android而更新系列: Android热更新一:JAVA的类加载机制 Android热更新二:理解Java反射 ...
- Android 热修复方案分析
绝大部分的APP项目其实都需要一个动态化方案,来应对线上紧急bug修复发新版本的高成本.之前有利用加壳,分拆两个dex结合DexClassLoader实现了一套全量更新的热更方案.实现原理在Andro ...
最新文章
- 【ACM】杭电OJ 1002
- 使用SHA256证书进行微软数字签名代码签名
- 什么是TCP三次握手?
- 将项目导入myeclipse后 tortoise svn 右键项目不能更新和提交
- popupwindow 不抢夺焦点_央视专访“上个厕所就要3000块”的亲历者, 被“坑”的不愉快经历...
- mcq 队列_MCQ | 软件程序分析工具和组件分类| 免费和开源软件
- 1. 搭建scapy
- Mac 苹果OS X小技巧:如何更改文件的默认打开方式
- win10 64位 JavaJDK的下载、安装与配置。
- 博物馆施工组织设计方案
- Linux 命令之 gzip -- 压缩和解压文件
- DSP学习(3)—— DSP调试与追踪
- 前缀树python实现
- 华为交换机 查ip冲突_华为交换机根据ip查端口号
- 微盟WOS新商业操作系统正式公测
- 了解“新基建”、读罢IDC报告后,还请查收来自浪潮的硬核实力!
- 暴光史上最强的女生勾引男生的方法
- android Q特性与进阶
- html页面手机端不能上下滑动翻页,HTML5 移动端的上下左右滑动问题
- Undefined control sequence.<recently read> \multirow