鸿蒙中 自动签名和手动签名

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

一、调试签名

1.1 目的

调试签名用于开发调试场景,确保应用可以在真机或模拟器上运行测试。

1.2 两种签名方式

  1. 自动签名:DevEco Studio 提供的便捷方案,适用于大部分调试场景。

  2. 手动签名:开发者自行生成和管理密钥、证书,适用于特定复杂场景。

二、自动签名

2.1 两种自动签名模式

2.1.1 关联注册应用进行签名
  • 特点:与 AppGallery Connect(AGC)中的应用绑定

  • 优势:可在 DevEco Studio 内直接开通开放能力(如 Push Kit、Map Kit 等)

  • 区域限制:仅支持中国境内(不含港澳台)

2.1.2 未关联注册应用进行签名
  • 特点:不与 AGC 应用绑定

  • 限制:不支持在 DevEco Studio 开通开放能力

2.2 自动签名使用约束

适用场景
  • 一般调试场景

  • 需要快速启用开放能力(仅限关联注册模式)

必须使用手动签名的场景
  1. 跨设备调试、跨应用交互调试、断网调试、多用户共享密钥

  2. 使用部分不支持自动签名的受限开放权限

    • 部分受限 ACL 权限(如需要审批的特殊权限)

    • 需要华为业务方审核的权限(如华为账号一键登录)

  3. Kit 需要配置指纹

  4. 应用发布场景

2.3 自动签名前提条件

  • 关联注册模式:需登录华为开发者账号

  • 时间同步:确保本地系统时间与北京时间(UTC/GMT+08:00)一致

2.4 自动签名操作流程

关联注册应用模式步骤:
  1. 连接设备:连接真机或模拟器

  2. 开启签名

    • File > Project Structure > Project > Signing Configs

    • 勾选 Associate with registered application

    • 登录华为账号(如未登录)

  3. 开通开放能力(可选):

    • 点击 Enable open capabilities

    • 支持开通:Push Kit、Device status detection、Map Kit、Safety Detect

  4. 配置 ACL 权限(如需):

    • 在 module.json5 中添加 requestPermissions 字段

{
  "module": {
    "requestPermissions": [{
      "name": "ohos.permission.ACCESS_BLUETOOTH"
    }]
  }
}

  5. 权限申请处理

  • 如应用已在 AGC 申请该权限 → 继续签名

  • 如未申请 → 点击弹窗中的链接跳转 AGC 申请 → 返回重新签名

未关联应用模式步骤:
  1. 连接设备

  2. 开启签名

    • File > Project Structure > Project > Signing Configs

    • 勾选 Automatically generate signature

  3. 配置 ACL 权限(可选):

    • 调试时不强制校验,但上架时会审核

2.5 自动签名注意事项

  • 多设备连接:同时连接多个设备时,所有设备信息都会写入证书

  • 证书查看:悬停在 Provisioning Profile: DevEco Managed Profile 上可查看证书详情

  • ACL 权限申请

    • 临时证书:审批期间获取,有效期短

    • 正式证书:审批完成后获取,有效期长

三、手动签名

3.1 核心文件:

  1. 密钥文件(.p12)

    • 包含公钥和私钥,用于数字签名和验证

  2. 证书请求文件(.csr)

    • 包含公钥和开发者信息,用于向 AGC 申请数字证书

  3. 数字证书(.cer)

    • 由 AGC 颁发,证明开发者身份

  4. Profile 文件(.p7b)

    • 包含包名、证书信息、权限列表、可调试设备列表

3.2 手动签名流程

步骤一:生成密钥和证书请求文件
  1. Build > Generate Key and CSR

  2. 创建密钥库

    • Key store file:设置 .p12 文件路径和名称

    • Password:密码需包含两种以上字符类型,长度≥8位

  3. 填写密钥信息

    • Alias:密钥别名(需记住)

    • Password:与密钥库密码一致(自动填充)

  4. 设置 CSR 路径:指定证书请求文件保存位置

  5. 点击 Finish 生成文件

步骤二:申请调试证书
  • 登录 AGC → 申请调试证书 → 下载 .cer 文件

  • 如未注册应用,需先在 AGC 创建 HarmonyOS 应用

