Flutter 动态化怎么选:Shorebird 与 Shiply Conch 的底层差异与落地建议
编辑标准与来源政策: 编辑标准, 团队. 内容均链至原始来源,见 方法论.
Flutter 发布模式下 Dart 会被 AOT 编译进 libapp.so,不像 RN 那样能直接换 JS Bundle。所以“动态化”不是加个 SDK 就行,而是要在不碰商店审核的前提下,把那层已经编译死的 Dart 逻辑重新“撬开一条缝”。目前工程上最常被拿来做对比的两套方案,是 Shorebird 和腾讯 Shiply 的 Conch-Flutter。它们解决的是同一个痛点,但撬动的方式完全不一样。
一、两套方案的底层机制差异
Shorebird 的思路是“改运行时”。它分叉了 Dart VM / Flutter 引擎,在包里塞进一个定制运行时。发基准包用 shorebird release,修 Bug 用 shorebird patch 生成 Dart 层二进制差量,传到它家 CDN;App 启动时间询补丁,命中后让补丁里的 Dart 代码覆盖原 AOT 片段执行。Android 侧基本走原生路径,iOS 侧因为苹果限制要用自研解释器跑补丁区,所以补得越多解释执行占比越高。
Shiply Conch 的思路是“改编译链 + 自研解释器”。它不改你日常写的 Flutter 代码,而是在 Dart 编译器层面动手,配套一套自研 Dart 解释器和运行时服务体系。补丁按“模块”粒度制作和下发,支持函数级修复、页面级动态化、整包级动态化三种粒度;资源走 Flutter 原生资源热更,Image.asset 这类不用改写法。
一句话类比:
- Shorebird 像给整车换 ECU 补丁,差量下发、覆盖执行;
- Conch 像把车身按模块拆好,每个模块都能单独发“替换件”,而且配套了车间(Shiply 平台)管库存和派单。
二、使用场景与优劣对比
Shorebird
适合:海外业务、Dart-only 热修、小团队想最快跑起来。
典型场景:支付页算错金额、空指针崩溃、文案逻辑写反——纯 Dart 层事故,几行修复不想等审核。
优势
- CLI 体验顺滑,
init / release / patch一套命令,和现有 Flutter 工程侵入小; - 差量补丁体积小,控制台带灰度比例、采纳率、崩溃对比、一键回滚;
- 海外 CDN 分发成熟,多地区拉取稳定。
硬伤
- 只动 Dart。Kotlin/Swift 原生代码、MethodChannel 实现、权限、
Info.plist、AndroidManifest、原生资源全都不归它管,动了就得走商店; - 不支持私有化部署,补丁服务和元数据走 Shorebird 云端;
- iOS 补丁区走解释执行,纯 Dart 密集计算会有可感知损耗;
- 引擎分叉跟着 Flutter 版本走,大版本升级要等官方适配;
- 国内落地没有原生“发布审批流 / 模块责任人 / 体验名单”这套企业管控。
Shiply Conch
适合:国内中大型 App、多业务线并行、要和资源/配置/原生热修打通、有发布合规要求。
优势
- 粒度灵活:函数修复、单页面动态化、整包动态化都能做,补丁按业务模块拆,加载快、爆炸半径小;
- 端云一体:Shiply 控制台管灰度、体验名单、审批、暂停/撤回、多维加载率/FPS 观测,和国内发版流程能对齐;
- 资源热更原生适配,Dart 开发体验不变,不用学新 DSL 或 JS 桥;
- 腾讯系成熟业务验证过,加载成功率、下发稳定性按平台级 SLA 走;
- 多端统一发布、差量、签名、回滚都在一个平台里,适合有多个 Flutter 子工程的公司。
代价
- 接入比 Shorebird 重:要接 SDK、
runAppWrapper包一层、打基准包留符号文件、在 Shiply 建模块和发布任务; - 编译链改造意味着团队要接受“我们用的不是纯上游 Flutter”这一事实,排包、定位符号、升级引擎都要按 Conch 节奏来;
- 平台绑定深,迁出成本不低;
- 对小项目来说,管控后台的复杂度反而是一种负担。
三、为什么更推荐 Shiply Conch
如果你做的是国内 C 端业务,选 Conch 而不是 Shorebird,核心不是“谁技术更炫”,而是三件事:
1. 发版不是个人行为,是组织行为
Shorebird 控制台再好用,也只是“补丁分发”。Conch 绑的是 Shiply 的发布体系:模块负责人、审核人、体验名单、灰度时长、平滑放量、紧急撤回——这些恰好对应国内 App 出事时真要走的流程。Dart 补丁写错一行,能靠“模块级回滚 + 体验名单复验”兜住,而不是全量推了再看崩溃曲线。
2. 动态化不止 Dart 代码
线上问题经常是“Dart 逻辑错了 + 配图错了 + 复制文案错了”。Conch 把代码补丁和资源热更放在同一条管道里,避免你 Shorebird 修代码、再自己搭 CDN 修资源、再用 Remote Config 改开关——三套系统对账对到崩。
3. 合规和审计在国内是硬指标
补丁签名、下发审计、谁批的、推给哪批设备、什么时候撤的,Conch 在平台侧有完整记录。对外沟通时,这比“补丁传在第三方 SaaS 上”好解释得多。
Shorebird 不是不好,它在海外、独立产品、纯 Dart 热修场景里非常省心。但一旦你关心“多业务线怎么隔离”“出事怎么追责”“资源和代码怎么一起发”“国内合规怎么交差”,Conch 的端云一体模型就更贴地。
结论:海外轻量热修用 Shorebird 最省事;国内业务要长期跑、多团队协同、和资源发布/合规绑在一起,Shiply Conch 是更稳的那条路。动态化不是“能不能发补丁”,而是“出事时你敢不敢在十分钟里推、五分钟里撤、事后能拿出完整链路复盘”。