Blog

Blog

PHODAL

在 GitHub Action 上构建 HarmonyOS 应用

最近在给 AutoDev 添加 HarmonyOS 相关功能的时候,在添加了一些功能之后,发现还需要添加 CI/CD 相关的功能。于是,便花了半个下午的时间,添加了对应的示例,以在 GitHub 上构建出 HarmonyOS 的 hap 应用。

最后代码见:https://github.com/harmonyos-dev/harmonyos-github-action-example

HarmonyOS 构建流程分析

在 DevEco Studio 构建应用时,会执行:

./node_modules/.bin/hvigor --mode module -p product=default assembleHap

所以,我的初次判断只需要探索如何结合 Node.js 来构建即可。

  1. 查找依赖。结合 oh-package.json5 找到了一些依赖信息。
  2. 构建工具。OpenHarmony 的文档:https://ohpm.openharmony.cn/#/cn/help/quickstart
  3. 详细依赖信息。在官方文档找到了两个对应的构建工具信息:@ohos/hvigor, @ohos/hvigor-ohos-plugin

然后就开始使用 Node.js 手动构建项目了。

步骤一:获取 HarmonyOS SDK

由于 HarmonyOS SDK 需要登陆后下载 SDK,所以我上传一份到 GitHub:https://github.com/harmonyos-dev/hos-sdk

随后,在 GitHub Action 下载 SDK。感谢 OpenAI 生成的下载代码:

# 获取 release 的信息
RELEASE_JSON=$(curl -s -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/harmonyos-dev/hos-sdk/releases/latest)

# 从 release 的信息中提取需要的 asset URL
ASSET_URL=$(echo "$RELEASE_JSON" | jq -r '.assets[] | select(.name | test("commandline-tools-mac-2.0.0.2.zip")) | .browser_download_url')

# 输出 asset URL
echo "Asset URL: $ASSET_URL"

# 下载 release asset
curl -LJO "$ASSET_URL"

步骤二:安装 HarmonyOS SDK

在这个步骤,遇到两个问题:

  1. GitHub Action 在国外,没有 country 相关配置,所以会下载不到 SDK。
  2. 需要 --accept-license 参数来自动同意 license。
# for handle Failed to request url https://devecostudio-dre.op.hicloud.com/sdkmanager/v5/hos/getSdkList
#[                    ]0%  
export JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -Duser.country=CN"

chmod +x command-line-tools/sdkmanager/bin/sdkmgr
# 安装 HarmonyOS SDK
command-line-tools/sdkmanager/bin/sdkmgr install toolchains:9 OpenHarmony/toolchains:9 --accept-license

步骤三:Node.js 构建 HarmonyOS 应用

在这个步骤,遇到两个问题:

  1. 需要配置好 npm registry
  2. 需要配置 SDK 路径。
npm init -y
npm config set @ohos:registry=https://repo.harmonyos.com/npm/
npm install @ohos/hvigor@2.4.2 @ohos/hvigor-ohos-plugin@2.4.2
# for ERROR: Unable to find 'hwsdk.dir' in 'local.properties' or 'HOS_SDK_HOME' in the system environment path.
export HOS_SDK_HOME=$(pwd)/hwsdk
./node_modules/.bin/hvigor --mode module -p product=default assembleHap --no-daemon

其它

最后再代码:https://github.com/harmonyos-dev/harmonyos-github-action-example


或许您还需要下面的文章:

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

标签