build ohos acts project.
这个 skill 提供了 OpenHarmony HAP 应用的构建和签名功能,包括:
需 HOS_CLT_PATH、OHOS_SDK_PATH;在 napi_generator 仓库根 执行时脚本路径如下,<项目目录> 多为 src/skills/ohhap/NativeProj46R 或你自建的 HAP 工程绝对路径。
| 场景 | 命令示例 | 提示词示例 |
|---|---|---|
| 编译 HAP | python3 src/skills/ohhap/hapbuild.py build src/skills/ohhap/NativeProj46R |
「用 ohhap 编译 NativeProj46R 模板工程」 |
| 指定 product/mode | python3 src/skills/ohhap/hapbuild.py build <项目> default release |
「打成 release 主包」 |
| 签主包 | python3 src/skills/ohhap/hapbuild.py sign <项目> release |
「对未签名 HAP 做 release 签名」 |
| 编测试包 | python3 src/skills/ohhap/hapbuild.py build-test <项目> |
「只构建 ohosTest HAP」 |
| 清签名 | python3 src/skills/ohhap/hapbuild.py clean-sign <项目> |
「清除 autosign 临时文件」 |
| 查看用法 | python3 src/skills/ohhap/hapbuild.py(无参打印命令列表) |
「hapbuild 支持哪些子命令」 |
HOS_CLT_PATH: HarmonyOS Command Line Tools 路径
<本机 Command Line Tools 根目录>version.txt 文件OHOS_SDK_PATH: OpenHarmony SDK 路径
<本机 ohos-sdk 根目录>daily_build.log 文件build / build-test 串联)在 OHOS_HAPSIGNER_RESULT 指向 hapsigner 证书目录(含 OpenHarmony.p12、rootCA.cer、subCA.cer 及对应 profile 的 pem)时,build / build-test 成功后会自动执行与 sign 子命令相同的命令行签名,无需再单独跑 sign。
OHOS_HAPSIGNER_AUTO_SIGN: 默认开启;设为 0 / false / no / off 则只构建、不自动签名。OHOS_HAPSIGNER_PROFILE: 可选,显式指定 debug 或 release;未设时按构建模式选择(release 构建对应 release 签名,否则为 debug)。若推断为 debug 但证书目录没有 OpenHarmonyProfileDebug.pem(仅自备 release 材料时常见),自动改用 release 签名。OHOS_HAPSIGNER_RESULT 且本机不存在默认的 ~/ohos/.../hapsigner/autosign/result,则跳过自动签名(构建仍计为成功)。说明:hvigor 内置 SignHap 依赖 DevEco 加密密码与 material/ 密钥材料;自动签名走 hap-sign-tool 命令行,与 build-profile.json5 中明文密码是否通过校验无关。静态 XTS 工程宜保持 signingConfigs 为空,由本流程出 unsigned 后再自动签出 signed HAP。
build-profile.json5 配置文件# 基本用法(使用默认 product 和 debug 模式)
python3 src/skills/ohhap/hapbuild.py build <project_dir>
# 向后兼容:直接使用项目目录(自动识别为 build 命令)
python3 src/skills/ohhap/hapbuild.py <project_dir>
# 指定 product 和 build_mode
python3 src/skills/ohhap/hapbuild.py build <project_dir> <product> <build_mode>
# 示例
python3 src/skills/ohhap/hapbuild.py build /path/to/project
python3 src/skills/ohhap/hapbuild.py build /path/to/project default debug
python3 src/skills/ohhap/hapbuild.py build /path/to/project default release
一次跑通「构建 + 自动签名」(静态 XTS 等,工程内需有 signing-materials 或等价目录并设 OHOS_HAPSIGNER_RESULT):
export HOS_CLT_PATH=<Command-Line-Tools 根目录>
export OHOS_SDK_PATH=<openharmony/static 等 SDK 根,需能解析到 hap-sign-tool.jar>
export OHOS_HAPSIGNER_RESULT=<含 p12/CA/pem 的目录>
export OHOS_USE_HVIGOR_STATIC=1 # 使用 hvigor-static 时
python3 src/skills/ohhap/hapbuild.py build <project_dir> default debug
# 成功则 exit 0,且生成 entry-default-unsigned.hap 与 entry-default-signed.hap(路径以模块为准)
# 使用 release profile 签名(默认)
python3 src/skills/ohhap/hapbuild.py sign <project_dir>
# 使用 debug profile 签名
python3 src/skills/ohhap/hapbuild.py sign <project_dir> debug
# 使用 release profile 签名
python3 src/skills/ohhap/hapbuild.py sign <project_dir> release
# 示例
python3 src/skills/ohhap/hapbuild.py sign /path/to/project
python3 src/skills/ohhap/hapbuild.py sign /path/to/project release
# 清除签名(删除 autosign 目录)
python3 src/skills/ohhap/hapbuild.py clean-sign <project_dir>
# 示例
python3 src/skills/ohhap/hapbuild.py clean-sign /path/to/project
环境检查
HOS_CLT_PATH 和 OHOS_SDK_PATH 环境变量version.txt)daily_build.log)版本验证
build-profile.json5 配置文件targetSdkVersion 和 compatibleSdkVersion执行构建
node $HOS_CLT_PATH/hvigor/bin/hvigorw.js 替代项目内的 hvigorwnode hvigorw.js clean --no-daemon 清理项目node hvigorw.js --mode module -p product=default assembleHap --analyze=normal --parallel --incremental --daemon 构建主 HAPnode hvigorw.js --mode module -p module=entry@ohosTest -p isOhosTest=true -p product=default -p buildMode=test assembleHap --analyze=normal --parallel --incremental --daemon构建后自动签名(默认开启,条件见上文「自动命令行签名」)
sign 同逻辑的 hap-sign-tool 流程,生成 signed HAP。HAP 签名流程(sign 子命令或上述自动签名,8 步)
autosign 目录autosign 目录bundle-name(从 app.json5 读取)$HOS_CLT_PATH/version.txt 文件格式:
# ======================
# Command Line Tools(linux-x64)
# Version: 6.0.1.260
# ======================
...
hvigor 6.21.2
ohpm 6.0.1
$OHOS_SDK_PATH/daily_build.log 文件包含:
'versionName': 'OpenHarmony_6.0.0.47'
build-profile.json5 文件包含:
{
"app": {
"products": [
{
"targetSdkVersion": "6.0.0(20)",
"compatibleSdkVersion": "6.0.0(20)"
}
]
}
}
其中 (20) 表示 API 级别,对应 SDK 中的 sdk/openharmony/20/ 目录。
================================================================================
检查编译环境...
================================================================================
✓ HarmonyOS Command Line Tools 路径: <你的 Command Line Tools 目录>
SDK名称: Command Line Tools
运行系统: linux-x64
版本: 6.0.1.260
Hvigor版本: 6.21.2
OHPM版本: 6.0.1
✓ OpenHarmony SDK 路径: <你的 ohos-sdk 目录>
SDK版本: OpenHarmony_6.0.0.47
✓ Node.js 版本: v18.20.1 (符合要求)
✓ Hvigor 版本: 6.21.2 (符合要求)
================================================================================
验证版本一致性...
================================================================================
项目配置:
targetSdkVersion: 6.0.0(20)
compatibleSdkVersion: 6.0.0(20)
API级别: 20
✓ SDK 主版本一致: 6.0
✓ SDK 中存在 API 20
================================================================================
开始构建 HAP...
================================================================================
工作目录: /path/to/project
执行清理...
命令: hvigorw clean --no-daemon
执行构建...
命令: hvigorw assembleHap --mode module -p product=default -p buildMode=debug --no-daemon
✓ HAP 构建成功!
签名功能会自动执行以下步骤:
autosign 目录用于存放签名相关文件~/ohos/60release/src/developtools/hapsigner/autosign/result/ 拷贝证书文件$OHOS_SDK_PATH/linux/toolchains/lib/ 拷贝签名工具AppScope/app.json5 读取 bundleName 并更新到模板文件hap-sign-tool.jar 生成应用签名证书密钥对<project_dir>/autosign/app1-signed.hap<project_dir>/autosign/app1.cer<project_dir>/autosign/app1-profile.p7bOHOS_SDK_PATH 环境变量指向正确的 SDK 路径~/ohos/60release/src/developtools/hapsigner/autosign/result/AppScope/app.json5 文件,且包含有效的 bundleName使用 clean-sign 命令可以删除 autosign 目录,清除所有签名相关的临时文件。
hapbuild.py: HAP 构建和签名主脚本crosscompile.py: 交叉编译脚本(待实现)hvigorw 脚本java 命令可用123456,生产环境请使用自己的证书和密码