鸿蒙Flutter框架 0day适配实战:02 手动 bootstrap 高版本 tag SDK:浅克隆、首次初始化与三层版本核验
前言
第 1 篇讲完了鸿蒙版 Flutter 的背景(三层架构、三个接缝、七层适配工作)、两个分叉仓库的版本线,以及路径 A:用 fvm fork 安装分支版本。同时留了一个边界:fvm 只认分支,装不了以 git tag 发布的版本——而 oh-flutter 仓库的 3.41+ / 3.47+ 线全部是 tag 发布。
本篇就是路径 B 的完整实录:当目标版本只有一个 tag(本文实例为 3.47.5-ohos-1.0.0),如何手动把完整 SDK 装进 fvm 缓存目录、跑通首次初始化、逐层核验装对了没有。所有命令与输出均取自真实环境(macOS arm64 + fvm 4.3.1,2026-10 记录)。
版本口径(2026-10 更新):本文以
3.47.5-ohos-1.0.0为实录实例;当前安装请将版本号替换为 3.47.8-ohos-1.0.0,tag clone、初始化与核验步骤完全一致。配套 DevEco Studio 26.0.0 Release + OpenHarmony SDK/API 26,环境搭建见 OpenHarmony-flutter 环境搭建指导。
本篇的场景起点是一个真实的版本墙:第三方包要求 Flutter ≥ 3.41,本机只有 3.44.9 线——装 tag 版本不是「想尝鲜」,是被迫的。
背景提示:ohos Flutter 是社区分叉,tag 是 oh-flutter 仓库的发布形式,
版本命名规则(<上游版本>-ohos-<补丁号>)与flutter.version.json的字段含义,见第 1 篇第二、三章,本篇不再展开。
一、从版本墙到 tag:什么时候必须手动 bootstrap
1.1 场景回顾:版本墙长什么样
flutter pub get 失败,报错(真实记录,包名脱敏):
The current Flutter SDK version is 3.44.9+ohos-0.0.1-canary1.
Because <package> depends on <dep> which requires SDK version >= 3.41.0,
version solving failed.
* Try using the Flutter SDK version: 3.47.6.
这个报错里有个陷阱(第 1 篇第八章详述过,这里一句话带过):建议的 3.47.6 是上游官方版本号,本机根本装不了。正确动作是升到满足约束的 ohos 分叉版本——查 tag 列表,锁定 3.47.5-ohos-1.0.0(框架功能对应上游 3.47.x,Dart 3.13.4,实测 pub 可解析)。
1.2 手动 bootstrap 的本质:三步走
手动 bootstrap 听起来玄,本质只做一件事:把一个完整可用的 SDK 放进 fvm 的扫描目录,让 fvm 把它当成一个「已安装的版本」。拆成三步:
- 探测 tag:确认目标 tag 存在于仓库(用 git 协议,不要用网页);
- 浅克隆:
git clone --depth 1 --branch <tag>到~/fvm/versions/ohos/<自己起的名字>; - 首次初始化:跑一次
bin/flutter --version,触发 flutter_tools 构建与定制 Dart SDK 下载。
两条安装路径的总决策图(本篇覆盖右侧蓝色路径 B):

