搭建鸿蒙应用构建流水线

说在前头

其实官网文档说的比较全,就搬运一下,只是增加一些文字便于大家理解,大多数都是签名问题,需要对hsp和hap都签名,hdc send的时候都send过去,install的时候也都install一下,大家可以看看,有不正确的帮忙指正一下,万分感谢

明确几个概念

  1. har,hap,hsp,app的区别
    本文需要知道的是,能像安卓那样直接安装到手机的只有hap,app包则是商城上架的概念,并不能直接安装到手机。感兴趣可以用解压缩工具(如Bandizip)打开.app文件,可以看到里面除了pack.info,还有至少一个hap包(可能还有其它hsp等)
  2. 证书种类
    发布证书:一个开发者只有一个发布证书,同一个开发者,多个项目多个App发布时均使用同一个发布证书。
    调试证书:调试证书,必须选择分发设备类型(手机?平板?手表?),和包含调试设备的uuid
  3. 用到的工具
    ohpm:主要用于安装工程及各个模块依赖的三方库。
    hvigor:构建产物,支持Hap,Hsp,Har,App,构建完不带有签名信息。
    java:只支持jdk17,用于执行签名工具
    hap-sign-tool.jar:签名工具,不单支持hap签名,还支持hsp签名
    hdc:将HAP推送到真机设备上进行安装,需要注意的是,推送的HAP必须是携带签名信息(必须是调试证书)的,否则会导致HAP安装失败。注意:若有hsp也要一块推到真机再安装。可能有朋友用发布证书来签名,发布证书打包的hap包是不能用于直接安装的

根据1、3可以知道,其实咱们签名都是对hap,hsp签名,app可以理解为一个包含所有hap和hsp的一个压缩包(其实还有pack.info等文件)

官网文档

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-command-line-building-app-0000001672412437-V5

Step by Step

JDK17 下载

这个自己下载,因为有的伙伴会用定制化的jdk,没特殊情况baidu或google一下就下载好了

tar -xvf jdk-17.0.6_linux-x64_bin.tar.gz
配置Java环境变量
# Linux & MacOS
vi /etc/profile

#然后在最下面添加这两行,路径自己调整下
export JAVA_HOME=/opt/jdk-17.0.6_linux-x64_bin
export PATH=$PATH:$JAVA_HOME/bin

# :wq!后
source /etc/profile

# 验证
java -version

windows的话就不细说了,计算机高级设置,环境变量,新建JAVA_HOME并配置文件,并把其bin目录添加到path中去

CLT 下载

https://developer.huawei.com/consumer/cn/download/
下载当前操作系统对应的CommandLineTools包,并解压到某个目录,建议解压到某个盘的根目录,因为遇到过伙伴出现奇怪问题最后才刚发现是路径过长的原因。

# Linux:

cp ./commandline-tools-linux-x64-5.0.3.XXX.zip /home/ohos/commandline-tools-linux-x64-5.0.3.XXX.zip
cd /home/ohos/
unzip commandline-tools-linux-x64-5.0.3.XXX.zip

# 环境变量设置,不再赘述,路径调整下
export COMMANDLINE_TOOL_DIR=/home/ohos
export HDC_HOME=${COMMANDLINE_TOOL_DIR}/command-line-tools/sdk/HarmonyOS-NEXT-DB2/openharmony/toolchains
export PATH=$PATH:$HDC_HOME
export PATH=${COMMANDLINE_TOOL_DIR}/command-line-tools/bin:$PATH

# 验证
hvigorw -v
ohpm -v

配置仓库地址

# 若您的工程在hvigor/hvigor-config.json5文件中依赖npm三方组件,流水线中则需要配置npm镜像地址,编译时才能正确地下载它。
npm config set registry=https://repo.huaweicloud.com/repository/npm/
npm config set @ohos:registry=https://repo.harmonyos.com/npm/

# 配置ohpm仓库地址
ohpm config set registry https://ohpm.openharmony.cn/ohpm/
ohpm config set strict_ssl false

构建

注意:是在daemon模式下,hvigorw会自动读取hvigor-config.json5文件中"nodeOptions"的配置;在非daemon模式下,需要修改node内存配置,可在hvigorw文件中取消第15行的注释,并配置对应的数值。如将node内存配置为10240,示例如下:

NODE_OPTS="--max-old-space-size=10240"

