往期知识点整理
背景介绍
Android应用的签名只需要一个签名文件,在开发环境中我们默认是用debug签名,debug签名,debug签名别名是androiddebugkey
,密码是android
,调试证书存储在用户目录下的.android
文件夹中,证书文件通常命名为debug.keystore
,在build.gradle中不用专门配置调试签名。HarmonyOS Next采用了类似于iOS签名机制,工程中的签名配置信息在工程级build-profile.json5中,如果使用自动签名,本地生成的签名配置路径会自动更新到build-profile.json5中,这样带来一个问题每人生成的签名路径不一致,在多人协作时build-profile.json5 无法配置git忽略,又无法保持一致。
在Develop Beta6之前,通过在工程中创建sign签名文件夹,使用我自己账号自动签名生成签名文件,将签名文件拷贝到sign文件夹中,别人也可以用我的签名进行开发调试。但是在Develop Beta6开始,共用自动签名生成的签名会导致真机安装失败:
09/06 18:10:04:702: $ hdc shell bm install -p data/local/tmp/140f0b9059b04d8286941346c79d8f7b in 304 ms
Install Failed: error: failed to install bundle.
code:9568322
error: signature verification failed due to not trusted app source.
View detailed instructions.
09/06 18:10:04:791: $ hdc shell rm -rf data/local/tmp/140f0b9059b04d8286941346c79d8f7b
09/06 18:10:04:792: Launch com.qingkouwei.demo failed, starting handle failure progress
Error while Deploy Hap
因为随着HarmonyOS 系统的迭代逐步趋于稳定,系统开始加强了安全,安装的时候会校验签名的udid和手机的udid是否一致,这样只能继续自动签名,得找到一种彻底的解决方案了。
HarmonyOS 签名机制
要解决问题必须了解签名原理,先来看看自动签名生成的文件有哪些:
.p12
:密钥,p12证书全称是PKCS#12(Public-Key Cryptography Standards:公钥加密标准,PKCS#12是一种交换数字证书的加密标准,用来描述个人身份信息,包含非对称加密中使用的公钥和私钥,存储在密钥库文件中,公钥和私钥对用于数字签名和验证。.csr
:证书请求文件,全称为Certificate Signing Request,包含密钥对中的公钥和公共名称、组织名称、组织单位等信息,用于向AppGallery Connect申请数字证书。.cer
:数字证书,由华为AppGallery Connect颁发。.p7b
:Profile文件,包含HarmonyOS应用/服务的包名、数字证书信息、描述应用/服务允许申请的证书权限列表,以及允许应用/服务调试的设备列表(如果应用/服务类型为Release类型,则设备列表为空)等内容,每个应用/服务包中均必须包含一个Profile文件。material
文件夹:存放签名方案相关材料,如密码、证书等
P12文件和csr文件是本地生成的,用于上传到AppGallery Connect平台申请证书和p7b文件,material文件夹作用后续介绍。
使用AppGallery Connect平台调试证书
AppGallery Connect平台提供了调试证书,我们可以本地生成秘钥,在AppGallery Connect平台生成调试证书后方在应用工程的sign文件夹下,配置统一签名文件,将其他开发者使用的设备ID添加到调试Profile即可,下面介绍如何生成调试证书。
生成p12秘钥
DevEco Studio提供了生成p12秘钥的工具,在主菜单栏单击Build > Generate Key and CSR:
生成秘钥配置:
Key store file选择生成秘钥文件的路径及文件名,文件名以.p12
结尾:
下一步选择csr文件路径:
完成后会得到:
- qingkouwei.csr
- qingkouwei.p12
- material文件夹。
申请调试证书和调试profile
证书是为HarmonyOS应用/元服务配置签名信息的数字证书,可保障软件代码完整性和发布者身份真实性。证书格式为.cer,包含公钥、证书指纹等信息。申请调试证书参考文档:申请调试证书 Profile格式为.p7b,包含HarmonyOS应用/元服务的包名、数字证书信息、HarmonyOS应用/元服务允许申请的证书权限列表,以及允许应用/元服务调试的设备列表(如果应用/元服务类型为Release类型,则设备列表为空)等内容。每个HarmonyOS应用/元服务包中均必须包含一个Profile文件。
将下载的.p7b与cer文件考本到sign文件夹,在build-profile.json中配置签名信息即可:
这里注意storePassword不是我们上面生成签名时的密码,怎么获取这个密码呢?我们可以通过项目工具-签名工具配置签名信息,这样会自动获取到storePassword,这也是签名提到material文件夹的作用。
这里要注意,生成签名时需要先在AppGallery Connect平台生成APPID:
此外还有一下几点注意点:
- 使用自动签名前,请确保本地系统时间与北京时间(UTC/GMT +8.00)保持一致。如果不一致,将导致签名失败。
- 每个账号最多可申请两个调试证书,自动签名占用名额调试证书额度,如果AppGallery Connect平台已经创建了两个调试证书,那么该账号后续自动签名会失败。
- 证书申请成功即为“生效”状态。若证书状态变为“失效”或“已吊销”,表示当前证书已不可用,且通过此证书申请的Profile也会全部失效或吊销。您需要重新申请证书与Profile。证书一旦废除将不可恢复,且通过此证书申请的Profile也会全部失效,请谨慎操作。
- 一个应用最多可申请100个Profile文件。
- 修改调试设备后,会生成新的调试Profile,请在生效后重新下载调试Profile
- 若Profile状态变为“失效”或“已吊销”,表示当前Profile已不可用,您需要重新申请Profile。
- 可以通过命令
hdc shell bm get --udid命令
获取手机的udid。
总结
本文介绍了HarmonyOS 的签名机制,以及开发过程中如何处理协作开发签名冲突管理问题。
最后
总是有很多小伙伴反馈说:鸿蒙开发不知道学习哪些技术?不知道需要重点掌握哪些鸿蒙开发知识点? 为了解决大家这些学习烦恼。在这准备了一份很实用的鸿蒙全栈开发学习路线与学习文档给大家用来跟着学习。
针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植……等)技术知识点。
《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview
如何快速入门?
1.基本概念
2.构建第一个ArkTS应用
3.……
鸿蒙开发面试真题(含参考答案):
《OpenHarmony源码解析》:
- 搭建开发环境
- Windows 开发环境的搭建
- Ubuntu 开发环境搭建
- Linux 与 Windows 之间的文件共享
- ……
- 系统架构分析
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……