Flutter 与开源鸿蒙(OpenHarmony)工程化实践:CI/CD、性能监控与多端发布
作者 :子榆.
平台 :CSDN
日期:2025年12月15日
引言
在前两篇文章中,我们分别探讨了 Flutter 在 OpenHarmony 上的基础运行能力 和 深度集成分布式系统能力 。然而,当项目从"Demo"走向"生产",开发者面临的挑战远不止功能实现------如何高效构建、自动化测试、持续交付、监控性能?
本文聚焦 工程化落地 ,手把手搭建一套适用于 Flutter + OpenHarmony 混合项目的现代化 DevOps 流程,涵盖:
- 自动化编译与 HAP 打包
- 多设备模拟器测试
- 性能指标埋点与上报
- 一键发布到不同 OpenHarmony 设备类型(手机/平板/车机)
所有方案均基于 开源工具链,无需商业授权,适合中小企业与个人开发者。
一、为什么需要工程化?
| 阶段 | 问题 | 工程化方案 |
|---|---|---|
| 开发 | 手动编译耗时、易出错 | 自动化脚本 + CI |
| 测试 | 仅在单设备验证 | 多设备并行测试 |
| 发布 | 手动拖拽 HAP 安装 | 自动签名 + 分发 |
| 运维 | 崩溃无日志、卡顿难定位 | 性能监控 SDK |
🎯 目标 :让 Flutter 应用在 OpenHarmony 上具备 企业级交付能力。
二、项目结构设计(工程友好型)
采用 模块化分层架构,便于 CI/CD 与团队协作:
flutter_ohos_enterprise/
├── apps/
│ └── flutter_ui/ # Flutter 业务代码(纯 Dart)
├── platforms/
│ └── ohos/ # OpenHarmony 平台适配层
│ ├── entry/ # HAP 主模块(含 Ability)
│ ├── plugins/ # 自定义 HAR 插件(如 camera_ohos, ble_ohos)
│ └── build_scripts/ # 编译脚本
├── scripts/
│ ├── build_flutter.sh # 编译 Flutter AOT
│ ├── package_hap.sh # 打包 HAP
│ └── run_tests.sh # 自动化测试
├── ci/
│ └── workflow.yaml # GitHub Actions / Jenkins 脚本
└── monitoring/
└── ohos_perf_sdk/ # 性能监控 SDK(自研)
✅ 优势:Flutter 代码与 OHOS 平台解耦,可独立升级。
三、自动化构建:从 Dart 到 HAP
3.1 编译 Flutter AOT(针对 OpenHarmony)
由于官方 Flutter 不支持 ohos 平台,需使用社区移植版或自定义 embedder。
bash
# scripts/build_flutter.sh
#!/bin/bash
set -e
FLUTTER_ROOT="/path/to/flutter_ohos"
PROJECT_ROOT=$(pwd)
# 1. 构建 AOT 快照(arm64)
$FLUTTER_ROOT/bin/flutter build aot \
--target-platform=ohos-arm64 \
--release \
--output-dir=$PROJECT_ROOT/platforms/ohos/entry/src/main/resources/rawfile
# 2. 复制 assets
cp -r $PROJECT_ROOT/apps/flutter_ui/flutter_assets \
$PROJECT_ROOT/platforms/ohos/entry/src/main/resources/rawfile/
🔧 注意:
rawfile是 OpenHarmony 存放原生资源的目录,Flutter Engine 会从此加载libapp.so和资源。
3.2 打包 HAP(使用 hvigor)
bash
# scripts/package_hap.sh
cd platforms/ohos
hvigorw assembleHap -p product=default -p buildMode=release
cp outputs/default/entry-default-signed.hap ../../dist/app-ohos-release.hap
✅ 输出:
dist/app-ohos-release.hap可直接安装。
四、CI/CD 实践:GitHub Actions 自动化流水线
4.1 .github/workflows/ohos_build.yml
yaml
name: Build & Test OpenHarmony App
on:
push:
branches: [ main ]
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Java & Node
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup DevEco CLI
run: |
wget https://.../deveco-cli-linux-x64.tar.gz
tar -xzf deveco-cli-linux-x64.tar.gz
echo "$PWD/deveco-cli/bin" >> $GITHUB_PATH
- name: Build Flutter AOT
run: ./scripts/build_flutter.sh
- name: Package HAP
run: ./scripts/package_hap.sh
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: ohos-hap
path: dist/app-ohos-release.hap
🌐 替代方案:Jenkins、GitLab CI 同理,只需安装 DevEco CLI。
五、自动化测试:多设备并行验证
OpenHarmony 提供 hdc(Harmony Device Connector)命令行工具,可控制多个模拟器。
5.1 启动多个模拟器
bash
# 启动手机和平板模拟器
hdc shell bm dump -a | grep "com.example" # 检查已安装应用
5.2 自动化 UI 测试(基于 Flutter Driver)
虽然 OpenHarmony 不支持原生 Flutter Driver,但可通过 自定义 HTTP 接口实现简单自动化:
dart
// test_driver/app.dart
import 'package:flutter_driver/driver_extension.dart';
import 'package:flutter_ohos_demo/main.dart' as app;
void main() {
enableFlutterDriverExtension();
app.main();
}
⚠️ 当前限制:需在 OHOS 上运行一个轻量 HTTP 服务接收指令(社区方案正在完善)。
5.3 替代方案:截图比对 + 日志校验
bash
# scripts/run_tests.sh
hdc shell aa start -b com.example.flutter_ohos -n EntryAbility
sleep 5
hdc shell snapshot_display > /tmp/screenshot.png
# 使用 OpenCV 比对关键区域(如是否显示"Hello")
六、性能监控:打造 Flutter on OHOS 的"健康仪表盘"
6.1 监控指标
| 指标 | 采集方式 |
|---|---|
| 启动时间 | WidgetsBindingObserver + NAPI 获取系统时间 |
| FPS | FrameTiming API(需引擎支持) |
| 内存占用 | ProcessInfo + /proc/self/status |
| 崩溃日志 | Dart Error Zone + OHOS HiLog |
6.2 自研监控 SDK 示例
dart
// monitoring/ohos_perf_sdk/lib/perf_monitor.dart
import 'dart:io';
import 'package:flutter/services.dart';
class PerfMonitor {
static void init() {
// 上报启动时间
final startTime = DateTime.now().millisecondsSinceEpoch;
WidgetsBinding.instance.addPostFrameCallback((_) {
final loadTime = DateTime.now().millisecondsSinceEpoch - startTime;
_reportMetric('app_load_time_ms', loadTime);
});
// 捕获未处理异常
FlutterError.onError = (details) {
_reportCrash(details.toString());
};
}
static void _reportMetric(String key, dynamic value) {
MethodChannel('ohos.perf').invokeMethod('logMetric', {'key': key, 'value': value});
}
static void _reportCrash(String error) {
MethodChannel('ohos.perf').invokeMethod('logCrash', error);
}
}
在 main() 中初始化:
dart
void main() {
PerfMonitor.init();
runApp(MyApp());
}
6.3 OHOS 端日志聚合
通过 NAPI 将指标写入 HiLog,并定期上传到服务器:
cpp
// perf_napi.cpp
void LogMetric(const char* key, int value) {
HILOG_INFO(LOG_APP, "PerfMetric: %{public}s=%{public}d", key, value);
// 可扩展:写入文件 or HTTP 上报
}
七、多端发布:一套代码,三种设备
OpenHarmony 支持 一次开发,多端部署 。我们通过 条件编译 + 资源适配 实现:
7.1 设备类型判断(Dart 层)
dart
Future<String> getDeviceType() async {
final String info = await MethodChannel('ohos.device').invokeMethod('getDeviceType');
return info; // 返回 "phone", "tablet", "car"
}
7.2 动态 UI 适配
dart
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: getDeviceType(),
builder: (context, snapshot) {
if (!snapshot.hasData) return const CircularProgressIndicator();
switch (snapshot.data) {
case 'car':
return CarDashboardUI(); // 车机大屏布局
case 'tablet':
return TabletLayout(); // 平板分栏布局
default:
return PhoneLayout(); // 手机竖屏布局
}
},
);
}
7.3 HAP 多包输出
在 build-profile.json5 中配置多设备构建:
json
{
"products": [
{
"name": "phone",
"compatibleSdkVersion": 10,
"targetDevice": "phone"
},
{
"name": "car",
"compatibleSdkVersion": 10,
"targetDevice": "car"
}
]
}
执行:
bash
hvigorw assembleHap -p product=phone
hvigorw assembleHap -p product=car
输出两个 HAP,分别用于不同设备。
、总结与建议
八
| 能力 | 推荐方案 |
|---|---|
| 构建 | 自定义脚本 + hvigor |
| 测试 | hdc + 截图比对(暂无完整 Driver) |
| 监控 | 自研 SDK + HiLog |
| 发布 | 多 product 配置 + 自动签名 |
🚀 行动建议:
- 将
scripts/目录纳入版本控制- 在 CI 中加入代码规范检查(如 dart format)
- 建立内部 HAP 分发平台(类似 Firebase App Distribution)
结语
Flutter 与 OpenHarmony 的结合,正从"技术可行性"迈向"工程成熟度"。通过本文的工程化实践,你已掌握 构建、测试、监控、发布 的全链路能力。未来,随着官方工具链的完善,这一流程将更加标准化。
🔗 项目模板地址 :https://gitee.com/yourname/flutter_ohos_enterprise_template
💬 互动 :你们团队是如何做 OpenHarmony 应用发布的?欢迎分享经验!
👍 觉得实用?点赞 + 收藏 + 关注,不错过下一期《Flutter + OpenHarmony 安全加固指南》!
配图清单(实际发布时替换为真实图片):
- 项目结构树状图
- GitHub Actions 流水线成功截图
- 多设备 UI 对比图(手机/平板/车机)
- 性能监控数据看板
- hdc 多设备管理终端截图
欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。