上图与第 1 篇同一张决策图:先判断发布形态,分支走左侧 fvm fork,tag 走右侧手动 bootstrap;装完统一做三步自检。
1.3 两条路径放一起看
虽然入口不同,两条路径最终都落在 ~/fvm/versions/ohos/ 下,装完之后的使用方式(fvm use、.fvmrc、三层核验)完全一致——区别只在「SDK 怎么放进去」:
| 维度 | 路径 A(fvm fork) | 路径 B(手动 bootstrap) |
|---|---|---|
| 触发条件 | 版本以分支发布(CPF-Flutter 3.44 及更早历史线) | 版本只有 tag(oh-flutter 3.41+/3.47 线) |
| 核心命令 | fvm fork add + fvm install <别名>/<分支> | git clone --depth 1 --branch <tag> + bin/flutter --version |
| SDK 落地目录 | ~/fvm/versions/ohos/<分支名>(仓库定名) | ~/fvm/versions/ohos/<自己起的名字>(建议 oh-x.y.z-release 风格) |
| 必经步骤 | 注册 fork → 安装 → fvm use → 自检 | 探测 tag → 浅克隆 → 首次初始化(可能需修 SSH 依赖)→ fvm 接入 |
| 高频坑 | 镜像没切下载慢;分支名 ≠ 实际版本号 | release 页 SPA 挂起;SSH 依赖 URL;中断留半成品 |
下面进入路径 B 实操。
二、手动 bootstrap 实操:完整五步
2.1 第一步:确认 tag 存在
用 git 协议探测仓库的 tag 线(完整版本线从 3.7.12-ohos-1.0.x 一直到 3.47.5-ohos-*):
git ls-remote --tags https://atomgit.com/oh-flutter/flutter_flutter.git
输出很长,只看 3.40+ 系列可以加过滤:
git ls-remote --tags https://atomgit.com/oh-flutter/flutter_flutter.git \
| grep -E "3\.4[0-9]\.|3\.5" | grep -v "\^{}"
确认存在 3.47.5-ohos-1.0.0 这一行,才能进入下一步(tag 线片段见第 1 篇 4.3 节)。
这里先排掉两个会让「确认 tag」这一步卡死的坑:
坑 CP1:不要用
curl抓 release 页面找下载链接。
AtomGit 的 release 页面是 JS 渲染的 SPA,直接抓 HTML 拿不到资源链接,curl会一直挂起。
要探测版本就用git ls-remote --tags,要下载源码就直接git clone --branch <tag>。
坑 CP2:macOS 没有
timeout命令。
想给git ls-remote限时(防挂起),timeout 40 git ls-remote ...会报command not found。
用「后台进程 + sleep + kill」手工限时:
git ls-remote --tags https://atomgit.com/oh-flutter/flutter_flutter.git 2>&1 | tail -20 &
GITPID=$!
sleep 35
if kill -0 $GITPID 2>/dev/null; then
echo "still running, killing"; kill $GITPID
fi
wait $GITPID 2>/dev/null
2.2 第二步:浅克隆到 fvm 缓存目录
fvm 会扫描 ~/fvm/versions/<子目录> 作为已安装 SDK,所以 clone 的目标目录要起成 fvm 认识的版本名:
mkdir -p ~/fvm/versions/ohos
git clone --depth 1 --branch 3.47.5-ohos-1.0.0 \
https://atomgit.com/oh-flutter/flutter_flutter.git \
~/fvm/versions/ohos/oh-3.47.5-release
四个要点:
--depth 1浅克隆:仓库很大(含引擎源码与历史),全量历史对「装 SDK」毫无必要;--branch参数必须写 tag 名(fvm 装不了 tag,git 可以按 tag 浅克隆);- 目标目录名
oh-3.47.5-release是自己起的,与 CPF-Flutter 的分支命名法保持一致,fvm list里显示风格统一; - atomgit.com 直连不稳定,本机通过本地代理访问(按自己环境改端口):
export HTTP_PROXY=http://127.0.0.1:1087
export HTTPS_PROXY=http://127.0.0.1:1087
export ALL_PROXY=socks5://127.0.0.1:1080
还有一个高频混淆点:fvm 4.x 的缓存目录是
~/fvm/versions(注意不是~/.fvm)。
fork 列表、所有 SDK 元数据都在这里。如果你在~/.fvmrc或~/.fvm/下找不到 fork 配置,
不是配置丢了,是看错了地方——以fvm list首行打印的Cache directory为准。
2.3 第三步:首次初始化
克隆下来的是源码,还不是能用的 SDK。进目录跑一次版本命令,触发首次初始化:
cd ~/fvm/versions/ohos/oh-3.47.5-release
bin/flutter --version
首次运行会依次做三件事(全程需要网络):
Resolving dependencies...:解析packages/flutter_tools的依赖;- 从
bin/internal/dart-sdk-url.ohos指定的地址下载定制 Dart SDK——官方 dart-sdk 的dart:ffi缺少Abi.ohosArm等鸿蒙 ABI,必须用定制版(第 1 篇 1.3 节接缝③埋的坑在这里兑现); Building flutter tool...:编译 flutter_tools。
实测耗时约 70 秒。两个注意点:
日志停在下载条是正常现象,看进度可以
ls bin/cache确认 Dart SDK 是否落地。
不要中途 Ctrl-C——bin/cache留下半成品,下次启动会重新下载,白等一轮。
2.4 第四步:必经的修复——flutter_tools 的 SSH 依赖 URL
如果 bin/flutter --version 卡在 Resolving dependencies... 或直接失败,先查 packages/flutter_tools/pubspec.yaml 里有没有 SSH 地址的依赖:
rg -n "git@|atomgit" packages/flutter_tools/pubspec.yaml
记录中 3.47.5-ohos-1.0.0 的真实问题:pubspec 里有两处依赖写成了 SSH 地址:
url: git@atomgit.com:hxa-flutter/fluttertpc_dart_native.git
本机 git 对 atomgit 没有可用的 SSH 凭据,依赖解析因此失败。处理方式是把两处都换成 HTTPS(fluttertpc_dart_native 是 Dart FFI 与原生资产构建相关的包集合):
# patch_pubspec.py:把 SSH 依赖 URL 换成 HTTPS
path = 'packages/flutter_tools/pubspec.yaml'
src = open(path).read()
old = "url: git@atomgit.com:hxa-flutter/fluttertpc_dart_native.git"
new = "url: https://atomgit.com/hxa-flutter/fluttertpc_dart_native.git"
assert src.count(old) == 2, src.count(old) # 确认恰好两处,防止漏改
src = src.replace(old, new)
open(path, 'w').write(src)
print('patched 2 URLs')
改完重跑 bin/flutter --version,即可完成初始化。
注意:这个 patch 只改本地缓存目录里的 pubspec,不影响仓库本身;
如果上游在后续 tag 里修掉了 SSH URL,这个步骤自然消失。
2.5 第五步:验证并接入 fvm
初始化完成后,fvm 应该已经认出了这个新 SDK:
fvm list
如果 oh-3.47.5-release 没出现,检查两点:目录是否在 ~/fvm/versions/ohos/ 下、目录名是否符合 fvm 的版本识别规则。然后在项目里切换:
cd <你的项目目录>
fvm use ohos/oh-3.47.5-release
cat .fvmrc
.fvmrc 应写入:
{
"flutter": "ohos/oh-3.47.5-release"
}
最终版本元数据(bin/cache/flutter.version.json,真实记录):
{
"frameworkVersion": "3.47.5-ohos-1.0.0",
"repositoryUrl": "https://atomgit.com/oh-flutter/flutter_flutter.git",
"frameworkRevision": "39481acce8b9e6bb902714e6705c8baf75662d49",
"frameworkCommitDate": "2026-09-23 17:16:41 +0800",
"engineRevision": "af7e796e161ae0bb1ff0758c71a7105418bd9ded",
"engineContentHash": "ab598368592da0064197e2bc15c7f5b0a2c6bb1f",
"dartSdkVersion": "3.13.4",
"devToolsVersion": "2.60.0"
}
flutter --version 侧的输出(真实记录):
Flutter 3.47.5-ohos-1.0.0 • channel [user-branch] • https://atomgit.com/oh-flutter/flutter_flutter.git
Framework • revision 39481acce8 (2 weeks ago) • 2026-09-23 17:16:41 +0800
Engine • hash ab598368592 (revision af7e796e16) • 2026-09-16 18:35:09.000Z
注意 repositoryUrl 已经指向 atomgit/oh-flutter——同一台机器上,CPF-Flutter 分支装的 3.44 线和 oh-flutter tag 装的 3.47 线共存互不干扰,按项目 .fvmrc 各走各的。
三、仓库内部:值得认识的版本坐标文件
SDK 装好之后,有几个文件是排查版本问题的「坐标」。以本机 ~/fvm/versions/ohos/oh-3.47.5-release/ 为例:
~/fvm/versions/ohos/oh-3.47.5-release/
├── CHANGELOG_OHOS.md # ohos 专属适配变更日志(升级前必读)
├── version # 纯文本版本号,如 3.47.5-ohos-1.0.0
├── bin/
│ ├── flutter # 本 SDK 自己的 flutter 入口
│ └── internal/
│ ├── engine.version # 上游引擎提交
│ ├── engine.ohos.version # ohos 定制引擎提交(与上游不同)
│ ├── engine.ohos.har.version
│ └── dart-sdk-url.ohos # 定制 Dart SDK 下载地址
└── bin/cache/flutter.version.json
各文件的排查用途:
| 文件 | 作用 | 什么时候看它 |
|---|---|---|
bin/cache/flutter.version.json | 最权威的版本元数据 | 判断「这个 SDK 到底是什么版本」的第一站 |
version | 纯文本版本号 | 快速确认,不用解析 JSON |
bin/internal/engine.version | 上游引擎提交号 | 只用来对照上游,不要拿它评价 ohos 引擎 |
bin/internal/engine.ohos.version | ohos 定制引擎提交号 | 引擎相关行为异常的排查入口 |
bin/internal/dart-sdk-url.ohos | 定制 Dart SDK 下载地址 | 初始化卡在 Dart SDK 下载时看它 |
CHANGELOG_OHOS.md | ohos 侧每个补丁改了什么 | 升级前做版本决策的权威清单 |
3.1 dart-sdk-url.ohos:定制 Dart SDK 的来源
dart-sdk-url.ohos 每行一条 <zip名>:<url> 形式的下载映射,2.3 节首次初始化下载定制 Dart SDK 就是按它拉的地址。理解这个文件能回答一个高频问题:
「为什么我的鸿蒙 Flutter 里
dart:ffi能拿到Abi.ohosArm64,官方版本不行?」
答案链路:官方 dart-sdk 的 Abi 枚举没有鸿蒙 ABI → fork 从 Dart 源码构建了一份带 Abi.ohosArm/ohosArm64/ohosX64 的定制 SDK → 地址写进 dart-sdk-url.ohos → 每次初始化按地址下载。所以定制 Dart SDK 是下载来的二进制工件,不是源码编译的——这也意味着它和引擎工件一样,存在「重发了没换地址/标记,用户侧静默用旧货」的风险(生产侧细节见第 7、8 篇)。
四、版本核验:三层方法与逐字段判据
4.1 三层核验(从快到准)
第 1 篇 5.4 节给过「装完三步自检」,手动 bootstrap 装完同样适用,这里把判据说得更具体:
- fvm 层:
fvm list能看到ohos/oh-3.47.5-release,且项目.fvmrc绑定正确——确认「fvm 认出了它」; - flutter 层:
fvm flutter --version横幅里frameworkVersion与 tag 一致——确认「跑起来的是它」; - 元数据层:
bin/cache/flutter.version.json逐字段核对(4.2 节)——确认「它内部装的每个组件都是预期的」。
fvm list
fvm flutter --version
cat ~/fvm/versions/ohos/oh-3.47.5-release/bin/cache/flutter.version.json
4.2 逐字段判据
| 字段 | 期望值(3.47.5-ohos-1.0.0 实例) | 判断 |
|---|---|---|
frameworkVersion | 3.47.5-ohos-1.0.0 | 与目标 tag 完全一致 |
repositoryUrl | https://atomgit.com/oh-flutter/flutter_flutter.git | 来源仓库正确 |
frameworkRevision / frameworkCommitDate | 39481acce8 / 2026-09-23 | 与 tag 指向的提交一致 |
engineRevision / engineContentHash | af7e796e16 / ab59836859... | ohos 定制引擎,不与上游 engine 对比 |
dartSdkVersion | 3.13.4 | 与上游 3.47 对应的 Dart 大版本一致 |
devToolsVersion | 2.60.0 | 同步成功的旁证 |
上游参照(官方对应关系,本机实测):
| 上游 Flutter | Dart | DevTools |
|---|---|---|
| 3.47.x | 3.13.4 | 2.60.0 |
三条判据总结:
frameworkVersion对 tag → 框架层同步成功;dartSdkVersion与上游大版本一一对应 → Dart 层同步成功;engineRevision是独立的 ohos 值 → 引擎是定制版(正常),异常与否要看行为验证(第 6 章)。
4.3 两个容易误读的细节
细节一:Engine 行有两套坐标。 回看 2.5 节的横幅输出:
Engine • hash ab598368592 (revision af7e796e16) • 2026-09-16 18:35:09.000Z
同一个引擎被两套坐标描述:hash ab598368592 是引擎内容哈希(对应 flutter.version.json 的 engineContentHash),revision af7e796e16 是引擎提交号(对应 engineRevision)。两者一个管「构建内容」,一个管「源码提交」,排查引擎工件问题时先确认对方报的是哪套坐标,避免对不上号。
细节二:channel [user-branch] 不是报错。 横幅里的 channel [user-branch] 表示这个 SDK 不是从官方渠道(stable/beta/master)装的,而是来自用户指定的分支/tag——对 ohos 分叉来说这是预期形态,看到它不用怀疑装错了。
五、升级验证:pub 解析与切换注意
5.1 回到最初的项目:pub get 应该过了
装新 SDK 不是目的,解决版本墙才是。切回最初卡住的项目验证:
cd <卡住的项目目录>
fvm use ohos/oh-3.47.5-release
fvm flutter pub get
判定标准只有一个:不再出现 version solving failed,依赖解析通过。如果换了 SDK 还失败,先排除两件小事:
- 确认
fvm flutter --version在该项目目录下显示的就是新版本(.fvmrc没切对是最常见原因); - 旧的
.dart_tool解析结果已作废,pub get会全量重解,耗时比平时长属正常。
5.2 大版本切换的三个注意点
3.44 → 3.47 跨了一个大版本,Dart 从 3.13.x 跟进到 3.13.4,切换后留意:
- 依赖重解:第三方包/插件可能要求重新适配或存在 API 变更,
pub get通过不等于flutter analyze通过,建议跟一遍静态检查; - 引擎不对比上游:
engine.ohos.version与上游engine.version故意不同,拿上游引擎号「对版本」是错误姿势; - 先读
CHANGELOG_OHOS.md:它列出 ohos 侧每个补丁改了什么(例如某版本修了 PlatformView 点击坐标、GPU 资源回收、输入法弹起回调),升级决策可以完全基于它做:需要哪个修复/能力 → 找到含该条目的版本 → 用对应 tag 装。
六、大版本升级后的异常分诊
跨大版本升级后,如果运行出现异常,先按症状分诊,别盲目回滚。下面是整理过的分诊图(消费侧最常遇到前两行):

