Android -热更新(1)- 背景调查/分析


转载请声明:本文来自 https://blog.csdn.net/shijianduan1/article/details/84790716


写在最前面, 本篇参考文章:
Android主要热更新技术原理
Android实战——Tinker的集成和使用
Tinker官方说明 Github:Tinker 接入指南

1.各框架对比

TinkerQZoneAndFixRobust
来源微信QQ空间阿里美团
类替换××
So替换×××
资源替换××
全平台支持
即时生效××
性能损耗较小较大较小较小
补丁包大小较小较大一般一般
开发透明××
复杂度较低较低复杂复杂
gradle支持×××
Rom体积较大较小较小较小
成功率较高较高一般最高

2.原理

1)AndFix

核心原理: 在Native层使用指针替换的方式替换bug方法

AndFix采用native hook的方式,这套方案直接使用dalvik_replaceMethod替换class中方法的实现。
由于它并没有整体替换class, 而field在class中的相对地址在class加载时已确定,所以AndFix无法支持新增或者删除filed的情况(通过替换init与clinit只可以修改field的数值)。
Andfix可以支持的补丁场景相对有限,仅仅可以使用它来修复特定问题
2)QZone

核心原理: 基于Android dex分包方案,当多个dex包中有重复的类时(正常的dex没有重复的类),系统会优先选择排在前面的dex文件的类

3)Tinker

核心原理: 将新生成的new.dex与原有的old.dex通过BsDiff算法,得到差异文件,差分包patch.dex,设备端就可以通过算法 使用差分包patch.dex 和 old.dex 还原到new.dex.
微信将算法优化,使用自身的DexDiff算法,来减少补丁包大小

3.缺点

2、Tinker缺点
Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件(1.9.0支持新增非export的Activity);
由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码;
在Android N上,补丁对应用启动时间有轻微的影响;
不支持部分三星android-21机型,加载补丁时会主动抛出”TinkerRuntimeException:checkDexInstall failed”;
对于资源替换,不支持修改remoteView。例如transition动画,notification icon以及桌面图标。
--------------------- 
作者:Hensen_ 
来源:CSDN 
原文:https://blog.csdn.net/qq_30379689/article/details/78575473 
版权声明:本文为博主原创文章,转载请附上博文链接!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值