ChengXuYuan.com
程序员的职场第一站

微信出品——Tinker热更新方案

像H5页面一样线上更新功能和修复问题的热更新技术,一直以来都备受客户端程序猿和产品汪的青睐。

之前果果的老文章《产品后悔药来了,讲讲热补丁技术》也有介绍过两种热更新技术,一个是腾讯QZone团队的超级补丁,另一个是阿里的AndFix。这两个技术是在Android平台热更新领域中非常有代表性的两套解决方案。然而,它们并不是完美的热更新解决方案。

超级补丁方案通过修改系统加载程序的顺序实现热补丁,也就是老文章中提到的ClassLoader方法。这种对系统加载流程的修改,在老版本(Dalvik虚拟机)的Android手机上会造成程序运行性能下降,而为了避免在新版本(ART虚拟机)Android系统上的稳定性问题,又不得不在补丁包中加入大量的冗余信息,导致补丁包过大。

AndrFix方案则有与生俱来的局限性,只能针对性的更新有限的代码,而且对开发者而言门槛更高,需要做针对性的补丁包开发。相对超级补丁方案,AndFix是针对系统更底层的修改,稳定性较差,而且一旦出问题定位困难。据说该方案的修复成功率只有40%左右。

由于这两套解决方案的先天性不足,微信团队自研了Tinker热更新方案。

微信出品

Tinker方案与超级补丁方案工作在系统的同一层级,但与超级补丁不同,Tinker不修改系统加载程序的顺序,而是直接通过补丁包在客户端生成全新的程序文件(full-new.dex)加载,这样就避免了超级补丁方案导致在老版本(Dalvik虚拟机)Android手机上的性能问题。同时,针对新版本(ART虚拟机)Android系统,Tinker通过Art.info辅助文件在客户端生成体积较小且稳定的small-art.dex文件,并利用与超级补丁方案相同的技术加载该补丁文件,实现热更新。

在整个Tinker方案中,DexDiff是其中的核心技术。该技术是微信团队自研的,根据应用程序文件的自身结构来生成补丁文件的算法。在相同更新量的前提下,DexDiff方案比超级补丁方案和AndFix方案生成的补丁文件要小得多。

Tinker热

总而言之,微信的Tinker热更新方案是对现有方案和系统的深入分析之后,提出的一套相对比较完善的解决方案。

Tinker热

该方案现在已经开源,并且提供了SDK和相关工具,使得接入方能够更快的搭建起自己的热更新系统。

作者:果果

文章出处:给产品经理讲技术(订阅号ID:pm_teacher)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址