问题现象
开发者在本地DevEco Studio中构建元服务APP成功,但新建工程,通过git pull拉取原工程代码后使用流水线环境以及IDE环境均构建APP失败。
控制台日志中首先出现警告信息:
> hvigor WARN: Will skip sign 'app'. No signingConfigs profile is configured in current project. If needed, configure the signingConfigs in build-profile.json5.
随后在构建结束时抛出错误:
> hvigor ERROR: The number of subpackages in the built product (the app package generated by the release) is incorrect. please clean and rebuild project to make sure subpackages generated or cache has been cleaned.
在另一种场景中,元服务开发部署正常,但通过邀请测试安装后页面跳转功能失效,检查发现构建的APP包中缺少分包.hsp文件。
背景知识
- 构建模式差异:在DevEco Studio中配置Build Mode选项,在选择了选项时,构建APP包,IDE会使用release构建模式;构建HAP/HSP/HAR包,使用debug构建模式。具体说明请参考指定构建模式。
- APP与HAP的关系:.app文件是最终的发布包,它是一个容器,内部必须包含build-profile.json5中声明的所有.hap(Feature/Entry)文件。
- 签名与产物生成的关系:在Release模式下,签名是生成有效HAP的必要条件。如果构建系统检测到没有配置signingConfigs,它不会立即终止构建,而是跳过签名及生成HAP。
- 最终一致性校验:构建流程的最后一步是打包,它负责收集所有生成的HAP。此时它会校验"实际生成的HAP数量"是否等于"配置文件中声明的模块数量"。
问题定位
- 检查构建日志:在报错ERROR: The number of subpackages ... is incorrect之前的日志中,存在警告WARN: Will skip sign ...。
现象:日志明确提示因缺少signingConfigs而跳过了签名步骤。
- 检查构建配置:打开工程根目录的build-profile.json5文件,检查signingConfig字段。
现象:该签名为debug签名。
- 构建逻辑:构建系统准备构建APP->检测到release模式->查找release签名配置->配置缺失->跳过生成分包HAP->进入分包数量校验->分包数量为0->报错。
分析结论
导致该问题的根本原因是:release模式下缺少对应的签名配置,导致构建系统跳过了分包HAP的生成。
具体原因分析如下:
- 用户选择了选项构建APP,IDE默认启用了release构建模式。
- 原工程中配置了release签名文件,因此构建成功;但新工程通过git pull拉取代码后,并未同步本地的签名配置。
- 虽然系统仅发出WARN警告并继续执行,但由于跳过了关键的签名步骤,导致实际上没有生成任何可用的HAP文件。
- 当构建流程进入最后的打包校验阶段时,发现实际产物数量(0个)与预期数量不符,从而抛出ERROR。
修改建议
请配置正确的release签名以构建APP包。
具体检查步骤如下:
- 确认signingConfigs中release的certpath、storeFile、profile文件路径是否正确。
- 确认products中release的signingConfig是否指向"release"。
- 确认modules中entry的applyToProducts是否包含"release"。
- 检查构建日志中是否仍有WARN: Will skip sign警告。
构建日志中若出现WARN: Will skip sign警告,意味着签名过程异常,导致打包不完整,进而造成分包.hsp未能打入包中。修正上述配置并消除签名警告后,重新构建即可解决该问题。