美团 方锦涛《美团客户端动态化实践》

随着这几年的基础技术积累,移动端动态化解决方案逐渐丰富起来。但对开发者来说,动态化的道路上仍然有很多现实的技术坑,从选择动态化方案到规划动态化未来的走向,从开源项目试水到搭建动态化服务后台,实践过程中无一不是遍地荆棘。美团平台承载了数十条业务线的开发,从大家熟知的美食、外卖、电影、酒店到探索中的打车、零售等等。这些业务线之间的业务形态、发展状态等都千差万别,他们对动态化也都有各自不同的诉求。为了支持好业务线的发展,美团平台在实践中摸索出了一系列适合不同业务的动态化方案。在这里我将详细分析美团在动态化实践中踩到的坑和解决方案,希望能跟大家一起探索出移动端动态化的康庄大道。
展开查看详情

1.美团客户端动态化实践 美团点评:方锦涛

2.

3.

4.目录 美团动态化的背景 动态化技术方案概览 美团客户端动态化体系 移动端动态化未来之路

5.关于美团 • 200+品类 到店 到家 出行 … … …

6.关于美团客户端平台 • 众口难调 − 业务发展阶段不一样 − 团队技术栈不一样 − 历史包袱不一样

7.移动端开发的痛点 Native H5 • 多端开发 • 功能弱 • 升级慢 • 体验差

8.动态化的目的 • 提高迭代效率 – 相对Native 开发效率:多端开发 更新效率:升级慢 • 提高用户体验 – 相对H5 功能问题 体验问题

9.目录 动态化的目的 动态化技术方案概览 美团客户端动态化体系 移动端动态化未来之路

10.动态化技术方案概览 已知方案 百度 轻应用, 小程序, DynamicLoadAPK, ReactNative, HtmlNative 阿里巴巴 支付宝小程序, Weex, Atlas, Tangram 腾讯 微信小程序, VasSonic, ReactNative Google Android Instant App, Progressive Web App, Flutter Facebook ReactNative 携程 DynamicAPK, Ctrip ReactNative(CRN) 滴滴 VirtualAPK, DynamicCocoa 其他 快应用

11. 动态化技术方案总结 新开发模式 布局动态化 虚拟运行环境 FlexboxLayout Yoga ReactNative Weex Tangram Flutter 快应用 偏Native 偏H5 Atlas DroidPlugin VasSonic PWA VirtualAPK InstantApp PhoneGap 小程序 业务插件化(Android) Web容器增强 原有开发模式

12.动态化之路 Native H5

13.动态化方案的选择 • 迁移效率 • 开发效率 • 更新效率 • 稳定性 • 流畅度

14.Web容器增强 Web能力增强(Hybrid/PWA) 短期运营业务-案例: 迁移效率 各类节日运营活动、广告运营活动 流畅度 开发效率 稳定性 更新效率

15.业务插件化 业务插件化(Atlas/DroidPlugin/VirtualAPK) 一键动态化-案例: 迁移效率 老业务一键迁移:美团大交通业务 流畅度 开发效率 稳定性 更新效率

16.布局动态化 布局动态化(Flexbox/Yoga/Tangram) 极致稳定性-案例: 迁移效率 美团首页运营位、外卖首页运营位 流畅度 开发效率 稳定性 更新效率

17.虚拟运行环境 虚拟运行环境(RN/Weex/Flutter) 新业务动态化-案例: 迁移效率 美团“发现”Tab 流畅度 开发效率 稳定性 更新效率

18.动态化技术方案对比 迁移效 开发效 更新效 方案 稳定性 流畅度 适合场景 率 率 率 Web容器增强 高 高 高 中 低 短期运营业务 业务插件化 高 中 中 中 中 一键动态化 Android 布局动态化 低 中 高 高 高 极致稳定性 虚拟运行环境 中 高 高 中 中 新业务尝试

19.目录 动态化的目的 动态化技术方案概览 美团客户端动态化体系 移动端动态化未来之路

20.美团客户端动态化的痛点 动 布局动态化: MTFlexbox 业务发展阶段不一致 态 化 业务插件化: 美团插件化框架Hydra 诉 团队技术栈不一致 多套解决方案 求 虚拟运行环境: MRN 不 历史包袱不一致 一 Web容器增强: 致 TitansX

21.美团平台动态化体系全景图 布局动态化 业务插件化 虚拟运行环境 Web容器增强 MTFlexbox Hydra MRN TitansX 布局模型 一键插件化API 组件和框架 TitansX JS API 业务 DSL定义 Native扩展支持 接口 动态布局IDE 插件构建工具 Bundle拆分工具 调试工具 辅助 扩展组件库 调试工具 工具 布局解析器 Multidex加载 多实例运行环境 离线化 运行 Native控件支持 资源管理器替换 稳定性监控 长连接 环境 反劫持 基础动态化服务(升级管理、新版本推送、安全保障等)

22.布局动态化-IDE工具

23.布局动态化效果

24.Android业务插件化-方案对比 迁移成本 框架 接入方式 代码迁移 资源迁移 Atlas 特有的awb方式 高 低 (阿里) VirtualAPK 需要手工配置脚本 未知 高 (滴滴) RePlugin 业务无法共享组件 高 高 (360) Hydra 跟库依赖集成一致 零成本 零成本 (美团)

25.Android业务插件化: 难点 资源处理 插件对宿主的资源访问问题 库依赖 无缝切换 插件依赖 代码处理 系统函数调用的兼容性问题

26.业务插件化: 解决方案 • 介入编译打包过程,全局修改字节码 所有资源 .ap_ 所有库 美团APK 所有代码 .dex 插件资源 .ap_ 插件依赖 插件APK 插件代码 .dex

27.美团Android插件化效果 compile(‘train:9.1’) pluginCompile(‘ train:9.1’ )

28.虚拟运行环境:MRN MRN业务开发平台 发布系统 开发工具 业务组件 业务框架 线上运维 发布流程 调试工具 组件规范 应用架构 稳定性监控 静态检查 代码转换工具 UI组件 页面模板 性能监控 持续集成 Native桥 业务异常监控 发布平台 容灾备份 ReactNative框架优化 内核优化 双平台对齐 业务隔离

29.RN的状态 过高期望的 峰值 可 见 实质生产的 高峰期 度 稳步爬升的 RN的状态 光明期 泡沫化的谷 底期 诞生的促动期 成熟度