OpenHarmony 签名过程分析与自定义签名指南
OpenHarmony 签名过程分析与自定义签名指南
分析版本:OpenHarmony Master (2026-03)
源码路径:/home/xc/code/os/ohos_master
一、OpenHarmony 签名过程分析和验签分析
1.1 签名整体架构
OpenHarmony 应用签名采用双层签名机制:
┌─────────────────────────────────────────────────────────────────┐
│ 开发阶段:签名工具 │
│ │
│ ┌────────────────────┐ ┌────────────────────────────┐ │
│ │ Unsigned Profile │ sign- │ OpenHarmonyProfileRelease │ │
│ │ (JSON 模板) │ profile │ .pem (Profile 证书) │ │
│ └────────┬───────────┘ → └──────────┬─────────────────┘ │
│ │ │ │
│ │ HapUtils.java │ │
│ │ (app-identifier 计算) │ │
│ │ ▼ │
│ │ ┌─────────────────────┐ │
│ │ │ OpenHarmony.p12 │ │
│ │ │ (密钥库,含私钥) │ │
│ │ └──────────┬──────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ hap-sign-tool.jar sign-profile │ │
│ │ (CMS PKCS#7 签名) │ │
│ └──────────────────────────┬───────────────────────────┘ │
│ ▼ │
│ ┌────────────┐ │
│ │ *.p7b │ (签名后的 Provision) │
│ │ (CMS 包) │ │
│ └─────┬──────┘ │
└────────────────────────────┼───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 安装阶段:设备验签 │
│ │
│ ┌────────────┐ │
│ │ *.p7b │ │
│ └─────┬──────┘ │
│ │ │
│ ┌─────────────────────────┼───────────────────────────────┐ │
│ │ hap_verify.cpp ▼ │ │
│ │ HapVerifyImpl() ┌───────────────────────────┐ │ │
│ │ ┌───────────│ ProvisionVerify::Verify │ │ │
│ │ │ └───────────────────────────┘ │ │
│ │ │ │ │ │
│ │ │ ┌───────────┴───────────┐ │ │
│ │ │ ▼ ▼ │ │
│ │ │ 解析 .p7b 验证证书链 │ │
│ │ │ (CMS PKCS#7) RootCA→SubCA→Profile │ │
│ │ │ │ │ │ │
│ │ │ │ 提取 bundle-info │ │ │
│ │ │ │ (bundle-name, │ │ │
│ │ │ │ app-feature, apl) │ │ │
│ │ │ │ │ │ │
│ │ │ └───────────┬───────────┘ │ │
│ │ │ ▼ │ │
│ │ │ ┌────────────────────────────┐ │ │
│ │ ├──│ HapVerifyV2::Verify │ │ │
│ │ │ │ · app-identifier 匹配 │ │ │
│ │ │ │ · app-feature 验证 │ │ │
│ │ │ │ · APL 权限级别校验 │ │ │
│ │ │ │ · ACL 授权权限校验 │ │ │
│ │ │ └────────────────────────────┘ │ │
│ │ │ │ │
│ │ │ ┌────────────────────────────┐ │ │
│ │ └──│ CertificateVerify::Verify │ │ │
│ │ │ · 应用证书链验证 │ │ │
│ │ │ · 证书有效期检查 │ │ │
│ │ └────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ HapSigningBlockUtils::ParseSignatureBlock │ │ │
│ │ │ · HapInfoSegment (HAP 基本信息) │ │ │
│ │ │ · CodeSignBlock (代码签名) │ │ │
│ │ │ · NativeLibInfoSegment (原生库信息) │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────┐ │
│ │ 验签结果: 允许/拒绝安装 │ │
│ └────────────────┘ │
└─────────────────────────────────────────────────────────────┘
第一步: sign-profile (签名 Profile / Provision)
Unsigned Profile JSON → P7b (CMS 签名包)
第二步: sign-app (签名 HAP)
Unsigned HAP + App Cert + P7b → Signed HAP
签名的核心工具是 hap-sign-tool.jar(位于 developtools/hapsigner/)。
1.2 签名核心文件位置
|| 路径 | 用途 |
||------|------|
|| developtools/hapsigner/autosign/ | 自动签名脚本和配置 |
|| developtools/hapsigner/hapsigntool/ | 签名工具 Java 源码 |
|| prebuilts/ohos-sdk/linux/26/toolchains/lib/hap-sign-tool.jar | 编译好的签名工具 |
|| base/security/appverify/ | 运行时验签模块 (C++) |
1.3 两步签名流程详解
第一步:签名 Profile(生成 .p7b)
Profile 是应用的元数据配置文件,包含应用的基本信息、权限声明、签名信息等。
命令:
java -jar hap-sign-tool.jar sign-profile \
-keyAlias "openharmony application profile release" \
-signAlg "SHA256withECDSA" \
-mode "localSign" \
-profileCertFile OpenHarmonyProfileRelease.pem \
-inFile <unsigned_profile.json> \
-keystoreFile OpenHarmony.p12 \
-outFile openharmony.p7b \
-keyPwd 123456 \
-keystorePwd 123456
输入的 Profile JSON 模板结构(UnsgnedReleasedProfileTemplate.json):
{
"version-name": "2.0.0",
"version-code": 2,
"app-distribution-type": "os_integration",
"uuid": "5027b99e-5f9e-465d-9508-a9e0134ffe18",
"validity": {
"not-before": 1594865258,
"not-after": 1689473258
},
"type": "release",
"bundle-info": {
"developer-id": "OpenHarmony",
"distribution-certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n",
"bundle-name": "com.ohos.settings",
"apl": "system_core",
"app-feature": "hos_system_app"
},
"acls": {
"allowed-acls": [
"ohos.permission.LISTEN_BUNDLE_CHANGE",
"ohos.permission.INSTALL_BUNDLE"
]
},
"permissions": {
"restricted-permissions": []
},
"issuer": "pki_internal"
}
第二步:签名 HAP(使用 .p7b)
java -jar hap-sign-tool.jar sign-app \
-keyAlias "openharmony application release" \
-signAlg "SHA256withECDSA" \
-mode "localSign" \
-appCertFile OpenHarmonyApplication.pem \
-profileFile openharmony.p7b \
-inFile <unsigned.hap> \
-keystoreFile OpenHarmony.p12 \
-outFile <signed.hap> \
-keyPwd 123456 \
-keystorePwd 123456
1.4 证书链结构
OpenHarmony 采用三级证书链:
Root CA (rootCA.cer)
├── 自签名
└── CN=OpenHarmony Application Root CA
└── Sub CA (subCA.cer)
├── 由 Root CA 签发
└── CN=OpenHarmony Application CA
└── Application Certificate (OpenHarmonyApplication.pem)
├── 由 Sub CA 签发
└── 用于签名 HAP 包体
└── Profile Certificate (OpenHarmonyProfileRelease.pem)
├── 由 Sub CA 签发
└── 用于签名 .p7b Provision 文件
签名的密钥库文件:
OpenHarmony.p12— PKCS#12 密钥库,包含私钥rootCA.cer— 根证书subCA.cer— 子证书OpenHarmonyApplication.pem— 应用证书OpenHarmonyProfileRelease.pem— Profile 签名证书
附:.pem 与 .cer 的关系
.pem 和 .cer 本质上是相同的东西——都是 X.509 证书,只是格式约定不同:
.pem |
.cer |
|
|---|---|---|
| 编码方式 | PEM(Base64 + 头尾标记,可读文本) | DER(二进制)或 PEM |
| 内容示例 | -----BEGIN CERTIFICATE-----\nMIIC...\n-----END CERTIFICATE----- |
二进制或同样的 PEM 文本 |
| OpenSSL 读取 | openssl x509 -in file.pem -text |
openssl x509 -in file.cer -text(自动识别) |
核心区别:
.p12— PKCS#12,含私钥的密钥库.pem/.cer— 不含私钥,仅含公钥证书,用于验证签名
两者可以互相改名使用,内容完全等价。OpenHarmony 中的命名惯例:
- 密钥库 →
.p12 - 证书 →
.pem/.cer(混用,工具均能识别) - 签名包 →
.p7b
1.5 HAP 文件格式(签名块结构)
HAP 本质是 ZIP 格式,包含 4 个区段:
[Zip Entry Contents] ← 应用的代码和资源
↓
[HAP Signatures Block] ← 签名数据(核心)
↓
[Central Directory] ← ZIP 目录
↓
[End of Central Directory] ← ZIP 结束标记
签名块魔数(Magic Number):
| 版本 | LOW | HIGH |
|---|---|---|
| 新版 | 7451613641622775868 |
4497797983070462062 |
| 旧版 | 2334950737560224072 |
3617552046287187010 |
签名块包含的 Segment:
| Segment | 说明 |
|---|---|
HapInfoSegment |
HAP 基本信息 |
CodeSignBlock |
代码签名块(ELF/Machine Code 签名) |
NativeLibInfoSegment |
原生库信息 |
1.6 Provision (Profile) 关键字段说明
Profile 是 .p7b 签名包中的核心元数据,包含以下关键字段:
| 字段 | 说明 | 示例值 |
|---|---|---|
type |
构建类型 | "debug" / "release" |
bundle-name |
应用包名 | "com.ohos.settings" |
developer-id |
开发者标识 | "OpenHarmony" |
app-feature |
应用类型 | "hos_system_app" / "hos_normal_app" |
apl |
权限级别 | "system_core" / "system_basic" / "normal" |
app-identifier |
应用唯一标识(32字符) | "5765880207854616753" |
distribution-certificate |
分发证书(PEM 格式) | "-----BEGIN CERTIFICATE-----\n..." |
validity.not-before |
生效时间戳 | 1594865258 |
validity.not-after |
失效时间戳 | 1689473258 |
allowed-acls |
授权的 ACL 权限列表 | ["ohos.permission.INSTALL_BUNDLE", ...] |
app-feature 两种值:
| 值 | 含义 |
|---|---|
hos_system_app |
系统应用(随系统镜像发布) |
hos_normal_app |
普通应用(应用市场安装) |
apl(Ability Privilege Level)三种值:
| 值 | 权限级别 | 说明 |
|---|---|---|
normal |
Normal | 普通应用权限 |
system_basic |
System Basic | 系统基础应用权限 |
system_core |
System Core | 系统核心应用权限(最高) |
1.7 运行时验签流程
验签模块位于 base/security/appverify/(C++ 实现)。
验签入口
base/security/appverify/interfaces/innerkits/appverify/src/interfaces/hap_verify.cpp
验签模块结构
| 文件 | 职责 |
|---|---|
hap_signing_block_utils.cpp |
定位和解析 HAP 中的签名块 |
hap_profile_verify_utils.cpp |
验证 Profile 内容合法性 |
hap_cert_verify_openssl_utils.cpp |
用 OpenSSL 验证证书链 |
hap_verify_hitls_utils.cpp |
用 HITLS(华为 TLS)验证证书链 |
provision/provision_verify.h |
Provision 结构体验证 |
trusted_root_ca.cpp |
可信根证书管理 |
trusted_source_manager.cpp |
可信源管理器 |
trusted_ticket_manager.cpp |
Ticket 票据管理 |
hap_crl_manager.cpp |
证书吊销列表管理 |
验签流程图
HAP File
│
├─→ HapSigningBlockUtils::FindHapSignature()
│ 定位 ZIP EOCD → Central Directory → 签名块
│
├─→ HapSigningBlockUtils::ParseSignatureBlock()
│ 解析签名块结构
│ ├── HapInfoSegment (HAP基本信息)
│ ├── CodeSignBlock (代码签名)
│ └── NativeLibInfoSegment (原生库信息)
│
├─→ HapVerifyImpl()
│ │
│ ├─→ ProvisionVerify::VerifyProvision()
│ │ ├─→ 解析 .p7b (CMS PKCS#7 签名)
│ │ ├─→ 验证证书链 (Root CA → Sub CA → Profile Cert)
│ │ ├─→ 验证签名
│ │ ├─→ 提取 bundle-info
│ │ └─→ 检查 validity 时间范围
│ │
│ ├─→ CertificateVerify::VerifyCertificate()
│ │ ├─→ 验证应用证书链
│ │ └─→ 检查证书有效期
│ │
│ └─→ HapVerifyV2::Verify()
│ ├─→ app-identifier 匹配检查
│ ├─→ app-feature 验证 (system vs normal)
│ ├─→ APL 权限级别校验
│ └─→ ACL 授权权限校验
│
└─→ 验签结果: 允许安装 / 拒绝安装
App-Identifier 的解析逻辑
关键代码在 HapUtils.java:
public static String getAppIdentifier(String profileContent) {
Pair<String, String> resultPair = parseAppIdentifier(profileContent);
String ownerID = resultPair.getFirst(); // app-identifier
String profileType = resultPair.getSecond(); // debug / release
if ("debug".equals(profileType)) {
return HAP_DEBUG_OWNER_ID; // "DEBUG_LIB_ID"
} else if ("release".equals(profileType)) {
return ownerID; // 实际 32 字符 app-identifier
}
}
1.8 系统应用签名示例:settings.p7b
applications/standard/settings/signature/settings.p7b 是 Settings 系统应用的 Provision 签名包。
从中提取的明文内容:
{
"version-name": "2.0.0",
"version-code": 2,
"app-distribution-type": "os_integration",
"uuid": "5027b99e-5f9e-465d-9508-a9e0134ffe18",
"validity": {
"not-before": 1594865258,
"not-after": 1689473258
},
"type": "release",
"bundle-info": {
"developer-id": "OpenHarmony",
"distribution-certificate": "-----BEGIN CERTIFICATE-----\nMIICFTCCAZugAwIBAgIIZse0c5GblV4w...\n-----END CERTIFICATE-----\n",
"bundle-name": "com.ohos.settings",
"apl": "system_core",
"app-feature": "hos_system_app"
},
"acls": {
"allowed-acls": [
"ohos.permission.LISTEN_BUNDLE_CHANGE",
"ohos.permission.WRITE_ACCESSIBILITY_CONFIG",
"ohos.permission.INSTALL_BUNDLE",
"ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS_EXTENSION",
"ohos.permission.MANAGE_WIFI_CONNECTION",
"ohos.permission.GET_WIFI_INFO_INTERNAL",
"ohos.permission.GET_WIFI_PEERS_MAC",
"ohos.permission.START_INVISIBLE_ABILITY",
"ohos.permission.GET_INSTALLED_BUNDLE_LIST"
]
},
"permissions": {
"restricted-permissions": []
},
"issuer": "pki_internal"
}
关键观察:
app-feature: hos_system_app— 声明为系统应用apl: system_core— 系统核心权限级别app-distribution-type: os_integration— OS 集成分发类型
二、如何自定义系统签名
2.1 签名工具准备
方式一:使用预编译的 jar
# SDK 自带
ls prebuilts/ohos-sdk/linux/26/toolchains/lib/hap-sign-tool.jar
# 源码中的
ls developtools/hapsigner/dist/hap-sign-tool.jar
方式二:从源码编译
cd developtools/hapsigner/hapsigntool/hap_sign_tool
./gradlew build
# 产物在 build/libs/hap-sign-tool.jar
签名脚本位置
developtools/hapsigner/autosign/
├── autosign.py # Python 签名主脚本
├── autosign.config # 通用配置文件
├── createAppCertAndProfile.config # OpenHarmony 官方证书配置
├── UnsgnedReleasedProfileTemplate.json # Provision 模板
├── create_root.sh # Step1: 创建根证书
├── create_appcert_sign_profile.sh # Step2: 创建应用证书 + 签名 p7b
├── sign_hap.sh # Step3: 给 HAP 签名
└── result/ # 生成的证书和签名文件
├── OpenHarmony.p12
├── rootCA.cer
├── subCA.cer
└── OpenHarmonyProfileRelease.pem
2.2 创建自定义证书链(三步完成)
Step 1: 创建根 CA 和子 CA
cd developtools/hapsigner/autosign
# 编辑自定义配置文件 my_custom.config
cat > my_custom.config << 'CONFIG'
config.signtool=../hapsigntool/hap_sign_tool/build/libs/hap-sign-tool.jar
config.targetDir=my_result
# 密钥库配置
common.keystoreFile=mycompany.p12
common.keystorePwd=MyStrongPassword
common.keyAlg=ECC
common.keySize=NIST-P-256
common.signAlg=SHA256withECDSA
common.validity=3650
common.outForm=certChain
common.mode=localSign
common.keyPwd=MyStrongPassword
common.issuerKeyPwd=MyStrongPassword
# 应用签名密钥
app.keypair.keyAlias=my-app-key-v1
app.keypair.keyPwd=MyStrongPassword
# Profile 签名密钥
profile.keypair.keyAlias=my-profile-key-v1
profile.keypair.keyPwd=MyStrongPassword
# 根CA
root-ca.keyAlias=my-root-ca-key-v1
root-ca.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany Root CA
root-ca.outFile=myRootCA.cer
# 子CA - 应用
sub-ca.app.keyAlias=my-app-srv-ca-key-v1
sub-ca.app.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany App CA
sub-ca.app.outFile=myAppCA.cer
# 子CA - Profile
sub-ca.profile.keyAlias=my-profile-srv-ca-key-v1
sub-ca.profile.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany Profile CA
sub-ca.profile.outFile=myProfileCA.cer
# 应用证书
cert.app.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany App Release
cert.app.outFile=myApp.pem
# Profile证书
cert.profile.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany Profile Release
cert.profile.outFile=myProfile.pem
# 待签名的 Provision
sign.profile.inFile=my_profile_template.json
sign.profile.outFile=my_app.p7b
# 待签名的 HAP
sign.app.inFile=my_unsigned.hap
sign.app.outFile=my_signed.hap
CONFIG
# 执行 Step 1: 创建根CA和子CA
python3 autosign.py createRootAndSubCert my_custom.config
Step 2: 准备 Provision 模板并生成签名包
创建 Provision 模板文件 my_profile_template.json:
{
"version-name": "1.0.0",
"version-code": 1,
"app-distribution-type": "os_integration",
"uuid": "用 uuidgen 生成唯一标识",
"validity": {
"not-before": 1594865258,
"not-after": 1735667258
},
"type": "release",
"bundle-info": {
"developer-id": "MyCompany",
"distribution-certificate": "-----BEGIN CERTIFICATE-----\n<先用占位符,证书在Step3自动填入>\n-----END CERTIFICATE-----\n",
"bundle-name": "com.mycompany.myapp",
"apl": "system_core",
"app-feature": "hos_system_app"
},
"acls": {
"allowed-acls": [
"ohos.permission.LISTEN_BUNDLE_CHANGE",
"ohos.permission.INSTALL_BUNDLE"
]
},
"permissions": {
"restricted-permissions": []
},
"issuer": "pki_internal"
}
关键字段说明:
| 字段 | 说明 | 定制建议 |
|---|---|---|
bundle-name |
应用包名 | 必须与 HAP 的 module.json5 中的 bundleName 一致 |
app-feature |
应用类型 | 系统应用填 hos_system_app |
apl |
权限级别 | 系统核心应用填 system_core |
app-distribution-type |
分发类型 | 系统应用填 os_integration |
type |
构建类型 | 发行版填 release |
uuid |
唯一标识 | 用 uuidgen 生成 |
allowed-acls |
ACL 权限列表 | 根据需要填写 |
执行 Step 2:生成证书并签名 Provision
python3 autosign.py createAppCertAndProfile my_custom.config
此步骤会:
- 生成应用证书
myApp.pem - 生成 Profile 证书
myProfile.pem - 自动将
distribution-certificate替换为实际证书 - 用 Profile 证书签名 Provision,生成
my_app.p7b
Step 3: 用 p7b 给 HAP 签名
python3 autosign.py signHap my_custom.config
生成签名后的 HAP 包:my_result/my_signed.hap
2.3 直接用 Java 命令签名(无需配置文件)
如果不想用 autosign.py 的流程,可以直接调用 hap-sign-tool.jar:
HAP_SIGN_TOOL=prebuilts/ohos-sdk/linux/26/toolchains/lib/hap-sign-tool.jar
KEYSTORE=my_result/mycompany.p12
PROFILE_PEM=my_result/myProfile.pem
APP_PEM=my_result/myApp.pem
# 第一步: 签名 Profile (生成 .p7b)
java -jar $HAP_SIGN_TOOL sign-profile \
-keyAlias "my-profile-key-v1" \
-signAlg "SHA256withECDSA" \
-mode "localSign" \
-profileCertFile $PROFILE_PEM \
-inFile my_profile_template.json \
-keystoreFile $KEYSTORE \
-outFile my_app.p7b \
-keyPwd MyStrongPassword \
-keystorePwd MyStrongPassword
# 第二步: 用 p7b 签名 HAP
java -jar $HAP_SIGN_TOOL sign-app \
-keyAlias "my-app-key-v1" \
-signAlg "SHA256withECDSA" \
-mode "localSign" \
-appCertFile $APP_PEM \
-profileFile my_app.p7b \
-inFile my_unsigned.hap \
-keystoreFile $KEYSTORE \
-outFile my_signed.hap \
-keyPwd MyStrongPassword \
-keystorePwd MyStrongPassword
2.4 验证签名
# 验证 HAP 签名
java -jar hap-sign-tool.jar verify-app -inFile my_signed.hap
# 验证 p7b 内容
java -jar hap-sign-tool.jar verify-profile -inFile my_app.p7b
2.5 系统应用 vs 普通应用的关键区别
签名系统应用和普通应用,唯一区别在于 Provision 模板中的两个字段:
{
"bundle-info": {
"app-feature": "hos_system_app", // 系统应用: hos_system_app
// 普通应用: hos_normal_app
"apl": "system_core" // 系统核心: system_core
// 系统基础: system_basic
// 普通应用: normal
}
}
其余签名流程完全相同。
2.6 证书链结构(自定义签名)
MyCompany Root CA (myRootCA.cer) ← 自签名根证书
│
├── MyCompany App CA (myAppCA.cer)
│ │
│ └── MyCompany App Release (myApp.pem) → 签 HAP 包体
│
└── MyCompany Profile CA (myProfileCA.cer)
│
└── MyCompany Profile Release (myProfile.pem) → 签名 .p7b
2.7 常见错误排查
| 错误信息 | 可能原因 | 解决方法 |
|---|---|---|
signature verify failed |
bundle-name 不匹配 | 确保 p7b 中 bundle-name 与 HAP 的 module.json5 中 bundleName 完全一致 |
profile expired |
Provision 过期 | 修改 validity.not-after 为未来时间 |
verify signature failed |
证书链验证失败 | 检查根证书是否在设备的可信根证书列表中 |
app-feature not match |
应用类型不匹配 | 检查 p7b 中 app-feature 是否正确 |
apl level too low |
权限级别不够 | 将 apl 改为更高等级如 system_core |
2.8 为已有系统应用更换签名
如果需要给一个已经签名的 HAP 更换签名(例如从 OpenHarmony 官方签名切换到自己的签名):
# 使用自己的证书重新签名 HAP
java -jar hap-sign-tool.jar sign-app \
-keyAlias "my-app-key-v1" \
-signAlg "SHA256withECDSA" \
-mode "localSign" \
-appCertFile my_result/myApp.pem \
-profileFile my_result/my_app.p7b \
-inFile original_signed.hap \
-keystoreFile my_result/mycompany.p12 \
-outFile new_signed.hap \
-keyPwd MyStrongPassword \
-keystorePwd MyStrongPassword
注意: 更换签名后,应用将无法覆盖安装原签名的应用,只能作为全新应用安装。如果设备系统预置了相同包名的系统应用,可能存在冲突。
附录:hap-sign-tool.jar 支持的命令
| 命令 | 说明 |
|---|---|
generate-keypair |
生成密钥对 |
generate-csr |
生成证书签名请求 (CSR) |
generate-ca |
生成 CA 证书 |
generate-app-cert |
生成应用证书 |
generate-profile-cert |
生成 Profile 证书 |
sign-profile |
签名 Provision,生成 .p7b |
sign-app |
签名 HAP 包 |
verify-profile |
验证 .p7b |
verify-app |
验证 HAP 包 |
sign-elf |
签名 ELF 可执行文件 |

浙公网安备 33010602011771号