目录:
- 适用范围
- 背景
- 方案调研
- 设计思路
- 任意门10.6.5招聘首次上线基础数据
- 任意门动态更新平台
1. 适用范围
线上 AB 测,紧急需求上线,bug 修复等
2. 背景
- 目前线上 AB 测只能跟某个具体的 App 版本,无法在线上包上提前验证效果
- 小版本、紧急需求、bug 修复只能通过发版实现
3. 方案调研
插件化:
- 稳定性差:大量 hook framework, 反射私有 API
- 打包侵入大,维护成本高
- 无法控制影响范围,需要走集成测试
RN/Flutter:
- 现在基于 Native 实现的业务,改造成 RN/Flutter 成本高
- 更新会作用于所有版本,实现 A/B 测维护成本高
- Flutter 热更新、包大小问题
View 的动态化:
- 只能实现 View 级别的动态化,无法实现逻辑动态化
- 维护成本高,需要额外处理版本控制
Wafers(58内部开源项目):
- 基于插件化实现动态包安装运行,少量 hook 和私有 API 访问,稳定性好
- 基于 Android App Bundle 实现,动态更新只能作用于某个版本,自带版本控制功能,适用于 A/B 测,动态更新,且 58App 新版更新收敛率高达 90% 以上
- 支持静默安装,可以让用户无感知更新
- 动态更新适用范围:不能修改基础包,不能新增四大组件,改动影响范围可控
最终选择 Wafers 来实现此功能,目前 Wafers 已作用于特殊推广包,厂商包,本地开发,线上包使用场景较少。也是借这个契机,拓展 Wafers 在线上包上的使用场景。
同时招聘当时正好要做大类页改版,需要提前验证数据,所以加速了这个项目的推进。取名为任意门,寓意为可以任意穿梭的时光门,提供了一种对于现有 App 发版流程的补充。
4. 设计思路
整体设计:
依赖结构:
server 数据下发 (Wafers 冷启动检测更新接口):
客户端跳转流程:
5. 任意门10.6.5招聘首次上线基础数据
招聘在 10.6.5 发布后,基于市场包上线了整个招聘大类页面的 A/B 测,上线了华为、小米两个市场,我们产出了一份数据报告。
安装数据:
崩溃率:
6. 任意门动态更新平台