随着 Cocos Creator 新版本的发布,开发者们迎来了一个令人振奋的消息:Cocos Creator 现已支持发布到 HarmonyOS 平台。这为游戏开发者和应用开发者开辟了新的天地,使他们能够利用 HarmonyOS 的强大功能和生态优势,将作品推向更广阔的市场。
然而,传统的手动构建方式在面对频繁的版本迭代和复杂的项目管理时,往往效率低下且容易出错。为了提高开发效率,实现高效、稳定的构建与发布流程,我们迫切需要一种自动化解决方案。
幸运的是,华为官方提供了一套功能强大的命令行工具,包括 hvigor、ohpm、hdc 等,这些工具为自动化构建提供了坚实的基础。借助这些工具,我们可以通过编写脚本,轻松实现自动构建的流程。
本文将详细介绍如何使用 bash
脚本,在 Jenkins 构建平台上实现 HarmonyOS 的自动构建与发布。
在开始之前,我们需要明确构建机的环境配置,以确保整个构建流程能够顺利进行。以下是构建机的环境要求:
~/.bash\_profile
(bash)或 ~/.zshrc
(zsh)中: export PATH=~/command-line-tools/bin:$PATH
配置完成后,使用以下命令使环境变量生效:
source ~/.bash\_profile
或
source ~/.zshrc
hvigor 是一套基于任务管理机制的自动化构建工具,它为 HarmonyOS OS 应用的 JS/eTS 开发场景提供了任务注册编排、编译工程模型管理、编译配置定制以及插件扩展等核心能力。hvigor 的结构化模型由 build-profile.json5
和 hvigorfile.js
组成,其工程结构如下:
rootProject // Hvigor 工程根目录
├── build-profile.json5 // 工程级别 Hvigor 配置,主要配置工程相关信息,包括子模块名字、路径等。
├── hvigorfile.js // 工程级别任务脚本,当前暂不支持自定义
├── moduleA
│ ├── build-profile.json5 // 模块级别 Hvigor 配置,主要模块构建相关参数
│ └── hvigorfile.js // 模块级别任务脚本,当前暂不支持自定义
└── moduleB
├── build-profile.json5 // 模块级别 Hvigor 配置,主要模块构建相关参数
└── hvigorfile.js // 模块级别任务脚本,当前暂不支持自定义
在实际使用中,我们可以通过 hvigorw
命令来调用 hvigor 的功能,其基本使用格式为:
hvigorw [taskNames...] <options>
例如,我们可以使用 hvigorw clean
来清理构建环境,或者使用 hvigorw assembleHap
来生成 HAP 文件。
为了实现自动构建,我们需要编写一个完整的 bash
脚本,该脚本将涵盖从环境配置到最终构建的全过程。以下是脚本的详细内容:
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它在构建过程中用于运行各种工具和脚本。以下是配置 Node.js 的脚本:
init\_Node() {
if [ ! -d "${NODE\_HOME}" ]; then
mkdir "${NODE\_HOME}"
fi
cd ${NODE\_HOME}
wget --no-check-certificate -q "${node下载路径}" -O node-linux.tar.xz #下载node,需要替换node下载路径
tar -vxf node-linux.tar.xz
NODE\_DIR=xxx #node压缩包文件里面的目录
cd ${NODE\_DIR}
mv -f ./\* .[^.]\* ../
cd ..
rm -rf NODE\_DIR node-linux.tar.xz
export NODE\_HOME=${NODE\_HOME}
export PATH=$NODE\_HOME/bin:$PATH
node -v
npm config set registry=https://repo.huaweicloud.com/repository/npm/
npm config set @ohos:registry=https://repo.harmonyos.com/npm/
npm config get @ohos:registry
npm config set proxy=http://user:password@proxy.server.com:port #配置npm http代理,企业网络受限的情况下需要配置
npm config set https-proxy=http://user:password@proxy.server.com:port #配置npm https代理,企业网络受限的情况下需要配置
npm info express
}
JDK(Java Development Kit)是 Java 语言的软件开发工具包,它在构建过程中用于编译和运行 Java 代码。以下是配置 JDK 的脚本:
init\_JDK() {
if [ ! -d "${JAVA\_HOME}" ]; then
mkdir "${JAVA\_HOME}"
fi
cd ${JAVA\_HOME}
wget --no-check-certificate -q "${jdk下载路径}" -O jdk-linux.tar.xz #下载jdk,需要替换jdk下载路径
tar -vxf jdk-linux.tar.xz
JDK\_DIR=xxx #jdk压缩包文件里面的目录
cd ${JDK\_DIR}
mv -f ./\* .[^.]\* ../
cd ..
rm -rf JDK\_DIR jdk-linux.tar.xz
export JAVA\_HOME=${JAVA\_HOME}
export PATH=$JAVA\_HOME/bin:$PATH
java -version
check "JDK install"
}
HarmonyOS SDK 是开发 HarmonyOS 应用的核心工具包,它提供了必要的编译工具和运行时环境。以下是配置 SDK 的脚本:
init\_SDK() {
./${COMMANDLINE\_TOOL\_DIR}/bin/sdkmgr install HarmonyOS-NEXT/DB1 --sdk-directory="/opt/HarmonyOS/SDK/" --accept-license
#设置hdc工具的环境变量,hdc工具在toolchains所在路径下,请以实际路径为准
export PATH=$HDC\_HOME:$PATH
export HDC\_HOME=/opt/HarmonyOS/SDK/HarmonyOS-NEXT-DB1/base/toolchains
export HOS\_SDK\_HOME=${HOS\_SDK\_HOME}
check "SDK install"
}
ohpm 是 HarmonyOS 的包管理工具,用于管理和安装项目依赖。以下是安装 ohpm 的脚本:
init\_ohpm() {
# 初始化ohpm
OHPM\_HOME=${COMMANDLINE\_TOOL\_DIR}/command-line-tools/ohpm
export PATH=${OHPM\_HOME}/bin:$PATH
ohpm -v
# 配置ohpm仓库地址
ohpm config set registry=https://ohpm.HarmonyOS.cn/ohpm/
}
synccode() {
PRO\_PATH=$1; PRO\_NAME=$2; REPO\_URL=$3; BRAN\_NAME=$4;
if [ ! -d $PRO\_PATH ]; then
#新创建 Clone
echo "mkdir $PRO\_PATH && cd $PRO\_PATH && git clone -b $BRAN\_NAME $REPO\_URL $PRO\_NAME && cd $PRO\_NAME"
mkdir $PRO\_PATH && \
cd $PRO\_PATH && \
git clone -b $BRAN\_NAME $REPO\_URL $PRO\_NAME && \
cd $PRO\_NAME
check "Git clone"
else
local NEW\_PATH=${PRO\_PATH}${PRO\_NAME}
if [ ! -d ${NEW\_PATH} ]; then
#新分支 Clone
echo "cd $PRO\_PATH && git clone -b $BRAN\_NAME $REPO\_URL $PRO\_NAME && cd $PRO\_NAME"
cd $PRO\_PATH && git clone -b $BRAN\_NAME $REPO\_URL $PRO\_NAME && cd $PRO\_NAME
else
#原分支 Checkout & Pull
echo "cd $PRO\_PATH$PRO\_NAME && git checkout . && git clean -df && git checkout -B $BRAN\_NAME origin/$BRAN\_NAME && git pull"
cd $PRO\_PATH$PRO\_NAME && \
git checkout . && \
git clean -df && \
git checkout -B $BRAN\_NAME origin/$BRAN\_NAME && \
git pull
if [[ ${VERSION\_FLAG} != "X" ]]; then
echo "checkout 指定版本:${VERSION\_FLAG}"
git checkout ${VERSION\_FLAG}
fi
check "Git checkout & pull"
fi
fi
}
cocosbuild() {
local COCOS\_APP\_PATH="/Applications/CocosCreator/Creator/${COCOS\_VERSION}/CocosCreator.app/Contents/MacOS/CocosCreator"
echo "$COCOS\_APP\_PATH --project $1 --build configPath=./buildConfig/buildConfig\_harmonryos.json"
$COCOS\_APP\_PATH \
--project $1 \
--build configPath=./buildConfig/buildConfig\_harmonryos.json
check "Cocos build"
}
rungulp() {
RES\_VERSION=$1
echo "/usr/local/bin/npm install"
/usr/local/bin/npm install
echo "/usr/local/bin/gulp --ver $RES\_VERSION --platform harmonryos"
/usr/local/bin/gulp --ver $RES\_VERSION --platform harmonryos
echo "rm -rf build/harmonryos/data/assets"
rm -rf build/harmonryos/data/assets
echo "cp -r remote-assets/hall/$RES\_VERSION/assets build/harmonryos/data/"
cp -r remote-assets/hall/$RES\_VERSION/assets build/harmonryos/data/
echo "cp -r remote-assets/hall/$RES\_VERSION/src build/harmonryos/data/"
cp -r remote-assets/hall/$RES\_VERSION/src build/harmonryos/data/
echo "/usr/local/bin/gulp copyCertificate --platform harmonryos"
/usr/local/bin/gulp copyCertificate --platform harmonryos
check "Run Gulp"
}
buildHAP() {
# 根据业务情况适配local.properties
cd ${PROJECT\_PATH}
echo "hwsdk.dir=${HOS\_SDK\_HOME}" > ./local.properties
# 根据业务情况安装ohpm三方库依赖
ohpm\_install "${PROJECT\_PATH}"
ohpm\_install "${PROJECT\_PATH}/entry"
ohpm\_install "${PROJECT\_PATH}/xxx"
# 如果构建过程报错 ERR\_PNPM\_OUTDATED\_LOCKFILE,需要增加配置:lockfile=false, 根据node版本选择设置方式:
# node.version<18
npm config set lockfile=false # 如果执行此命令报错,建议直接在镜像的.npmrc文件中需要增加一行配置:lockfile=false
# node.version>=18
#cat ${HOME}/.npmrc | grep 'lockfile=false' || echo 'lockfile=false' >> ${HOME}/.npmrc
# 根据业务情况,采用对应的构建命令,可以参考IDE构建日志中的命令
cd ${PROJECT\_PATH}
chmod +x hvigorw
./hvigorw clean --no-daemon
./hvigorw assembleHap --mode module -p product=default -p debuggable=false --no-daemon # 流水线构建命令建议末尾加上--no-daemon
check "Hap Build"
}
install\_hap() {
hdc file send "${PROJECT\_PATH}/entry/build/default/outputs/default/entry-default-signed.hap" "data/local/tmp/entry-default-signed.hap"
hdc bash bm install -p "data/local/tmp/entry-default-signed.hap"
hdc bash rm -rf "data/local/tmp/entry-default-signed.hap"
hdc bash aa start -a MainAbility -b com.example.myapplication -m entry
check "HAP install"
}
# 使用ohpm发布har
upload\_har() {
ohpm publish pkg.har
}
movehap() {
local TARGET\_HAP\_NAME=${AUTO\_BUILD\_NUMBER}\_${JOB\_NAME}\_${BUILD\_VERSION}\_${RES\_VERSION}\_${NET\_MODE}\_by\_${USER\_NAME}
local TARGET\_HAP\_PATH=$HOME/Desktop/Jenkins/Workspace/${JOB\_NAME}/${TARGET\_HAP\_NAME}.hap
local ORIGIN\_HAP\_PATH=${1}/Project/build/harmonryos/proj/build/Debug/${PROJ\_NAME}.hap
echo "cp ${ORIGIN\_HAP\_PATH} ${TARGET\_HAP\_PATH}"
cp ${ORIGIN\_HAP\_PATH} ${TARGET\_HAP\_PATH}
check "Move hap"
}
以上,就是整个自动构建的流程。
我是郑知鱼🐳,欢迎大家讨论与指教。
如果你觉得有所收获,也请点赞👍🏻收藏⭐️关注🔍我吧~~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。