在鸿蒙(HarmonyOS)开发中,应用签名是调试和发布的关键步骤。签名确保应用的唯一性和安全性,未签名的应用无法安装到真机设备。以下是详细的签名操作步骤及常见问题解决方案。
### **一、签名的作用**
- **真机调试**:必须签名才能安装到华为设备。
- **应用发布**:应用上架华为应用市场需要正式的发布签名证书。
- **权限控制**:部分敏感权限(如位置、摄像头)需要签名验证。
### **二、签名方式**
鸿蒙提供 **自动签名(Auto Signing)** 和 **手动签名(Manual Signing)** 两种方式:
#### **1. 自动签名(推荐)**
适用于快速调试,由DevEco Studio自动生成调试证书(仅限测试)。
**步骤**:
1. **打开项目**:在DevEco Studio中打开项目。
2. **配置签名**:
- 点击顶部菜单 **File → Project Structure → Project → Signing Configs**。
- 勾选 **Automatically generate signing**(自动生成签名)。
- 输入 **Key Store Password** 和 **Key Alias Password**(建议密码统一,例如 `123456`)。
- 点击 **OK**,系统自动生成调试证书(存储在用户目录的 `.ohos\config` 文件夹)。
3. **同步配置**
- 点击 **Sync Now** 同步项目,签名信息会自动写入 `build-profile.json5` 文件。
#### **2. 手动签名**
适用于正式发布或团队协作(需使用同一证书)。
**步骤**:
1. **生成密钥和证书请求文件(CSR)**
- 打开DevEco Studio,点击 **Tools → SDK Manager → HarmonyOS SDK → Tools**。
- 安装 **OpenHarmony SDK Toolchains**(如果未安装)。
- 使用命令行工具生成密钥:
```bash
keytool -genkeypair -alias "your_alias" -keyalg EC -sigalg SHA256withECDSA -keystore your_keystore.p12 -storetype pkcs12 -validity 3650 -keysize 256 -storepass 123456
```
- `-alias`:密钥别名(自定义,如 `mykey`)。
- `-keystore`:生成的.p12证书文件路径(如 `C:\mykey.p12`)。
- `-storepass`:密钥库密码(需记住)。
2. **申请正式证书**
- 登录 [华为开发者联盟](https://developer.huawei.com/consumer/cn/),进入 **AppGallery Connect → 我的项目 → 项目设置 → HarmonyOS应用**。
- 上传 `.p12` 文件和 `.csr`(证书请求文件),生成正式签名证书(.cer)。
3. **配置手动签名**
- 在 **Project Structure → Signing Configs** 中,取消勾选自动签名。
- 填写以下信息:
- **Signing Certificate**:选择 `.p12` 文件。
- **Certificate Profile**:选择华为后台下载的 `.cer` 文件。
- **Key Alias** 和 **Password**:与生成密钥时填写的一致。
---
### **三、常见问题及解决方案**
#### **1. 签名失败:证书无效或密码错误**
- **现象**:`Error: Signing failed. Invalid keystore format or password.`
- **原因**:
- 密码输入错误(区分大小写)。
- 证书文件损坏或格式错误(需为 `.p12` 格式)。
- **解决**:
- 重新生成密钥,确保密码正确。
- 检查证书路径是否含中文或特殊字符(建议全英文路径)。
#### **2. 调试证书过期**
- **现象**:`Error: Debug certificate has expired.`
- **原因**:自动生成的调试证书默认有效期1年,过期后需重新生成。
- **解决**:
- 删除旧证书:进入 `用户目录\.ohos\config`,删除 `auto_debug_xxxx.cer` 和 `.p12` 文件。
- 重启DevEco Studio,重新勾选自动签名生成新证书。
#### **3. 设备提示“未授权应用”**
- **现象**:安装应用时提示“未授权应用无法安装”。
- **原因**:未启用 **“允许安装来自未知来源的应用”**。
- **解决**:
- 进入手机 **设置 → 安全 → 更多安全设置 → 安装外部来源应用**,允许通过USB安装。
#### **4. 签名与包名不匹配**
- **现象**:`Failure [INSTALL_FAILED_VERIFY_APP_PK_INVALID]`
- **原因**:修改了应用包名(`bundleName`)但未更新签名。
- **解决**:
- 在 `entry\src\main\module.json5` 中检查 `bundleName`,确保与签名证书绑定的包名一致。
- 若需修改包名,需重新生成证书并绑定。
#### **5. 多设备签名冲突**
- **现象**:同一应用在不同设备上安装失败。
- **原因**:不同设备需要相同签名证书。
- **解决**:
- 团队开发时共享同一 `.p12` 和 `.cer` 文件,并统一配置签名信息。
---
### **四、最佳实践**
1. **备份证书**:将 `.p12` 和 `.cer` 文件保存在安全位置,避免丢失。
2. **区分环境**:
- 调试阶段使用 **自动签名**。
- 发布时切换为 **手动签名**(使用华为后台申请的正式证书)。
3. **定期更新调试证书**:避免因过期导致调试失败。
---
### **五、参考文档**
- 华为官方签名指南:[应用签名](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404)
- 证书管理工具:[Keytool使用指南](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html)
---
完成签名配置后,即可通过USB连接真机或使用远程模拟器调试应用。如果仍遇到问题,建议在华为开发者论坛([https://forums.developer.huawei.com](https://forums.developer.huawei.com))搜索或提问。