hpack [h-pack]
是一个专为鸿蒙 HarmonyOS 打造的内测分发工具,借助它,你只需一行命令,就能轻松完成鸿蒙应用的构建、打包、签名,并将其上传至服务器进行内测分发。
这大大简化了开发流程,提高了开发效率,让你能更专注于应用的开发和优化。
- 打包签名:自动打出所有的 hap 和 hsp 包,并对它们进行签名。
- 签名 manifest.json5:读取应用打包数据,自动生成已签名的
manifest.json5
文件。 - 分发 index 页:自动生成分发页,提供多种 HTML 模板,同时支持自定义模板,满足不同的展示需求。
- 二维码生成:自动生成应用的二维码,方便内测人员快速下载和安装。
- OSS 上传:如果完成配置,可将打包好的所有文件上传到阿里云 OSS 。
- 查看连接的设备:显示所有正在连接的设备名
hpack targets
。 - 查看UDID: 显示所有正在连接的设备 UDID
hapck -u
。 - 命令安装:支持命令安装已签名的 .app、.hap 和包目录。示例:
hpack install xx.app
。 - 签名:支持对未签名的 .app、.hap、.hsp 和包目录签名。示例:
hpack s ./xx.app ./sign/cert.py
pip3 install harmony-hpack
# 指定源安装:
# pip3 install -i https://pypi.org/simple harmony-hpack
# pip3 install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple harmony-hpack
# pip3 install -i https://mirrors.aliyun.com/pypi/simple harmony-hpack
# pip3 install -i https://mirrors.cloud.tencent.com/pypi/simple harmony-hpack
# 查看安装成功:
# hpack -h
# 卸载:
# pip3 uninstall harmony-hpack
在阅读以下内容之前,我们建议你先详细阅读鸿蒙官方文档 HarmonyOS 应用内部测试。
准备工作,你需要生成这三个文件:
1、发布证书: .cer 格式
2、内部测试 Profile: .p7b 格式
3、私钥文件: .p12 格式
官方给出的内部测试流程大致如下:
DevEco-Studio :鸿蒙开发 IDE, 同时集成了各种命令工具
JDK 17+: 签名工具需要。
python3.7+ : hpack 由 python 编写,执行环境
# 在你使用的终端中,检查以下工具是否成功安装:
java --version
python3 --version # 或 python
pip3 --version # 或 pip
hvigorw -v # DevEco-Studio 自带,其他终端使用需设置环境变量,请看下面 Tips
hdc -v # DevEco-Studio 自带,其他终端使用需设置环境变量
pip3 install harmony-hpack # 最新版本 pip3 install harmony-hpack==1.0.7
# 如果安装失败,Win 使用管理员权限
# Mac 尝试使用 sudo 权限:
# sudo -H pip3 install harmony-hpack
在项目根目录下执行以下命令,初始化 hpack
目录并创建配置文件:
hpack init
初始化完成后,会在项目根目录下生成 hpack
目录,包含以下文件和文件夹:
.
├── config.py # 配置文件,服务器、应用信息和打包签名等相关信息。
├── Packfile.py # 打包完成后的回调文件,可用于自定义上传和处理逻辑。
└── sign # 存放签名证书文件,需替换为您的证书文件。
打开 hpack/config.py
文件,根据实际情况修改配置信息:
class Config:
# 安装包存放的服务器的域名
DeployDomain = 'static.hpack.com'
# 安装包存放的服务器地址,必须是 https
BaseURL = f"https://{DeployDomain}/hpack"
# 应用信息
AppIcon = f"{BaseURL}/AppIcon.png"
AppName = 'hpack'
Badge = '鸿蒙版'
# index模板选择, 可选值为 [default, simple, tech, cartoon, tradition, custom]
# 如果是 custom,则表示自定义模板,需要自己在 hpack 目录写一个 index.html,
# 打包完成后进行内容填充,再写入 hpack/build/{product} 目录
IndexTemplate = "default"
# 打包签名配置
Alias = 'your key alias'
KeyPwd = 'your key password'
KeystorePwd = 'your store password'
# 替换 hapck/sign 目录下的证书文件
SignDir = 'sign'
Cert = os.path.join(SignDir, 'release.cer')
Profile = os.path.join(SignDir, 'test_release.p7b')
Keystore = os.path.join(SignDir, 'harmony.p12')
# 以下是 v1.0.1 新增自定义构建配置 ===================
# 从v1.0.0升级上来的,可自行加上
# 设置默认打包 product
# 优先使用这个指定的 product。
# 不设置,则通过读 build-prodile.json5 获取,存在多个时,打包前会提示选择
Product = ""
# 编译模式,默认是 debug 模式,release 模式需要设置为False
Debug = True
# 用于完全自定义 hvigorw 构建命令,配置后 Product、Debug 无效
# hvigorw 使用 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-commandline
# 使用示例:
# [
# 'hvigorw', 'assembleHap', 'assembleHsp',
# '--mode', 'module',
# '-p', 'product=default',
# '-p', 'debuggable=true',
# '--no-daemon'
# ]
HvigorwCommand = []
替换 hapck/sign
目录下的证书文件
.
├── harmony.p12 # 私钥文件
├── release.cer # 发布证书
└── test_release.p7b # 内部测试Profile
执行以下命令进行打包、签名和上传操作,可选择性地添加更新说明:
hpack pack "修复了一些已知问题,优化了性能" # 缩写 hpack p [desc]
打包完成后,所有打包的文件都在 hpack/build/{product}
目录下。
如果使用阿里云OSS 作为存储服务,需要先安装 oss2:
pip3 install oss2
打开 Packfile.py
完成配置:
class OSSConfig:
# 如果您需要使用OSS, 需要先安装 pip3 install oss2
# 如果您不使用阿里云OSS,则不用修改
Access_key_id = 'your Access_key_id'
Access_key_secret = 'your Access_key_secret'
Endpoint = 'your Endpoint'
Bucket_name = 'your Bucket_name'
Bucket_dir = 'hpack'
如果是使用的是其他服务器,则需要自己编写上传代码:
def didPack(packInfo):
"""_summary_: 打包后回调,通常在这里上传打包结果到服务器
"""
# 打包结果在hapck/build/{product},编写你的上传逻辑
查看帮助
hpack -h # 或 hpack help
hpack 命令帮助:
查看:
-v, --version 显示版本信息
-h, --help 显示帮助信息
-u, --udid 显示设备的 UDID
targets 显示连接的设备列表
执行:
init 初始化 hpack 目录并创建配置文件
pack, p [desc] 执行打包签名和上传, desc 打包描述,可选
template, t [tname] 生成 index.html 模板文件,tname 可选值:['default', 'cartoon', 'tech', 'tradition', 'simple'],默认为 default
安装包:
install, i [-product] 将打包后的产物安装到设备,需要先 hapck pack 打包。
示例: hpack i -myproduct # 安装 myproduct 产物,注意加上横杠(-)
install, i signedPath 为已签名包的目录或文件路径,支持 .app、.hap文件或目录。
示例1:hpack i ./xx.app
示例2:hpack i ./xx.hap
示例3:hpack i ./build/default
签名:
sign, s unsignedPath certPath
unsignedPath 为待签名的目录或文件路径,支持 .app、.hap、.hsp 文件或目录。
certPath 为签名证书配置文件路径。
示例1:hpack s ./xx.app ./sign/cert.py
示例2:hpack s ./xx.hap ./sign/cert.py
示例3:hpack s ./build/default ./sign/cert.py
/sign 目录的结构如下:
├── cert.py
├── certFile.cer
├── keystore.p12
└── profile.p7b
cert.py 签名证书配置文件示例如下:
# -*- coding: utf-8 -*-
Alias = 'key alias'
KeyPwd = 'key password'
KeystorePwd = 'store password'
Cert ='./certFile.cer' # 相对于cert.py的路径
Profile = './profile.p7b' # 相对于cert.py的路径
Keystore = './keystore.p12' # 相对于cert.py的路径