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

版权声明:1、本BLOG的目的、形式及内容。   此BLOG为个人维护BLOG,内容均来自 原创及互连网转载。最终目的为收集整理自己需要的文章技术等内容,不涉及商业用途。\r\n 2、有关原创文章的版权   本BLOG上原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。\r\n 3、有关本站侵权   本BLOG所转载的内容,均是本人未发现有对文章版权声明的文章且 https://blog.csdn.net/shijianduan1/article/details/84790716

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


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

1.各框架对比

Tinker QZone AndFix Robust
来源 微信 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 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/shijianduan1/article/details/84790716