Flutter 3.47.5 鸿蒙适配发布:从 4 个月到 1 天,0day 适配由社区共同定义
这次发布鸿蒙适配版的不是 CPF-Flutter,而是 AtomGit 上一群社区开发者:他们 fork 代码后自建 oh-3.47-dev 分支、自己同步上游、自己打 tag。两个主体并行适配同一上游,正是生态成熟的信号。本文讲清这条线的性质与配套要求。
这是 AtomGit 平台社区开发者 在 fork 了 CPF-Flutter 代码之后,自主建立 3.47-dev 分支、同步上游 3.47.5 并完成适配的独立发布。
版本:Flutter 3.47.5-ohos-1.0.0 | 分支:oh-3.47-dev | Tag:3.47.5-ohos-1.0.0
这一点必须放在最前面,因为它决定了这个版本的性质。
第一,它不是“另一个下载站”,而是独立的适配发布线。 oh-flutter 在自己的 fork 上建了 oh-3.47-dev 分支,自己同步上游、自己重建工件、自己发 tag。3.47.5-ohos-1.0.0 这个 tag 指向 39481acc,是 oh-flutter 仓库自己的提交。
第二,两条线可以互为参考、相互印证。 同一个上游 Flutter 版本,由两个主体各自适配,谁先跑通、谁的问题更少,社区一对比就看得出来。这种“多主体并行适配”本身就是生态健康的标志——它说明鸿蒙适配不再依赖单一团队,而是具备了可复制、可竞争、可持续的社区基础。
换句话说:CPF-Flutter 证明了这条路能走通;oh-flutter 在证明这条路谁都能走。
上游同步 3.47.5:bin/internal/engine.version 由 06a2e2a1 升至 af7e796e,DEPS 的 dart_revision 由 1d1a730e 升至 b530c21f——Dart 3.13.3 → 3.13.4,kernel 仍为 138。
修复 flutter test 完全不可用(issue #3)。这个问题值得展开说,因为它是一个典型的“版本配套”故障:
1.0.4 上,宿主工件取自 OBS 的 engine.ohos 树(3.44.9 时代、Dart 3.12.2 / kernel 130),而分支 Dart 是 3.13.3(kernel 138)。两者的内核格式不兼容,因此任何工程的 flutter test 都必然报错:
Can’t load Kernel binary: Invalid kernel binary format version (expected 130, found 138)
修复方式是让 FlutterSdkOhos 改走标准引擎源(engine.version),使宿主工件与分支 Dart 自动配套。
一个有意为之的权衡:改走标准源之后,国内用户需要配置 FLUTTER_STORAGE_BASE_URL(例如 https://storage.flutter-io.cn)才能顺畅下载。这与上游行为一致,是**”配套正确性优先于开箱即用”**的取舍——宁可多一步配置,也不要一个内核版本对不上的工具链。
Dart 3.13.4 定制 SDK 重建:上游 3.13.3→3.13.4 只有 3 个提交、8 个文件(dart2js 体积估算、dartdev 修复、tools/VERSION),9 个 OHOS 补丁文件均未变动。本版本按 3.13.4 + OHOS 移植 + attachment/patches 两个补丁全量重建。
三档引擎全量重建:本批次 debug / profile / release 三档引擎均在当前 HEAD 全量重建(含 arm64_v8a_<mode>.har 内自带的那份 libflutter.so),不再出现”只重编 flutter.har、附件里混着旧档”的情况。7 项引擎工件 + 2 项 dart-sdk 共 9 行覆盖配置统一指向 3.47.5-ohos-1.0.0 同一 Release tag。
先看 CPF-Flutter 公开的版本规划表,它给出的适配周期是:
而 oh-flutter 在自己的 README 里,把实际达成的节奏更新成了:
这就是“0day 适配”的真实含义:上游发版,鸿蒙侧几乎同步可用。
而且注意一个细节:3.47.4 和 3.47.5 连续两个版本都做到了 1 天。这说明它不是一次运气好的冲刺,而是流程已经稳定下来了。
这次能这么快,有一个非常具体的技术原因,值得记录下来:
engine/src 在 3.47.4 → 3.47.5 之间逐字节相同。
也就是说,上游这次只动了 Dart 运行时(3.13.3 → 3.13.4),引擎的 C++ 侧一行没改,embedded 层无需重新适配。
对比 engine/src 是否变更 ← 这次:逐字节相同,跳过 C++ 适配
(引擎 har / patched_sdk / 定制 Dart SDK)
关键洞察是:并非每次上游发版都需要“重新适配”。 只要准确识别出“这次到底变了什么”,就能把工作量精确缩小到必要范围内。这次 Dart 变了、C++ 没变,那就只重建、不重适配——1 天就是这么省出来的。
这也解释了为什么 3.47.4 和 3.47.5 都能做到 1 天:当版本基线的架构已经对齐,后续小版本跟进就退化成了一次“工件重建 + 校验”的机械流程。
上面讲了速度,接下来必须讲一个更重要的事:快,不等于稳。
一个版本“构建通过”和“在真机上跑得好”,中间隔着的距离,比很多人想象的要大。这也是为什么这次发布要分两层来看:
构建层面的校验,oh-flutter 已经做得很细——符号表、ABI、架构逐项都留了可复核的口径:
但这些都是静态校验。静态校验能保证“工件是自洽的”,却无法保证“在你那台设备上显示正常”——字体端口尤其如此,它丢了编译期不报错。
好消息是,这一层也已经跑通了。本版本已在真机上完成设备侧验证:
(HUAWEI,硬件版本 HL1CMSM)
实际跑通的链路:
GPU does not support the format(0) 这个错误值得单独说一句:它正是此前导致 flutter create 默认应用在鸿蒙真机上黑屏的根因(offscreen native window 缺 SET_USAGE / SET_FORMAT)。这次真机上没有再出现,说明该修复在 3.47.5 上依然生效。
真机验证完成,不等于万事大吉。必须说清楚两点边界:
这正是社区适配与官方适配最大的不同:官方团队有完整的设备矩阵,社区没有。
所以这次的请求依然具体,只是从“从零开始验证”变成了“帮我们把覆盖范围扩开”:
一次真机验证 = 一个机型的可用性确认。 278 位贡献者能把 CPF-Flutter 的适配线撑起来,靠的就是这种“每人测一台”的累积。
oh-flutter 这个组织是 2025 年 8 月 27 日创建的,到这次发布不过一年时间。它做的事情,用一句话概括就是:
把 CPF-Flutter 的适配成果,变成一条由社区自主维护、可持续迭代的版本线。
这件事的意义,不在于“多了一个下载源”,而在于验证了适配能力的可复制性:
后者才是健康的生态。因为它意味着:即便某天某个团队停更,社区里仍然有其他人能接上。
每一种参与都被看见。 这次发布的发布说明里,连“验证范围仅覆盖 debug 档、仅覆盖一台机型”这样的边界都写进了正式文档——一个愿意把不足摊开讲的社区,值得信任。
git clone -b oh-3.47-dev https://atomgit.com/oh-flutter/flutter_flutter.git
git checkout 3.47.5-ohos-1.0.0
注意:Flutter OH 暂未适配 flutter upgrade 命令,直接执行会因拉取官方 Channel 而破坏适配环境。请使用 git clone / git checkout 切换版本。
0day 适配不是靠某个人做到的,而是靠一套流程、一群人的接力。
也欢迎添加我的联系方式,咱们交个朋友!未来我也会持续分享各类前沿技术干货。
[1]Flutter 3.47.5-ohos-1.0.0 Release Note: https://atomgit.com/oh-flutter/flutter_flutter/blob/oh-3.47-dev/release-notes/Flutter%203.47.5-ohos%201.0.0%20ReleaseNote.md
[2]oh-flutter/flutter_flutter 仓库: https://atomgit.com/oh-flutter/flutter_flutter
[3]CPF-Flutter/flutter_flutter 上游适配线: https://atomgit.com/CPF-Flutter/flutter_flutter
[4]Flutter OH 环境搭建指导: https://atomgit.com/cpf-flutter/flutter_samples/blob/master/ohos/docs/03_environment/OpenHarmony-flutter%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E6%8C%87%E5%AF%BC.md
[5]Flutter OH 应用构建指导: https://atomgit.com/cpf-flutter/flutter_samples/blob/master/ohos/docs/04_development/OpenHarmony-flutter%E5%BA%94%E7%94%A8%E6%9E%84%E5%BB%BA%E6%8C%87%E5%AF%BC.md
本文由人人都是产品经理作者【nutpi】,微信公众号:【nutpi】,原创/授权 发布于人人都是产品经理,未经许可,禁止转载