本文使用Linux作为流水线构建环境,Linux环境会对大小写敏感,如果您的代码引用中有大小写错误(例如代码中import funcA form ‘./aaa’,而实际文件为AAA.ets),而且开发环境是Windows或者Mac,那么有可能出现Windows或者Mac环境下编译通过,而Linux环境下编译不通过的现象。通过在项目级的build-profile.json5文件中配置caseSensitiveCheck为true来打开大小写敏感,保持Windows或者Mac环境编译与Linux环境编译结果一致。

// build-profile.json5文件
{
    "name": "default",
    "compatibleSdkVersion": "5.0.0(12)",
    "targetSdkVersion": "5.0.0(12)",
    "runtimeOS": "HarmonyOS",
    "buildOption": {
      "strictMode": {
        "caseSensitiveCheck" : true
      }
    }
}
# 根据业务情况,执行相应的构建命令, 示例如下
# clean工程
hvigorw clean --no-daemon
# 构建Hap, 生成产物:${PROJECT_PATH}/{moduleName}/build/{productName}/outputs/{targetName}/xxx.hap
hvigorw assembleHap --mode module -p product=default -p buildMode=debug --no-daemon
# 构建Hsp, 生成产物:${PROJECT_PATH}/{moduleName}/build/{productName}/outputs/{targetName}/(xxx.har | xxx.hsp)
hvigorw assembleHsp --mode module -p module=library@default -p product=default --no-daemon
# 构建Har, 生成产物:${PROJECT_PATH}/{moduleName}/build/{productName}/outputs/{targetName}/outputs/xxx.har
hvigorw assembleHar --mode module -p module=library1@default -p product=default --no-daemon
# 构建App, 生成产物: ${PROJECT_PATH}/build/outputs/{productName}/xxx.app
hvigorw assembleApp --mode project -p product=default -p buildMode=debug --no-daemon

构建命令完成后,工程或模块下build目录中会生成相应的hap/hsp/har/app编译产物。
补充说明:
在这里插入图片描述附:hvigor命令行参数详见:常用命令

搞到调试证书文件

参考https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-signing-0000001587684945-V5#section15151840123413

签名

需要用到hap_sign_tool.jar,在${COMMANDLINE_TOOL_DIR}/command-line-tools/sdk/HarmonyOS-NEXT-DB1/openharmony/toolchains/lib下
使用如下命令对HAP进行签名。详细的签名工具指导请参考Hap包签名工具。(这里注意下,有hsp也签名下)

java -jar hap-sign-tool.jar sign-app -keyAlias "key0" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "test.cer" -profileFile "test.p7b" -inFile "hap-unsigned.hap" -keystoreFile "test.p12" -outFile "result\hap-signed.hap" -keyPwd "123456" -keystorePwd "123456" -signCode "1"

关于该命令中需要修改的参数说明如下,其余参数不需要修改:

  • keyAlias:密钥别名。
  • appCertFile:申请的调试证书文件,格式为.cer。
  • profileFile:申请的调试Profile文件,格式为.p7b。
  • inFile:通过hvigor打包生成的未携带签名信息的HAP。
  • keystoreFile:密钥库文件,格式为.p12。
  • outFile:经过签名后生成的携带签名信息的HAP。
  • keyPwd:密钥口令。
  • keystorePwd:密钥库口令。
  • signCode:是否开启代码签名,缺省为开启。1表示开启,0表示不开启。从NEXT Developer Beta2版本开始,需开启代码签名,否则将导致构建出的包无法安装到设备上。

运行应用

通过HDC工具将HAP推送到真机设备上进行安装,需要注意的是,推送的HAP必须是携带签名信息的,否则会导致HAP安装失败。

推送HAP的命令如下:

# 将打包好的hap包推送至设备中, 若有hsp也要send过去
hdc file send "{PROJECT_PATH}/entry/build/default/outputs/default/entry-default-signed.hap" "data/local/tmp/entry-default-signed.hap"
# 安装hap包,当然有hsp也要安装
hdc shell bm install -p "data/local/tmp/entry-default-signed.hap"
# 删除hap包,有hsp也清理下吧
hdc shell rm -rf "data/local/tmp/entry-default-signed.hap"
# 在设备上运行HAP的命令如下:(其实若有多个hap,一般一个Ability对应一个hap,运行程序那肯定就是运行EntryAbility)
hdc shell aa start -a EntryAbility -b com.example.myapplication -m entry

根据前面说的,hdc install xxx.app必然报错,因为app是上架应用商城用的包,并不能直接用于安装

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值