步骤三:申请 Profile 文件和配置权限
  1. 申请 ACL 权限(如需):

    • 在 AGC 中申请受限开放权限

    • 重要:确保申请的场景和功能信息准确,否则影响上架

  2. 本地配置权限

    • 在 module.json5 中添加相应权限声明

  3. 申请 Profile 文件

    • 在 AGC 中申请调试 Profile → 下载 .p7b 文件

步骤四:配置签名信息
  1. 连接真机设备

  2. 配置签名参数

    • File > Project Structure > Project > Signing Configs

    • 取消勾选自动签名选项

    • 填写以下信息:

      字段说明
      Store file选择生成的 .p12 文件
      Store password密钥库密码
      Key alias密钥别名
      Key password密钥密码(与 Store password 一致)
      Sign algSHA256withECDSA(固定)
      Profile file选择 .p7b 文件
      Certpath file选择 .cer 文件
  3. 文件配套:密钥库文件、密码、Profile、证书必须配套使用

  4. 路径支持:支持相对路径(以项目根目录为起点)

3.3 查看签名配置

  • 悬停查看:悬停在 Provisioning Profile 上查看详细信息

  • 文件查看:在工程级 build-profile.json5 文件的 signingConfigs 中查看配置

四、签名对比

特性自动签名手动签名
适用场景一般调试复杂调试、跨设备、跨应用、发布
开放能力关联模式支持直接开通需在 AGC 单独配置
权限管理支持自动申请部分 ACL 权限需在 AGC 手动申请所有权限
证书管理由 DevEco Studio 自动管理开发者自行生成和管理
区域限制关联模式仅限中国境内无限制
设备绑定自动绑定连接的设备需在 AGC 配置调试设备列表

五、注意事项

5.1 时间同步

  • 自动签名前必须确保本地时间与北京时间一致

5.2 权限申请

  • 受限权限:只有符合特殊场景的应用才能申请

  • 申请准确性:使用场景和功能描述必须准确,否则上架会被驳回

  • 临时证书:审批期间使用,到期需重新申请

5.3 签名失败处理

  • 文件配套:确保 .p12、.p7b、.cer 文件配套使用

  • 密码一致:Store password、Key password 必须一致

  • 别名正确:Key alias 必须与生成时填写的完全一致

5.4 调试与发布分离

  • 调试签名:用于开发测试,设备列表有限制

  • 发布签名:必须使用手动签名,需申请发布证书和 Profile

