v1.0.3上传AGC时连续遭遇996错误,从Debug Profile到HAP包格式,踩了两个大坑。本文记录完整的排坑过程和最终解决方案,希望能帮其他开发者少走弯路。
坑一:DevEco Studio自动签名生成的是Debug Profile
现象:在DevEco Studio中用Sign In登录华为账号后,自动生成的签名配置看起来一切正常,构建也成功了,但上传AGC时报996错误。
排查:用keytool检查本地.ohos/config目录下的.p7b文件,发现证书Subject是"HOS Profile Management Debug",而不是"HOS Profile Management"。也就是说,DevEco Studio的Sign In功能即使用于release配置,生成的Profile类型仍然是Debug。
根因:AGC只接受Release Profile签名的包,Debug Profile签名的包会被拒绝。AGC错误码993的原因四明确说明:"软件包使用的是自动签名,请使用发布Profile进行手动签名。"
坑二:HAP包改后缀名不等于APP包
现象:找到v1.0.2的Release签名材料后,用hap-sign-tool成功签名了HAP包,把后缀名从.hap改为.app上传AGC,仍然报996错误。
排查:对比v1.0.2成功上传的APP包(120KB)和当前的HAP包(296KB),大小差异巨大。HAP包是单模块包,APP包是多HAP集合的发布包,两者格式完全不同,改后缀名不能改变文件格式。
根因:构建命令用错了——assembleHap构建的是HAP包,assembleApp构建的才是APP包。AGC能识别文件格式差异,HAP包伪装成.app仍然会被拒绝。
解决方案:hap-sign-tool命令行签名
既然DevEco Studio的自动签名无法生成Release Profile,那就用hap-sign-tool命令行工具绕过,手动签名:
- 构建unsigned APP包:将build-profile.json5中signingConfig设为空,用assembleApp构建
- 命令行签名:用hap-sign-tool的sign-app命令,指定v1.0.2的Release证书、Profile和密钥库
- 验证签名:用verify-app命令确认Profile类型为release
签名后APP包116KB,与v1.0.2的120KB接近,Profile类型确认为release,AGC一次上传成功。
密码找回:项目内文档救了命
v1.0.2的密钥库密码一度丢失,keytool尝试多个常见密码都失败。最终在项目内的敏感信息文档中找到了密码记录。这个教训很深刻:签名密码必须妥善保存,最好与项目代码一起管理(但放在不公开的目录中)。