阅读 88
从天猫、美团、去哪儿分析,前端开发者该如何把控移动APP动态化发展(二)?

从天猫、美团、去哪儿分析,前端开发者该如何把控移动APP动态化发展(二)?

原文链接: rdc.hundsun.com
上文我们分别介绍了天猫动态化组件-Tangram和360插件化方案-RePlugin从其技术原理、技术架构和各自的优势来展示当前移动APP的动态化发展状况(原文请戳:从天猫、美团、去哪儿分析,前端开发者该如何把控移动APP动态化发展(一))。
今天我们会继续介绍经典案例-去哪儿其资源更新的技术实现和美团的热修复更加深入地介绍移动端技术的发展现状和前景动态。
【资源更新去哪儿QP 】 由于目前去哪儿客户端有80%以上的页面采用了Hybrid和React Native技术,如果从网络实时拉取这些页面资源非常影响用户体验,因此去哪儿技术团队研发出了资源更新方案QP,QP即Quick Package是一种去哪儿自定义的文件格式。 
将Hybrid和React Native页面资源打包到客户端本地,并通过QP资源包的方式更新客户端本地资源,实现了页面的快速打开,提升用户体验。 ▲去哪儿QP将资源分成了强制更新和非强制更新两类: 
▪ 对于非强制更新的资源,如果本地有老版本的资源则在打开本地资源后再在后台请求新资源,以保证下次打开是最新的。如果本地没有老版本,则直接下载,如果2s内下载完成就从下载结果打开,否则就直接走线上。 ▪ 对于强制更新的资源,则直接下载,如果2s内下载完成就用新版本展示,否则就检查本地是否有老版本,有则加载,无则走线上。 

资源更新也是APP上常用的动态化手段,最典型的就要数我们日常买火车票的12306和近来大热的手游王者荣耀。
去哪儿的QP方案看上去平淡无奇,但仍有值得我们学习的地方:  ▪ 资源的分类 很少有APP会为不同的资源设计两套资源更新方案,像12306、王者荣耀的资源更新基本和QP的强制更新流程一致,而我们LIGHT平台的流式更新方案更像是QP的非强制更新流程。 ▪“2秒规则”  更新流程中的“2秒规则”,资源下载超过2秒未完成就走本地老版本或线上是一个非常巧妙的设计,一定程度上避免了网络情况不好时用户的长时间等待,提升了用户体验。 ▪ 统计分析系统  资源更新加入到统计分析系统进行跟踪,通过监控资源包的下载耗时,对耗时长的QP包进行优化减少下载耗时,促使更新包在大多数情况下在2秒内下载完成。 

【热修复-美团Robust】 客户端相对Web版最大的短板就是有发版的概念,对线上事故很难有即时生效的解决方式,每次发版都如临深渊如履薄冰,就算再完善的开发测试流程也无法保证不会将Bug带到线上。 

从15年开始,Android平台出现了一些优秀的热更新方案,主要可以分为两类: 一类是基于multiidex的热更新框架,包括Nuwa、Tinker等;另一类就是nativehook方案,如阿里开源Andfix和Dexposed。这样客户端也有了实时修复线上问题的可能。美团借鉴InstantRun原理,实现了一个热更新方案--Robust。

Robust为每个class增加了个类型为ChangeQuickRedirect的静态成员,而在每个方法前都插入了使用changeQuickRedirect相关的逻辑,当 changeQuickRedirect不为null时,可能会执行到accessDispatch从而替换掉之前老的逻辑,达到fix的目的。 


客户端拿到含有PatchesInfoImpl.java和StatePatch.java的patch.dex后,用DexClassLoader加载patch.dex,反射拿到PatchesInfoImpl.java这个class。拿到后,创建这个class的一个对象。 


然后通过这个对象的getPatchedClassesInfo函数,知道需要patch的class为com.meituan.sample.d(com.meituan.sample.State混淆后的名字),再反射得到当前运行环境中的com.meituan.sample.d class,将其中的changeQuickRedirect字段赋值为用patch.dex中的StatePatch.java这个class new出来的对象。这就是打patch的主要过程。

可能由于推出比较早的关系,美团这套热修复方案现在看来应该说是中规中矩,目前市面上主流的Android热修复框架基本都使用了类似的方案。 


热修复和插件化一样,存在运行外部代码的安全风险,使用的话需要验证外部代码的合法性。另外,热修复虽然可以无须发版就达成修复客户端bug的目的,但仍需要关注不要滥用热修复,由于其便利性,热修复到最后往往会偏离其修复线上bug本意,变成了业务变更的工具。

恒生技术之眼原创文章,未经授权禁止转载。详情见(点击)转载须知

文章分类
前端