<think>好的,我现在需要帮助用户了解如何在命令行中为HarmonyOS应用配置签名。用户之前已经询问过初始化HarmonyOS 5工程的步骤,现在他们想进一步了解签名配置。根据用户提供的引用内容,特别是引用[1][4],签名是确保应用安全性安装到真机的必要步骤,同时提到了使用hdc工具安装HAP文件。 首先,我需要回忆HarmonyOS签名配置的基本流程。通常,签名涉及生成密钥证书请求文件,然后获取签名证书Profile文件。用户希望使用命令行完成这些步骤,这可能涉及到官方提供的工具,比如keytool或者鸿蒙特定的命令行工具。 接下来,根据引用[1]中的信息,签名信息包括生成签名证书、配置签名文件以及在开发环境中应用签名。用户现在需要在命令行中完成这些步骤,而不是通过DevEco Studio的图形界面。因此,我需要查找相关的命令行工具步骤。例如,是否可以使用Java的keytool来生成密钥库,然后使用鸿蒙的命令行工具来生成证书请求最终的签名文件? 另外,引用[4]提到hdc工具用于安装HAP文件,这可能是在签名之后的步骤。但用户的问题是关于签名配置,所以重点应放在生成签名文件配置项目以使用这些文件。 我需要确保步骤正确,包括生成密钥库、证书请求、获取签名证书Profile文件,然后在项目中配置这些文件。同时,用户可能需要编辑构建配置文件(如build-profile.json5)来指定签名信息。可能还需要使用hvigor或ohpm命令来集成签名配置到构建流程中。 还需要注意用户可能的环境问题,比如是否已经安装了Java JDK,因为keytool是JDK的一部分。另外,确保用户了解如何从华为开发者平台获取签名证书Profile文件,这可能涉及到开发者账号的注册应用创建步骤。 可能存在的挑战是如何将图形界面中的步骤转化为命令行操作,例如,生成CSR文件通常需要填写一些信息,如组织名称、地区等,这些在命令行中如何指定?此外,构建工具hvigor是否支持通过命令行参数指定签名配置,或者需要手动修改配置文件? 最后,需要验证这些步骤是否正确,确保生成的HAP文件能够被正确签名并安装到真机。可能需要参考官方文档或社区资源来确认命令行签名的最佳实践。</think>### HarmonyOS 应用命令行配置签名完整教程 根据 HarmonyOS 签名机制与站内引用内容[^1][^2][^4],以下是**完全通过命令行**实现应用签名的详细步骤: --- #### **1. 生成密钥库文件** 使用 Java 原生工具 `keytool` 生成密钥库(JKS 格式): ```bash keytool -genkeypair -alias "harmony_key" -keyalg RSA -keysize 2048 -validity 9125 -keystore harmony.jks -storepass 密码 -keypass 密码 ``` **参数说明**: - `-alias`: 密钥别名(自定义) - `-keystore`: 生成的密钥库文件名(如 `harmony.jks`) - `-validity`: 有效期天数(建议 ≥ 9125) --- #### **2. 生成证书请求文件(CSR)** 基于密钥库生成 CSR 文件(用于申请签名证书): ```bash keytool -certreq -alias harmony_key -keystore harmony.jks -file harmony_cert.csr -storepass 密码 ``` 输出文件 `harmony_cert.csr` 需提交至 [华为开发者联盟](https://developer.harmonyos.com) 后台申请签名证书[^1]。 --- #### **3. 配置签名证书与Profile** - **下载证书文件** 在开发者平台完成 CSR 验证后,获取: - **签名证书**(`.cer` 或 `.p7b`) - **Profile文件**(`.p7b`) - **文件存放路径** 将证书文件保存至项目目录: ``` my_harmony_project/signing/ ├── harmony.cer # 签名证书 └── harmony_profile.p7b # Profile文件 ``` --- #### **4. 修改构建配置文件** 编辑项目根目录的 `build-profile.json5`,添加签名配置: ```json5 "signingConfigs": [{ "name": "release", "material": { "certpath": "signing/harmony.cer", // 证书路径 "profile": "signing/harmony_profile.p7b", // Profile路径 "storePassword": "密码", // 密钥库密码 "keyAlias": "harmony_key", "keyPassword": "密码", // 密钥密码 "storeFile": "signing/harmony.jks" // 密钥库文件 } }] ``` --- #### **5. 命令行构建签名包** 通过 `hvigor` 指定签名配置构建 HAP: ```bash hvigorw assembleHap --signingConfig release ``` 构建成功后,签名后的 HAP 文件将生成在 `build/outputs/default/` 目录下[^3]。 --- #### **6. 真机安装验证** 使用 `hdc` 工具安装签名后的 HAP(需设备已开启开发者模式): ```bash hdc install build/outputs/default/my_harmony_project-signed.hap hdc shell aa start -a EntryAbility # 启动应用 ``` **注意**:若安装失败,检查证书与设备 UDID 是否在 Profile 中注册[^1]。 --- #### **关键问题解答** 1. **为何必须配置签名?** HarmonyOS 要求所有真机安装的 HAP 必须经过官方证书签名,确保应用来源可信[^1]。 2. **如何自动签名流程?** 可将密钥库密码写入 `local.properties`(需.gitignore)并通过脚本自动读取: ```bash # local.properties storePassword=your_password keyPassword=your_password ``` 3. **多环境签名管理** 在 `build-profile.json5` 中定义多个 `signingConfigs`(如 debug/release),通过命令切换: ```bash hvigorw assembleHap --signingConfig debug ``` --- ### 相关问题 1. **如何为不同渠道包配置独立签名?** 2. **签名证书过期后如何更新?** 3. **命令行如何验证 HAP 文件签名状态?** 如需更深入的调试技巧或异常处理方案,可提供具体报错信息进一步分析!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值