build-profile.json5
File → Open
OK
File → Project Structure...
快捷键说明:
- Mac 用户使用:? + ;
- Windows/Linux 用户使用:Ctrl + Alt + Shift + S
进入后,在左侧栏选择 Signing Configs,然后点击 + 按钮新增签名配置。
Automatically generate signing 选项(即“自动生成签名”),系统将自动完成以下动作:
.p12.cer.p7bbuild-profile.json5 相关字段Apply 应用更改OK 保存并关闭窗口build-profile.json5 文件内容以确认签名信息已正确写入。
可执行如下命令查看关键部分:
# 查看签名配置
cat build-profile.json5 | grep -A 10 "signingConfigs"
预期输出示例:
# "signingConfigs": [
# {
# "name": "default",
# "type": "HarmonyOS",
# "material": {
# "certpath": "/Users/.../.cer",
# "keyAlias": "debugKey",
# ...
# }
# }
# ]
验证要点包括:
signingConfigs 数组不应为空material 对象应包含所有必需项:certpath:证书文件的具体路径storeFile:密钥库存储路径profile:签名配置文件路径keyAlias:密钥别名标识keyPassword:密钥密码(需加密存储)storePassword:密钥库密码(加密形式)signAlg:所使用的签名算法类型.p12):包含私钥及证书链.cer):用于身份认证的应用证书.p7b):符合 OpenHarmony 格式的配置定义build-profile.json5 文件,并添加相应的签名配置段落。
示例结构如下:
{
"app": {
"signingConfigs": [
{
"name": "default",
"type": "HarmonyOS",
"material": {
"certpath": "/path/to/your/certificate.cer",
"keyAlias": "yourKeyAlias",
"keyPassword": "encrypted_password_hex",
"profile": "/path/to/your/profile.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "/path/to/your/keystore.p12",
"storePassword": "encrypted_password_hex"
}
}
],
"products": [
{
"name": "default",
"signingConfig": "default", // 关联签名配置
...
}
],
...
}
}
注意事项:
keyPassword 和 storePassword 字段必须填入经过 sign.js 工具加密后的十六进制字符串node sign.js <密钥目录> <原始密码>
python3 -m json.tool build-profile.json5 > /dev/null && echo "配置格式正确" || echo "配置格式错误"
检查各签名文件是否存在且可读:
python3 -c "import json; c=json.load(open('build-profile.json5')); m=c['app']['signingConfigs'][0]['material']; import os; print('证书文件:', os.path.exists(m['certpath'])); print('密钥库文件:', os.path.exists(m['storeFile'])); print('配置文件:', os.path.exists(m['profile']))"
IndexError: list index out of range
原因分析:
build-profile.json5 文件中 signingConfigs 字段为空数组,未定义任何签名条目。
解决办法:
build-profile.json5 文件,添加完整的签名配置信息FileNotFoundError: [Errno 2] No such file or directory: '/path/to/cert.cer'
解决方案:
Error: Failed to decrypt password
应对措施:
sign.js 解密脚本环境正常可用在开始构建 HAP 包之前,必须完成应用签名的配置。若未正确设置签名信息,构建过程将报错并中断。以下是关键检查项和常见问题的解决方案。
请确认输入的密钥库密码与别名密码均采用正确的加密方式,避免因格式不匹配导致解析失败。
错误信息:
此处为图片44
解决方案:
确保使用的算法为:
此处为图片45
支持的算法类型应为:
此处为图片46
同时检查所用密钥库是否支持该签名算法。
在构建 HAP 包前,务必通过 DevEco Studio 打开项目并配置 ArkUI-X 相关路径。否则可能出现如下错误:
Installing dependencies... ?ERR_PNPM_FETCH_404? GET https://repo.huaweicloud.com/repository/npm/@ohos%2Fhvigor-ohos-arkui-x-plugin: Not Found - 404 This error happened while installing a direct dependency of /Users/baixm/.hvigor/project_caches/ff796b85a5dcea0ae785783bb7e61d4b/workspace @ohos/hvigor-ohos-arkui-x-plugin is not in the npm registry, or you have no permission to fetch it. No authorization header was set for the request. > hvigor ERROR: 00308002 Operation Error Error Message: /Users/baixm/.hvigor/wrapper/tools/node_modules/.bin/pnpm install execute failed. * Try the following: > See above for details.
此问题通常由缺失 ArkUI-X 插件依赖引起,正确配置路径后可解决。
若未设置签名信息,系统将提示以下错误:
> hvigor ERROR: Failed :entry:default@SignHap... > hvigor ERROR: 00303107 Configuration Error Error Message: Invalid storeFile value. Make sure it is not null or empty. The file must be included in '/Users/tetcl/.ohos/config/default_Termony_moe-OdT8YFdEgcGrfK_31DBCd0zmKNQIKzz8AgaZFvE=.p12'. At file: /Users/baixm/HarmonyOSPC/szkygc/Termony/build-profile.json5 * Try the following: > Please check signingConfigs in root project file * Try: > Run with --stacktrace option to get the stack trace. > Run with --debug option to get more log output. > hvigor ERROR: BUILD FAILED in 3 s 884 ms
这表明 storeFile 值无效或为空,请检查配置文件中的路径是否存在或拼写是否有误。
HAP(OpenHarmony Application Package)是 OpenHarmony 平台上的应用程序安装包格式,功能上类似于 Android 的 APK。一个完整的 HAP 包包含应用的所有代码、资源文件、配置信息以及原生库等必要组件。
在启动 HAP 构建流程前,请确认满足以下条件:
确认 HNP 包已经生成并复制到目标应用目录中:
# 检查 HNP 包是否存在
signingConfigsUnsupported signature algorithmsignAlgSHA256withECDSAproductssigningConfig./create-hnp.sh./build-macos.shbuild-profile.json5# 步骤 1:检查 HNP 文件是否存在 执行以下命令查看 arm64-v8a 架构下的 HNP 文件: ls -lh entry/hnp/arm64-v8a/*.hnp # 预期输出应包含: # -rw-r--r-- ... entry/hnp/arm64-v8a/base.hnp # -rw-r--r-- ... entry/hnp/arm64-v8a/base-public.hnp![]()
# 步骤 2:验证签名配置是否正确
在开始构建前,需确认 build-profile.json5 中已配置签名信息:
python3 -c "import json; c=json.load(open('build-profile.json5')); print('签名配置数量:', len(c['app']['signingConfigs'])); print('签名配置名称:', c['app']['signingConfigs'][0]['name'] if c['app']['signingConfigs'] else '无')"
# 正常情况下会显示:
# 签名配置数量: 1
# 签名配置名称: default
若输出“无”或数量为0,则表示未设置签名,请参考相关章节完成签名配置。
# 步骤 3:运行构建脚本 首先切换至项目主目录并执行构建命令: cd /path/to/Termony ./build-macos.sh./build-macos.sh
当执行构建脚本后,系统将按以下顺序处理:
为确保工具链可用,脚本会预先设置必要的路径:
export TOOL_HOME=/Applications/DevEco-Studio.app/Contents export DEVECO_SDK_HOME=$TOOL_HOME/sdk export OHOS_SDK_HOME=$TOOL_HOME/sdk/default/openharmony # 将关键工具加入环境变量 PATH export PATH=$TOOL_HOME/tools/ohpm/bin:$PATH # OpenHarmony 包管理器 export PATH=$TOOL_HOME/tools/hvigor/bin:$PATH # Hvigor 构建引擎 export PATH=$TOOL_HOME/tools/node/bin:$PATH # Node.js 运行时
Hvigor 是 OpenHarmony 的核心构建工具,功能类似于 Gradle。其主要执行任务包括:
hvigorw assembleHap
构建过程中会将 hnp 目录内容添加到最终的 HAP 包中:
pushd entry zip -1 -r ../entry/build/default/outputs/default/entry-default-unsigned.hap hnp popd
其中参数说明:
-1:使用最低压缩等级(仅存储,不压缩)-r:递归打包整个目录结构若手动控制签名过程,可运行如下命令:
python3 sign.py \ ./entry/build/default/outputs/default/entry-default-unsigned.hap \ ./entry/build/default/outputs/default/entry-default-signed.hap
注意事项:
build-profile.json5
构建成功后的典型输出如下:
ls -lh entry/build/default/outputs/default/entry-default-unsigned.hap # 示例输出: # -rw-r--r-- 1 user staff 4.6M Nov 15 12:33 entry-default-unsigned.hap
可通过 unzip 命令列出包内内容:
unzip -l entry/build/default/outputs/default/entry-default-unsigned.hap # 输出示例:
HAP 包的结构如下所示:
entry-default-unsigned.hap
├── module.json # 模块配置文件
├── resources.index # 资源索引文件
├── libs/ # 原生库文件
│ └── arm64-v8a/
│ ├── libentry.so # 终端引擎库
│ └── libc++_shared.so # C++ 标准库
├── resources/ # 资源文件
│ ├── rawfile/ # 原始资源文件
│ │ ├── Inconsolata-Bold.ttf
│ │ └── Inconsolata-Regular.ttf
│ ├── base/ # 基础资源
│ │ ├── media/ # 媒体资源
│ │ └── profile/ # 配置文件
├── ets/ # ArkTS 编译产物
│ ├── modules.abc # 字节码文件
│ └── sourceMaps.map # 源码映射
├── hnp/ # HNP 包目录
│ └── arm64-v8a/
│ ├── base.hnp # HNP 包
│ └── base-public.hnp # 公开 HNP 包
└── pack.info # 打包信息
构建时间说明:
错误提示:
command not found: hvigorw
解决方法:
$TOOL_HOME/tools/hvigor/bin
是否已被添加至系统 PATH 环境变量中。export PATH=/Applications/DevEco-Studio.app/Contents/tools/hvigor/bin:$PATH
错误信息:
IndexError: list index out of range
原因分析:
在
build-profile.json5
文件中,
signingConfigs
字段为空数组,表示尚未配置任何签名信息。
解决方案:
重要提示:必须在执行构建前完成签名配置!
推荐方式 — 使用 DevEco Studio 自动配置:
File → Project Structure → Signing Configs
选项。+
添加新的签名配置。Automatically generate signing
(系统将自动生成测试签名)。Apply
和
OK
完成保存操作。build-profile.json5
中是否已成功写入签名配置。高级用户 — 手动编辑配置文件:
sign.js
进行加密处理。验证签名配置是否生效:
# 检查签名配置
python3 -c "import json; c=json.load(open('build-profile.json5')); print('签名配置数量:', len(c['app']['signingConfigs']))"
注意事项:
错误提示:
zip: hnp: No such file or directory
解决办法:
./create-hnp.sh
命令以生成 HNP 包。entry/hnp/arm64-v8a/
目录是否存在且包含预期输出文件。警告内容:
WARN: Function may throw exceptions. Special handling is required.
WARN: 'showToast' has been deprecated.
说明:此类提示属于代码层面的警告,不会中断构建流程,但仍建议修复以提升代码质量。
建议改进措施:
应对策略:
# 清理已有构建产物
cd entry
rm -rf build
# 返回根目录并重新构建
cd ..
./build-macos.sh
hvigor.properties
调整并发线程数以匹配机器性能。entry/build
目录中的缓存数据,避免频繁清理造成重复编译开销。方法一:通过命令行检查输出文件
# 查看 HAP 包是否存在
ls -lh entry/build/default/outputs/default/entry-default-unsigned.hap
# 查看包体大小(正常应在 4-5MB 左右)
du -h entry/build/default/outputs/default/entry-default-unsigned.hap
# 查看包内具体内容
# 验证关键文件内容 # 确认原生库是否包含在包中 unzip -l entry/build/default/outputs/default/entry-default-unsigned.hap | grep libentry.so # 检查 HNP 包文件是否存在 unzip -l entry/build/default/outputs/default/entry-default-unsigned.hap | grep base.hnp # 查看字体文件 Inconsolata 是否被打包 unzip -l entry/build/default/outputs/default/entry-default-unsigned.hap | grep Inconsolata# 方法 2:分析 HAP 包的内部结构 # 进入临时目录并解压 HAP 文件 cd /tmp unzip -q /path/to/Termony/entry/build/default/outputs/default/entry-default-unsigned.hap tree -L 3 # 方法 1:列出未签名 HAP 包中的所有文件 unzip -l entry/build/default/outputs/default/entry-default-unsigned.hap ???? 对 HAP 包进行签名(可选步骤) 若需将应用安装至真实设备,必须对 HAP 包进行签名处理: **步骤 1:设置签名配置** 可在 DevEco Studio 中完成签名信息的配置,或通过手动方式修改相关配置文件。 **步骤 2:运行签名脚本** 使用以下命令执行签名操作: python3 sign.py \ ./entry/build/default/outputs/default/entry-default-unsigned.hap \ ./entry/build/default/outputs/default/entry-default-signed.hap **步骤 3:验证签名结果** 签名完成后,检查已生成的签名包是否存在且大小正常: ls -lh entry/build/default/outputs/default/entry-default-signed.hapbuild-profile.json5
扫码加好友,拉您进群



收藏
