android 热修复技术
2017-01-23 15:30:02 0 举报
AI智能生成
Android热修复技术是一种可以在不发布新版本的情况下,快速修复线上应用bug的技术。它主要通过在应用程序运行时替换掉有问题的类或者方法,使得用户无需更新应用就能解决线上问题。常见的热修复方案有Tinker、Dexposed和Andfix等。这些方案的实现原理都是将修复后的代码放在一个独立的补丁文件中,然后通过反射机制加载补丁文件,替换掉原有的有问题的类或者方法。热修复技术能够大大缩短问题解决的时间,提高用户体验,但同时也存在一定的安全风险,因为补丁文件可以被恶意篡改。因此,在使用热修复技术时,需要确保补丁文件的安全性。
作者其他创作
大纲/内容
局限性
只能针对单一客户端版本,随着版本差异变大补丁体积也会增大
不能支持所有的修改,例如AndroidManifest
无论对代码还是资源的更新成功率都无法达到100%
海外app无法使用,google play不允许下发代码
适合的场景
轻量而快速的升级
补丁小,移动网络下即可下载更新
无需发包,一到两天即可覆盖大部分用户
快速验证bug修复,减少灰度次数
远端调试
解决”本地不复现”,”日志查不出”,”联系用户不鸟你”的烦恼
数据统计
对同一批用户不停的更换补丁从而达到abtest的目的
淘宝的Dexposed
缺点
无法支持全平台
支付宝的AndFix
实现思路
native hook
直接使用
dalvik_replaceMethod替换class中方法的实现 没有替换整体的class
无法支持新增或者删除filed主题
(通过替换
init与clinit只可以修改field的数值 缺点
仅仅可以修复特定问题
优点
立即生效
QZone的超级热补丁方案
实现思路
patch.dex插入到multidex最前面
解决调用者类和被调用者在不同的dex报错
防止类被打上CLASS_ISPREVERIFIED标志
除了application类,往所有类的构造函数里面插入了一段代码
if (ClassVerifier.PREVENT_VERIFY) {
System.out.println(AntilazyLoad.class);
}
AntilazyLoad类会被打包成单独的hack.dex
AntilazyLoad类所在的dex包必须被先加载进来,
不然AntilazyLoad类会被标记为不存在
缺点
补丁包会比较大
有一定的性能损耗
优点
开发透明,简单
成功率高
微信的热补丁技术
实现思路
编译时,通过新旧两个Dex生成差异path.dex
为了补丁包尽量的小,微信自研了DexDiff算法
运行时,patch.dex重新跟原始安装包的旧Dex还原为新的Dex
合成过程放到后台进程:patch
缺陷
占用Rom体积
一个额外的合成过程
0 条评论
下一页