在大型团队协作开发中,如何自动化地构建、测试和发布鸿蒙+Flutter混合应用,是保障迭代效率的关键。本文将探讨如何构建一套高效的流水线。

🌪️ 引言:告别“手工打包”的混乱时代

在鸿蒙与Flutter的混合开发模式下,工程结构往往变得复杂:既有鸿蒙的HAP/HSP模块,又有Flutter的PluginAssets

如果依然依赖开发人员在本地手动执行flutter build hap、手动合并资源、手动上传应用市场,不仅效率低下,还极易出现**“在我机器上是好的”**这种环境不一致问题。

核心痛点

  1. 环境配置繁琐:新成员入职配置Flutter、鸿蒙SDK、JDK、NDK环境耗时长。
  2. 构建版本不一致:本地构建与发布构建容易因参数不同导致Bug。
  3. 多端适配困难:需要同时构建手机、平板、车机等多个版本。

本文将带你搭建一套基于Git触发的自动化CI/CD流水线。


🏗️ 一、 架构设计:混合工程的构建分层

为了实现自动化,我们需要将构建过程解耦为三个阶段:

  1. 准备层(Prepare)
    • 拉取代码。
    • 自动配置构建环境(安装指定版本的Flutter SDK、鸿蒙SDK、NDK)。
    • 依赖安装(npm install, flutter pub get)。
  2. 构建层(Build)
    • Flutter编译:编译Dart代码为AOT,生成libapp.so和资源包。
    • 鸿蒙编译:编译ArkTS/Java代码,打包HAP。
    • 混合组装:将Flutter产物自动注入到鸿蒙工程的指定目录(libsassets)。
  3. 发布层(Deploy)
    • 自动签名(对齐、v1/v2签名)。
    • 生成多端安装包(App Pack或单一HAP)。
    • 自动上传至华为应用市场或内部测试平台。

⚙️ 二、 环境标准化:Docker化构建环境

为了避免“环境地狱”,我们使用Docker容器来封装构建环境。

2.1 编写Dockerfile

构建一个包含鸿蒙DevEco Studio命令行工具、Flutter SDK、Node.js的镜像。

# 使用基础Ubuntu镜像
FROM ubuntu:20.04

# 安装依赖
RUN apt-get update && apt-get install -y wget unzip openjdk-8-jdk

# 安装Node.js和Flutter
RUN wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.19-stable.tar.xz
RUN tar xf flutter_linux_3.19-stable.tar.xz -C /opt

# 安装鸿蒙命令行工具 (hvigor)
# 这里需要下载并配置DevEco Studio的CLI版本
RUN wget [DevEco CLI Download URL]
RUN unzip deveco-cli.zip -d /opt/hvigor

# 设置环境变量
ENV PATH="$PATH:/opt/flutter/bin:/opt/hvigor/bin"
ENV ANDROID_HOME="/opt/android-sdk"
ENV DEVECO_HOME="/opt/hvigor"

# 验证安装
RUN flutter --version
RUN hvigor --version
2.2 在CI工具中调用

在Jenkins/GitLab CI/Gitee Go中,指定使用该Docker镜像作为构建节点,确保每次构建环境绝对一致。


📦 三、 核心实战:自动化构建脚本

混合工程的难点在于**“如何自动触发鸿蒙打包并注入Flutter代码”**。

3.1 自动化构建脚本 (Shell/Python)

编写一个build_harmony.sh脚本,由CI工具调用。

#!/bin/bash
echo "🚀 开始构建鸿蒙+Flutter混合应用..."

# 1. 进入Flutter模块,构建鸿蒙专用产物
cd flutter_module
flutter build hap --target-platform=arm64-v8a --release

# 2. 复制Flutter产物到鸿蒙原生工程的指定目录
# 这是关键步骤:将libapp.so和assets复制到鸿蒙的libs和src/main/resources目录
cp build/intermediates/flutter/release/flutter_assets ../native_app/entry/src/main/resources/
cp build/intermediates/ndk/release/libflutter.so ../native_app/entry/libs/arm64-v8a/

echo " Flutter产物已注入鸿蒙工程"

# 3. 进入鸿蒙原生工程,执行最终打包
cd ../native_app
# 使用hvigor命令行进行构建
hvigor build -p module=entry@default --mode=release

# 4. 自动签名 (使用apksigner或鸿蒙专用签名工具)
java -jar signer.jar --input app.hap --output app-signed.hap --keystore myreleasekey.jks

echo " 构建与签名完成!"

🧪 四、 质量门禁:自动化测试与扫描

在流水线中加入质量检查点,防止低级错误流入生产环境。

  1. Dart代码扫描
    • 使用flutter analyze检查Dart代码的静态警告。
  2. 鸿蒙代码扫描
    • 使用DevEco Studio自带的Inspection工具或集成CheckStyle/PMD扫描ArkTS/Java代码。
  3. 自动化UI测试
    • 利用鸿蒙的hdc命令行工具,连接远程真机或模拟器,自动安装HAP并运行Flutter的集成测试(flutter drive)或鸿蒙的UI测试脚本。

📱 五、 多端分发策略

利用鸿蒙的App Pack机制,实现一套流程构建多端包。

  • 策略
    • 在CI流水线中,配置不同的构建参数(如--product-flavor phone--product-flavor car)。
    • 自动构建出针对手机、平板、车机的不同HAP包,并打包成一个App Pack上传至应用市场。
    • 收益:运维人员只需维护一套流水线,即可覆盖全生态设备。

📌 六、 总结

对于鸿蒙+Flutter混合项目,**“自动化”**是项目成功的基石。

通过构建CI/CD流水线,我们实现了:

  1. 环境一致性:Docker容器消除了环境差异。
  2. 构建标准化:脚本化构建杜绝了人为操作失误。
  3. 交付高速化:从代码提交到生成安装包,仅需几分钟。

建议
无论你的团队规模多小,都应该尽早引入自动化构建脚本。不要把时间浪费在重复的手工劳动和环境配置上。

点赞 ▲ 收藏 ⭐ 评论 💬

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