最近把手里一个 Flutter 项目往 OpenHarmony 设备上搬了一遍,从环境准备、创建工程、签名配置到 HAP 编译打包、真机安装,整套流程走下来,发现最耗时间的反而不是 Dart 代码适配,而是构建和签名链路。网上关于 Flutter for OpenHarmony 的资料不算少,但大多停在“能跑 Hello World”,真正走到“能出包、能签名、能装真机”这一步的完整记录不多。这篇就按我实际落地的顺序,把签名、HAP 编译打包和真机发布这条链路完整讲透,给准备踩坑的人一个参考。
1. 从“能跑”到“能发”:Flutter for OpenHarmony 的工程落地本质
1.1 这套工具链到底解决什么问题
Flutter for OpenHarmony 通俗点说,就是 Flutter 官方生态之外,由 OpenHarmony 社区 SIG 维护的一套平台适配分支。它复用了 Flutter 的引擎和 Dart 框架层,把渲染、事件、平台通道这些能力桥接到 OpenHarmony 的底层能力上,让开发者可以继续用熟悉的 Widget 写界面,用 Dart 写业务逻辑,最终产物是一个可以在 OpenHarmony 设备上安装运行的 HAP 包。
这套方案解决的核心痛点很清楚:OpenHarmony 的应用生态还在起步阶段,原生开发要学 ArkTS、ArkUI 一套新东西,而 Flutter 开发者已经积累了大量的跨平台代码和组件库。通过 Flutter for OpenHarmony,一个项目可以同时输出 Android、iOS、OpenHarmony 等多个平台的包,业务逻辑几乎不用动,UI 层也能复用大部分代码。对于团队来说,这意味着不需要单独养一支 OpenHarmony 原生开发队伍,就能把产品快速铺到 OpenHarmony 设备上。
不过这里要提前打个预防针:这套工具链和标准 Flutter 不是同一个版本节奏,SDK 是独立分支,插件生态也还没有完全对齐,所以落地时首要任务不是写业务,而是把工程脚手架、签名、构建产物这一条链路跑通。等这条链路稳了,后续业务迭代就是纯 Flutter 开发体验了。
1.2 为什么打包流程和 Android 完全不一样
很多 Flutter 开发者第一次接触 OpenHarmony 打包时,会下意识地拿 Android 的套路套上去,结果对接不上。两者的工程模型和构建链路差得不是一星半点。
| 维度 | Android | OpenHarmony |
|---|---|---|
| 安装包格式 | APK | HAP |
| 构建工具 | Gradle | hvigor |
| 签名工具 | apksigner / jarsigner | hap-sign-tool |
| 调试安装工具 | adb | hdc |
| 应用入口模型 | Activity / Service | Ability |
| 工程配置文件 | build.gradle | build-profile.json5、module.json5 |
从表格能看出来,OpenHarmony 不是“换了个包后缀的 Android”,它从应用模型到构建体系都是独立设计的。具体到 Flutter 工程里,一个 Flutter for OpenHarmony 项目会多出一个 ohos/ 目录,里面是完整的 OpenHarmony 壳工程,用 DevEco Studio 打开这个目录,才能真正执行 HAP 的编译打包。
签名也完全不是一回事。Android 的签名主要是 jarsigner 或 apksigner 对 APK 做数字签名,OpenHarmony 则是用 hap-sign-tool 对 HAP 做签名,并且签名时不仅有证书,还有一个 Profile 文件参与校验。很多人卡在“签名”这一步,就是因为不清楚这个 Profile 文件到底是干什么的。
所以接下来的内容,我会按工程落地的顺序,先把签名体系讲清楚,再走一遍编译打包和真机发布,最后把所有我踩过的坑整理成速查表。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手前的工程准备与签名体系解析
2.1 环境版本对齐:三个关键 SDK 一个都不能差
Flutter for OpenHarmony 的工程落地,环境准备阶段最容易出问题的是版本不匹配。这里涉及三个层级:DevEco Studio、OpenHarmony SDK、Flutter SDK 适配分支。这三者各自有版本,且互相之间有兼容约束,不是随便装最新版就能跑通的。
我建议的顺序是:先确定 Flutter SDK 分支版本,再根据它要求的 OpenHarmony SDK API 版本选择 DevEco Studio。实际操作中,很多人是先装了最新版 DevEco Studio,结果发现 Flutter 分支要求的 API 版本比较旧,SDK 不匹配导致编译直接失败。
常规做法是准备以下环境:
- DevEco Studio:版本建议跟随 OpenHarmony SDK 的配套版本,主要看编译工具链 hvigor 是否匹配。
- OpenHarmony SDK:包含
ohos-sdk,在 DevEco Studio 的 SDK Manager 里可下载,注意 API 版本要和 Flutter 分支的适配版本一致。 - Flutter SDK:使用 OpenHarmony SIG 维护的
flutter_flutter分支,下载后把bin目录加入 PATH,用flutter --version确认分支信息。 - Node.js:hvigor 构建工具基于 Node.js,DevEco Studio 通常会自带,但命令行构建时需要单独配置。
版本对齐还有一个容易忽略的细节:O
