build(harmony): 写入签名配置(devecocli signature generate 生成,指纹已登进 AGC)

用户把签名这块交给我(「你不是有devecocli嘛」)。做法:
- 共享浏览器里用已有登录态完成 DevEco CLI 授权(无需短信)→ devecocli auth status 通过
- client/harmony 下 `devecocli signature generate --product default`:
  生成 p12/csr/cer/p7b 到 ~/.ohos/config/,并把 signingConfigs 写进本文件
- 叶子证书 = CN=靳睿(1681189977251159745),Development,SHA256
  FD:89:AC:53:9C:C6:F9:37:C0:B4:E1:BC:82:91:B1:BA:11:15:46:33:66:88:F9:74:E0:A5:52:DA:46:FC:9D:09
  已登进 AGC 该应用的「SHA256证书/公钥指纹」(推送送达的前提)
- profile 绑 com.jianf.agentmail,debug 型,登记设备 3 台(1 模拟器 + 2 真机)

验签用官方工具(不用猜结构):hap-sign-tool verify-app → Verify success,
证书链里正是上面那张叶子证书。

注:signingConfigs 里的路径是绝对路径(DevEco 默认行为),换机器要重新生成。
This commit is contained in:
2026-09-15 11:38:34 +08:00
parent 7b16fec61c
commit 351be9dc5e

View File

@ -1,42 +1,56 @@
{
"app": {
"signingConfigs": [],
"products": [
app: {
signingConfigs: [
{
"name": "default",
"signingConfig": "default",
"targetSdkVersion": "6.1.0(23)",
"compatibleSdkVersion": "6.1.0(23)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
}
}
}
name: 'default',
type: 'HarmonyOS',
material: {
certpath: '/root/.ohos/config/default_harmony_k2yruKTLaTiZOjublhUDTfveVx5uFoHqm96pwkUw=.cer',
keyAlias: 'debugKey',
keyPassword: '0000001b64d7bb074eed97bb2c6ad5ae60df2f72256b104361c3fd8c4f842eb42961fce4b712e7410dd208',
profile: '/root/.ohos/config/default_harmony_k2yruKTLaTiZOjublhUDTfveVx5uFoHqm96pwkUw=.p7b',
signAlg: 'SHA256withECDSA',
storeFile: '/root/.ohos/config/default_harmony_k2yruKTLaTiZOjublhUDTfveVx5uFoHqm96pwkUw=.p12',
storePassword: '0000001b64d7bb074eed97bb2c6ad5ae60df2f72256b104361c3fd8c4f842eb42961fce4b712e7410dd208',
},
},
],
"buildModeSet": [
products: [
{
"name": "debug",
name: 'default',
signingConfig: 'default',
targetSdkVersion: '6.1.0(23)',
compatibleSdkVersion: '6.1.0(23)',
runtimeOS: 'HarmonyOS',
buildOption: {
strictMode: {
caseSensitiveCheck: true,
useNormalizedOHMUrl: true,
},
},
},
],
buildModeSet: [
{
name: 'debug',
},
{
"name": "release"
}
]
name: 'release',
},
],
},
"modules": [
modules: [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
name: 'entry',
srcPath: './entry',
targets: [
{
"name": "default",
"applyToProducts": [
"default"
]
}
]
}
]
name: 'default',
applyToProducts: [
'default',
],
},
],
},
],
}