未签名的鸿蒙hap包该如何安装到真机
未签名的 hap包在鸿蒙真机上是无法直接安装的。因为安装服务会校验签名,直接 hdc install 会被拒,异常如下:
那么在这个规则下,当我们拿到一个未签名的鸿蒙hap包该怎么处理才能安装到真机上?总结了以下5个方案,供大家实战中参考:
一、场景说明
首先要知道鸿蒙应用的包名在开发者中心是全局唯一的,如果你拿到的Hap已在对应账号下创建了,那么你就无法再在自己的账号下创建同包名应用,但这并不影响你把 HAP 包装到真机上,根据协作场景不同,有五条可行路径。
二、方案选择思路
方案一:加入对方团队(持续协作场景,推荐)
开发者中心支持团队协作机制,团队成员可以以团队身份开展开发活动。
操作步骤:
-
对方(团队账号持有者)在开发者中心的团队管理中,邀请你的开发者账号加入其团队
-
你接受邀请后,在开发者中心“证书、APP ID和Profile”页面右上角切换到对方团队,此时可以看到团队名下该包名的应用
-
以团队身份申请调试证书、注册你的真机设备、为该应用申请调试Profile
-
用 hap-sign-tool 完成签名后,hdc install 安装到真机
方案二:让对方删除后你重新创建(对方应用无保留价值时)
若对方创建的应用尚未上架、无历史数据且对方不再需要,建议的处理方式是:
-
对方在其账号下删除应用信息(包括 APP ID)
-
你在自己的账号下用原包名创建新应用
-
按“申请调试证书 → 注册设备 → 申请调试Profile → 签名安装”的流程操作
方案三:让对方代签(最省事,适合临时安装)
你无需在自己账号侧做任何创建操作。
操作步骤:
-
获取你真机的 UDID 发给对方
-
对方在其账号下将你的设备注册为调试设备,重新申请包含你设备的调试Profile
-
对方用 hap-sign-tool 签名后,把已签名的 HAP 包发给你
-
你直接执行
hdc install -r xxx.hap安装
方案四:应用转移(应用归属权整体移交)
如果这个应用后续要由你来维护和上架,对方可以发起应用转移。
操作步骤:
-
对方在开发者中心选择目标应用
-
进入“分发 > 应用上架 > 应用信息”
-
点击页面底部的“应用转移”
-
系统会自动检测应用是否符合转移条件
-
符合条件则填写转入者ID(你的开发者账号)和转入者名称后提交
转移完成后:应用归你账号所有,你可以自行申请证书和 Profile 进行签名。
方案五:改包名重新打包(纯本地调试场景)
如果你只是想把应用跑起来看看,不在乎包名:
-
让对方在工程中修改
bundleName后重新打包发给你 -
你用新包名在自己账号下创建应用
-
再走签名流程
三、实战操作
1. 如何获取UDID
-
设置 → 关于手机 → 连点版本号,打开开发者模式,再进开发者选项开 USB 调试。
-
电脑上执行
hdc list targets,确认设备已连接。
-
取 UDID:
hdc shell bm get --udid,输出udid。
2. 如何获取证书和Profile
上到自己的AGC网站(AppGallery Connect的简称),需要获取2个关键文件:
获取证书: AGC → 证书 → 新增证书,类型选调试证书, 下载 .cer。
获取Profile: AGC → Profile → 添加;根据页面要求,选择对应对应包名,Profile名称,证书,和设备,添加完成后即可下载 .p7b。
3. 使用hap-sign-tool 签名
签名命令:
$java = "XXX\java.exe"
$jar = "XXX\hap-sign-tool.jar"
& $java -jar $jar sign-app `
-mode localSign -signAlg SHA256withECDSA `
-keystoreFile "XXX\XXX.p12" `
-keystorePwd "XXXX" -keyAlias "XXX" -keyPwd "XXX" `
-appCertFile "XXX\XXX.cer" `
-profileFile "XXX\XXX.p7b" `
-inFile "XXX\XXX.hap" `
-outFile "XXX\XXX.hap"
验签命令:
$java -jar $jar verify-app `
-inFile "XXX\XXX.hap" `
-outCertChain "XXX\vs_chain.cer" `
-outProof "XXX\vs_profile.p7b"
本篇以实战为主,也可以综合上一篇一起学习。
如之前预测,鸿蒙装机量在本月就会破1亿大关,在当下鸿蒙的发展已势不可挡!
感谢持续关注!
关注 CPF-Flutter 社区
“AI再牛,技术不能丢“
更多推荐



所有评论(0)