上图是完整的「升级后异常 → 按症状分诊」速查。消费侧视角压缩成一张表:
| 症状 | 第一动作 | 展开篇目 |
|---|---|---|
Wrong full snapshot version(snapshot 版本错) | flutter clean + 删 .dart_tool/flutter_build,配套重新生成 AOT / 平台 dill | 本篇 5.2(依赖重解) |
| 启动即崩(早期 SIGSEGV) | 查 FFI ABI 定义(Dart / frontend / C++ / OHOS 注册顺序) | 第 10 篇 |
Impeller 黑屏(format(0) / Submit failed) | 查 PixelFormat 映射与 swapchain,别猜 Dart 层问题 | 第 10 篇 |
| 渲染空白(文字/图标消失) | 字体端口三档在位检查,nm -D 数未定义符号 | 第 10 篇 |
| 收尾验收 | 三档(debug/profile/release)都要跑;模拟器通过 ≠ 真机通过 | 第 3 篇(消费侧)、第 10 篇(生产侧) |
口径:拿到「模拟器通过」不等于「真机通过」——真机才是基线。
消费侧若只跑模拟器,至少保证 debug 档在真机/模拟器各冒烟一次,再谈验收。
七、常见问题 FAQ
7.1 踩坑速查
| # | 现象 | 原因 | 处理 |
|---|---|---|---|
| CP1 | curl 抓 release 页面挂起 | release 页是 JS 渲染 SPA,HTML 里没有下载链 | 用 git ls-remote --tags + git clone --branch(2.1 节) |
| CP2 | timeout 命令 not found | macOS 无 GNU coreutils 的 timeout | 后台进程 + sleep + kill 手工限时(2.1 节) |
| CP10 | fvm list 看不到新装 SDK | 目录不在 ~/fvm/versions/ohos/ 或名字不符合识别规则 | 按 fvm 扫描规则放目录、起版本名(2.2 节) |
| CP6 | 首次初始化卡在 Resolving dependencies | flutter_tools pubspec 有 SSH 依赖 URL | 两处换成 HTTPS 后重跑(2.4 节) |
| CP7 | 中断后重跑更慢 | bin/cache 半成品触发重新下载 | 首次初始化别 Ctrl-C,耐心等完(2.3 节) |
| CP13 | AtomGit 直连慢/卡 | 网络与代理 | 设 HTTP_PROXY/HTTPS_PROXY/ALL_PROXY(2.2 节) |
| CP14 | 切了 SDK 还 version solving failed | .fvmrc 没切对 / 旧 .dart_tool 缓存 | 确认 fvm flutter --version,重跑 pub get(5.1 节) |
7.2 现在应该 bootstrap 哪个版本?
当前推荐 3.47.8-ohos-1.0.0,步骤与本文的 3.47.5 实例相同;只需把 tag、目录名与输出中的版本号同步替换。若不确定 tag 是否存在,先用 git ls-remote --tags 确认。
7.3 首次初始化卡在 Resolving dependencies 怎么办?
这是 flutter_tools 的 pubspec 里存在 SSH 依赖 URL 导致的,按 2.4 节把两处改成 HTTPS 后重跑。不要在中途频繁 Ctrl-C,半成品 bin/cache 会触发重新下载。
7.4 装完 fvm list 看不到 SDK?
检查目录是否位于 ~/fvm/versions/ohos/、目录名是否以 oh- 开头;然后在项目里 fvm use ohos/oh-3.47.8-release,用 fvm flutter --version 确认实际版本。
7.5 DevEco Studio / API 版本要求?
本文验证使用 DevEco Studio 26.0.0 Release + OpenHarmony SDK/API 26。DEVECO_SDK_HOME 指向 .../Contents/sdk,JAVA_HOME 指向 DevEco 内置 JBR;完整配置见文首环境搭建指导。
八、系列导航
本文是「鸿蒙Flutter框架 0day适配实战」系列的第 2 篇。全系列 10 篇,背景内容已并入第 1 篇开头,不再单独成篇:
| # | 篇目 | 侧 | 一句话主题 |
|---|---|---|---|
| 01 | 背景、分叉谱系、版本命名与 fvm fork 安装 | 消费 | 三层架构、三个接缝、七层工作量、路径 A、版本墙 |
| 02 | 手动 bootstrap tag 版本与三层核验(本篇) | 消费 | tag 探测、浅克隆、首次初始化、SSH 修复、异常分诊 |
| 03 | 鸿蒙模拟器/真机跑 Flutter + 消费侧踩坑集 | 消费 | 工具链三件套、HAP 构建/安装/运行、占位签名、截图取证、CP1-CP14 |
| 04 | flutter build hap 自动签名 | 消费 | P12/CSR、AGC 证书与 Profile、纯 Dart AES-GCM、C0-C10 复用 |
| 05 | 上游同步总览、BC 全景与端到端 SOP | 生产 | 批次解剖、五阶段验证门、12 项适配表、端到端 SOP 与 P1-P29 索引 |
| 06 | Phase 1+2:基线建立与 Framework 适配 | 生产 | 代理 HTTP/1.1 修障、421 文件重打、Dart SDK 源码构建 |
| 07 | Phase 3 Engine:三方重放与冲突裁决 | 生产 | 826 文件、15 真冲突两分法、契约对齐 16 项 |
| 08 | 引擎构建链攻防 | 生产 | 依赖树、工具链版本、链接与测试面 27 坑 |
| 09 | 构建发布与产物分发 | 生产 | 版本锁、11 个工件(Dart SDK 双宿主)、11 条覆盖键、换新 tag 铁律 |
| 10 | 验证与真机验收 | 生产 | 三档引擎、设备侧单测、字体图标静默故障 |
配套仓库与文档:
- 分叉仓库(3.41+/3.47 线,本篇主角):atomgit.com/oh-flutter/flutter_flutter
- Dart FFI 与原生资产包集合:atomgit.com/hxa-flutter/fluttertpc_dart_native
总结
本篇把「fvm 装不了 tag」这条边界走通到了底:手动 bootstrap 本质就是「探测 tag → 浅克隆进 fvm 缓存目录 → 首次初始化」三步,中间要顶住 release 页 SPA 和 macOS 无 timeout 两个坑,再处理一次 flutter_tools 的 SSH 依赖 URL;装完用三层核验(fvm 层 / flutter 层 / 元数据层)逐字段确认,frameworkVersion 对 tag、dartSdkVersion 对上游、引擎是独立 ohos 值,三条判据全中才算装对。最后回到最初的版本墙项目重跑 pub get——解析通过,这条线才算真正闭环。
下一篇(第 3 篇)把装好的 SDK 真正跑起来:鸿蒙真机/模拟器环境准备、DevEco 配置、flutter run 到 HAP 的完整链路,以及消费侧 P1-P10 踩坑全收录。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- oh-flutter 分叉仓库(当前 tag 3.47.8-ohos-1.0.0):atomgit.com/oh-flutter/flutter_flutter
- Flutter OH 环境搭建指导:https://atomgit.com/oh-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
- fvm 多版本管理器:github.com/leoafarias/fvm
- Flutter 官方架构文档:docs.flutter.dev 架构概览
- Dart 官方文档:dart.dev
- pub 国内镜像:pub.flutter-io.cn
- Flutter 国内镜像配置说明:docs.flutter.cn(镜像与代理)
- AtomGit 平台:atomgit.com
- 开源鸿蒙跨平台社区:openharmonycrossplatform.csdn.net
环境与版本
本文的示例与截图基于以下环境组合(2026-10 实测):
| 组件 | 版本 | 说明 |
|---|---|---|
| 上游 Flutter SDK | 3.47.8 | github.com/flutter/flutter |
| Flutter SDK(OH 适配版) | 3.47.8-ohos-1.0.0 | oh-flutter/flutter_flutter,oh-3.47-dev 分支 |
| DevEco Studio | 26.0.0 Release | 提供 hvigor / ohpm / hdc / JBR 等工具链 |
| OpenHarmony SDK / API | API 26(26.0.0) | 模拟器与 SDK 均为 API 26 |
| 运行设备 | OpenHarmony 模拟器 | API 26,1280×2832 |
环境搭建(分叉获取、DevEco Studio 与 SDK 配置、模拟器创建)请按官方指导操作:OpenHarmony-flutter 环境搭建指导。
本文命令与终端输出的实录实例是
3.47.5-ohos-1.0.0(该 tag 的完整安装留档);当前安装把 tag、目录名与输出中的版本号换成上表的3.47.8-ohos-1.0.0即可,tag clone、首次初始化与三层核验步骤完全一致。
更多推荐




所有评论(0)