版权声明: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
版权声明:本文为博主原创文章,转载请附上博文链接!