3 多业务开发实践
2020-04-13 197浏览
- 1.蚂蚁财富Flutter多业务开发实践 楚斌 蚂蚁财富 - 平台与基础
- 2.自我介绍 楚斌,无线开发专家 蚂蚁财富-平台与基础 App端 iOS负责人 曾就职于网易有道,2017年加入蚂蚁金服,经历了蚂蚁财富发展 的多个重大变革阶段,通过工具和工程方法推动了Flutter在财富 BU内落地和跨BU的输出。
- 3.目录 • 业务背景 • Flutter建设路线图 • 复杂生态融合 • 多业务技术体系 • 总结与展望
- 4.蚂蚁财富 - 国内领先的线上理财平台 页面 + 区块 > 10 支撑业务 > 4 迭代版本 > 10 v1.5.4-hotfix.2
- 5.传统应用中Flutter的位置 设置 关于 活动 社区 个⼈人主⻚页 视频 ⾸首⻚页 股票 市场 … 理理财服务 新闻 容器器 存储 扫码 登录 通知 安全 路路由 … ???
- 6.Flutter落地面临的问题 社区 股票 设置 关于 基⾦金金 … ⾸首⻚页 … • • • 如何开发? 开发体验? 发布构建? • • • • Flutter如何接⼊入? 平台能⼒力力? ⾃自⼰己怎么⽤用? ⻛风控降级? 线上监控? 别⼈人怎么⽤用? 上层应⽤用 平台与基础能⼒力力 容器器 存储 扫码 登录 通知 安全 路路由 …
- 7.目录 • 业务背景 • Flutter建设路线图 • 复杂生态融合 • 多业务技术体系 • 总结与展望
- 8.建设路线图 ⼀一期 - 能⼒力力建设 • • • • • • • • 容器器能⼒力力对⻬齐 混编脚本 混合栈 ⼯工程化 图⽚片复⽤用 iOS内存 存储/通知 试点业务上线 ⼆二期 - ⽣生态与运维 • • • • • • • UI组件 路路由/降级 线上监控 私有pub ⼯工作流沉淀 构建与发布 埋点&⽇日志 三期 - 开放赋能 • • • • • • • 路路由重构 CI建设&优化 CLI⼯工具沉淀 业务组件沉淀 重点业务上线 技术输出 数据⼤大盘建设
- 9.技术全景 AFF-CLI 业务 社区Tab 个⼈人中⼼心 关注/粉丝列列表 设置 … Flutter⼤大盘 ⼯工作流 Dart框架 脚⼿手架 监控 通⽤用能⼒力力 UI组件 投放View CommonUI 跨端API 基础库 降级 错误上报 包体积优化 嵌⼊入组件 视频 图表 打包&发布 PubServer App DartVM 构建 路路由 性能监控 … 代理理路路由 包管理理 桥接API 栈管理理 … 区块 回滚 线上配置 FlutterWeb … 发布 研发 iOS Adnroid 平台 运维
- 10.目录 • 业务背景 • 建设路线图 • 复杂生态融合 • 多业务技术体系 • 总结与展望
- 11.能力建设 容器器能⼒力力对⻬齐 混合栈&路路由 Native View Stack Flutter Flutter Page Stack Native View Navigator Route schema 插件层 Flutter View 平台 api 平台能⼒力力:MethodChannel 通知能⼒力力:EventSink 组件复⽤用:PlatformView 容器器 api Navigator schema Route Native View Flutter容器器⽅方案:FlutterBoost by 闲⻥鱼 ⻚页⾯面接⼊入:scheme 视图接⼊入:addSubview
- 12.能力建设 - Tip 通⽤用⽅方法名 Object.someMethod noSuchMethod 强校验⼊入参 NativeHandler(Symbol, Params) Callback
- 13.模块管理 P ⼊入⼝口⼯工程 启动应⽤用 定义应⽤用版本 M M P 业务模块 9t678bv… 普通依赖 M M M M t57egs… r68shc… taj571d… 761cnc… 依赖冲突 Flutter应⽤用的⼀一个版本
- 14.工程化 构建过程 ⼊入⼝口 普通业务 Flutter控制:容器器,路路由等 Gradle Task / build phase Native模块 … Flutter App FlutterAssets 版本 Flutter ⼊入⼝口 Flutter模块 构建脚本 ⽤用户 flutterApi 社区 storage 设置 image 视频 … FlutterAssets App
- 15.路由 - 1.0 Native 直接打开 Flutter ModuleB 校验isFlutter=YES 增加路路由参数 isFlutter=YES pageA Scheme 路路由服务 ModuleA ⼊入⼝口 pageA flutterService 侵⼊入性强 ⽆无法统⼀一控制 跟随native发布
- 16.路由反转 - 2.0 Native 路路由服务 ⽆无bypass参数 原始Scheme ⽆无法处理理则返回 Scheme + bypass Flutter backgroundIsolate 询问是否有业务承接 业务A 业务B 业务C ⽆无侵⼊入 Android动态上线
- 17.Begin 风险降级 Native Flutter VM Init Check 拦截点 addSubview 区块业务 ViewController FlutterView enableFlutter 降级 enableSubview 降级 enableModule 降级 hasFlutterPage 降级 拦截点 普通业务 降级维度 scheme ViewController 通⽤用规则 :平台,⽩白名单,百分⽐比 FlutterView FlutterView NativeView
- 18.运维监控 Dart VM onError error Flutter Framework reportError 上报 #0 Canvas._drawImageRect (dart:ui/painting.dart:3480:72)#1 Canvas.drawImageRect (dart:ui/painting.dart:3458:5)#2 paintImage (package:flutter/src/painting/decoration_image.dart:442:14)聚类 • • • 线上运⾏行行稳定性监控 性能指标监控 - 卡顿,内存等 清洗错误数据,⽣生成数据报表
- 19.目录 • 业务背景 • 建设路线图 • 复杂生态融合 • 多业务技术体系 • 总结与展望
- 20.多业务技术体系要解决的问题 • 业务工程隔离 • 开发工具建设 • 多渠道(版本)支持 • 业务控制:接入方式,降级,灰度…… • • • • • • 代码隔离 工程结构隔离 控制工具维护成本 工具建设过程是双向的 约束边界,保留定制能力 不同业务方对能力的述求完全不一样,支持多渠道将选择能力还给业务方
- 21.业务工程隔离 P ⼊入⼝口⼯工程 启动应⽤用 M M M 业务模块 隐藏的主⼯工程 P 开发时执⾏行行的run,attach 都是从该主⼯工程发起 flutterw指向的flutter版本 为本地.flutter⽂文件夹
- 22.开发工具建设指南 - AFF Commands create build attach clean run publish Tools Env DevTools Dart SimUtil Node FVM … Flutter Wrapper Installer 基于FlutterTools 创建调试发布⼀一条⻰龙 DevTools:能⼒力力更更强的调试⼯工具 SimUtil:集成模拟器器操作 FVM:FlutterVersionManager Publish时⽣生成新的应⽤用版本
- 23.工具建设 - Tip 双向建设 在线更更新 DevTools Node AFF DevTools_1.1 分⽀支 master dev Node_6.5.1 stable 发布分⽀支 AFF运⾏行行时强制修改分⽀支为远端发布分⽀支 AFF未在默认安装⽬目录~/.aff执⾏行行时进⼊入开发模式 开发模式时,不不强制要求在stable分⽀支执⾏行行AFF 业务可⾃自⾏行行开发cli与更更新DevTools,Node
- 24.支持多渠道 本质上是对Flutter版本的管理理 - FVM 实现原理理:在本地⽂文件夹中缓存多个版本 FVM 业务⼯工程包 aff create xxx —channel hk_wealth AFF 1.5.4-hotfix.2 1.7.8+hotfix.4 1.9.1+hotfix.6
- 25.目录 • 业务背景 • 建设路线图 • 复杂生态融合 • 多业务技术体系 • 总结与展望
- 26.总结 • 复杂生态融合 • 混合工程接入 • 平台桥接 • 混合栈,路由统一 • Flutter代码工程化 • 模块化 • 定义版本 • 反向路由 • 平台和业务多角度降级 • 监控能力 • Dart Error • Flutter Frame Error • 多业务支撑 • 业务隔离 • 代码隔离 • 工程结构隐藏 • Flutter操作工具化 • 一站式:无需感知native代码 • 可参与共建 • 支持多渠道
- 27.后续规划 • Flutter Web跟进 • 达到可用标准后,这是一种平台认可的动态发布方式 • AFF的由内向外 • 服务内部到服务社区 • Faas的持续探索 • Dart在Server端的表现得到认可,值得继续投入 • 新型终端 • Google新系统,5G新生态,新的时代在招手
- 28.THANKS THANKS! THANKS!