1.4.5 应用签名与真机运行
上面的运行方式是在模拟器中的,程序可以直接打包运行。但是,如果想在真机上进行运行调试,或将应用发布到华为应用商店,就需要向华为官方申请证书,对应用进行签名。HarmonyOS应用通过数字证书(.cer文件)和Profile文件(.p7b文件)来保证应用的完整性。在获得上述两个文件前,需要在DevEco Studio 中生成密钥文件(.p12 文件)和证书请求文件(.csr 文件),通过华为AppGallery Connect平台来签发与设备绑定的证书和授权文件。证书中包含了程序包名称、运行设备的UDID,以保证应用可运行在指定的设备上。
应用的密钥文件的格式为.p12,密钥文件用于数字签名和验证。证书请求文件的格式为.csr(Certificate Signing Request),证书请求文件包含密钥对中的公钥和公共名称、组织名称、组织单位等信息,用于向AppGallery Connect平台申请数字证书。数字证书的格式为.cer。它是由开发者使用.csr 文件向华为AppGallery Connect 平台申请的。Profile 文件的格式为.p7b,Profile 文件包含HarmonyOS应用的包名、数字证书信息、描述应用允许申请的证书权限列表,以及允许应用调试的设备列表。
签名的流程如下:首先,由DevEco Studio生成.csr文件和.p12文件,然后登录 AppGallery Connect 后台,上传.csr 文件,换取.cer 文件。接着,再登录AppGallery Connect 后台配置应用的包名、要安装到的设备 UDID,下载.p7b文件。最终需要配置到项目中的三个文件为.p12、.p7b、.cer。证书获取流程如图1-69所示。
图1-69 证书获取流程
下面详细介绍各个步骤的实现方式。
1.配置.p12与.csr文件
新建HarmonyOS项目,在项目菜单栏中点击“Build”→“Generate Key and CSR”选项,在弹出的对话框中,首先新建.p12文件,在“Key Store File(*.p12)”选项中点击“New”按钮,创建新的.p12 文件,弹出的对话框中第一项为.p12文件的存储路径和文件名,第二项和第三项为.p12文件的密码。密码至少为8位,且包含小写字母、大写字母、数字和特殊符号中的两种,如图1-70所示。
图1-70 生成.p12文件
然后,将其他信息补全,用于生成.csr文件,包括数字证书别名(Alias)、有效期(Validity)。在“Certificate”选区中至少需要填一项,其中包括作者姓名(First and Last Name)、单位名称(Organizational Unit和Organization)、所在城市(City Or Locality)、所在省份(State Or Province)、国家码(Country Code),如图1-71所示。
图1-71 Generate Key
(1)Alias:密钥的别名信息。Alias 用于标识密钥名称。需要记住该别名信息,在后续签名配置时需要使用。
(2)Password:密钥对应的密码。此处与密钥库密码保持一致,无须手动输入。
(3)Validity:证书有效期。建议设置为 25年及以上,覆盖应用的完整生命周期。
(4)Certificate:输入证书的基本信息,如组织、城市、地区、国家码等。
在填写完成后,点击“Next”按钮,生成.csr 文件,需要为.csr 文件指定别名和存储路径。填写完成后,点击“Finish”按钮,如果给出如图1-72所示的提示,说明.csr文件生成成功了。
2.获取.cer文件
登录AppGallery Connect后台,在AppGallery Connect首页找到“用户与访问”选项,在左侧列表中选择“证书管理”选项,在这里完成证书配置,如图1-73所示。
图1-72 生成.csr文件
图1-73 AppGallery Connect的证书管理
点击“新增证书”按钮,会出现如图 1-74 所示的页面,在这里需要将上面生成的.csr文件上传。
图1-74 AppGallery Connect的新增证书
点击“提交”按钮后,在页面中就可以看到刚才生成的证书。点击“下载”按钮,就获得了.cer 文件,需要保存好该文件,最终要将其配置到应用中,如图1-75所示。
图1-75 下载.cer文件
目前,AppGallery Connect最多仅支持两个调试证书,如果已达到上限,那么需要在AppGallery Connect后台的“用户与访问”→“证书管理”页面中废除多余的调试证书。
3.配置设备
需要将要运行应用的设备配置到 AppGallery Connect 后台并获得设备的UDID。UDID是一串64位的16进制字符串,可以唯一标识一台设备。下面来看如何获取设备的UDID。
在之前的内容中,已经将SDK中的HDC命令添加到环境变量中,如果这一步没有完成,请参考1.2.3节。
将手机通过USB接口连接电脑,点击“设置”→“系统和更新”→“开发人员选项”,打开 USB 调试。如果没有“开发人员选项”,那么可以在“设置”→“关于手机”里找到版本号,如图1-76所示,连续点击7次即可进入开发者模式。
图1-76 版本号
进入开发者模式,将USB调试打开,如图1-77所示。
打开命令行窗口,输入hdc shell bm get-udid命令,就可以获取设备的UDID,如图1-78所示。
然后,回到“用户与访问”页面,在左侧列表中点击“设备管理”选项,如图1-79所示。
图1-77 打开USB调试
图1-78 获取设备的UDID
图1-79 设备管理
图1-80 添加设备
这里最多允许管理100个设备,点击右上角“添加设备”按钮,在弹出的页面中添加设备名称、类型、UDID,设备名称不得超过 100 个字符,UDID是64位长度的,如图1-80所示。点击“提交”按钮,就把设备添加到了设备列表中。
4.获取.p7b文件
进入AppGallery Connect后台,在菜单栏中选择“我的项目”选项,如图1-81所示。点击“添加项目”按钮。
图1-81 我的项目
输入项目名称,最长不超过64个字符,点击“确认”按钮,如图1-82所示。
图1-82 创建项目
页面自动跳转到项目管理后台,在这个页面中,可以继续添加应用,如图1-83所示。
图1-83 项目设置
在图 1-84 所示的添加应用页面中,在“选择平台”选区中点击“APP (HarmonyOS应用)”单选按钮,在“支持设备”选区中勾选“手机”复选框,这里支持多选,可以选择支持不同的设备类型。然后,输入应用名称,配置应用包名,应用包名的配置需要和项目中config.json的bundleName保持一致。应用分类可以选择应用或游戏,这里选择应用。默认语言选择中文即可。这里输入的应用包名不能和已有的项目重复,如果重复就不被允许创建该应用。
图1-84 添加应用
点击“确认”按钮后,应用创建成功,会跳转到管理HAP Provision Profile页面,它的具体位置在“我的项目”→“HarmonyOS应用”→“HAP Provision Profile”,在这里添加HarmonyAppProvision信息,用来生成.p7b文件,如图1-85所示。
图1-85 管理HAP Provision Profile页面
在页面右上角点击“添加”按钮,弹出配置HarmonyAppProvision信息的窗口,填写名称,在“类型”选区中选择“调试”单选按钮,要和配置的证书保持一致,如图 1-86 所示。选择调试证书,在这里可以看到之前创建的证书文件。然后,选择设备,在这里也可以看到之前添加到后台的设备,如图1-87所示。
在完成选择证书和选择设备操作后,会回到图 1-86 所示的页面,点击图中的“提交”按钮,列表中就会出现证书文件,如图1-88所示。
图1-86 添加HarmonyAppProvision信息
图1-87 添加证书和设备
图1-88 添加成功
点击图 1-88 中的“下载”按钮,就可以将.p7b 文件下载到本地。
图1-89 证书
至此,我们已经获取到需要用的所有证书,如图 1-89所示。接下来将证书配置到项目中。
5.将证书配置到项目中
在DevEco Studio菜单栏中,选择“File”→“Project Structure”→“Modules”→“entry”→“Signing Configs”选项,选择Debug模式,取消勾选“Automatically generate signing”复选框。证书配置包含以下配置项。
(1)Store File(*.p12):选择密钥库文件,文件后缀为.p12。
(2)Store Password:输入密钥库密码。
(3)Key Alias:输入密钥的别名信息。
(4)Key Password:输入密钥的密码。
(5)Sign Alg:签名算法,固定为SHA256withECDSA。
(6)Profile File(*.p7b):选择申请的Profile文件,文件后缀为.p7b。
(7)Certpath File(*.cer):选择申请的数字证书文件,文件后缀为.cer。
除了Sign Alg不用填写,其他信息都要配置正确,如图1-90所示。
点击“OK”按钮,就完成了应用的证书配置。签名信息会自动写入程序entry目录下的build.gradle文件中,配置的签名信息如图1-91所示。
图1-90 证书配置
图1-91 配置的签名信息
现在应用程序便可以使用指定的真机来测试了。将真机通过 USB 接口连接电脑,DevEco Studio 会自动识别连接的设备,如图 1-92 所示。如果DevEco Studio 没有识别,那么重新进入开发者模式,确认是否已经打开了USB调试。
图1-92 设备列表
然后就可以将应用程序在真机上运行了。
你可以使用自己真实的机器安装应用,如果身边没有真机,那么也可以使用华为提供的远程真机来调试应用,如图 1-93 所示。在 HarmonyOS Device Manager中,提供了很多型号的远程真机供开发者使用。远程真机是华为提供的真实设备。其UDID的获取方式和本地是一样的。远程真机启动后,开发者可以通过 HDC 来获取远程真机的 UDID。然后,将 UDID 配置到 AppGallery Connect后台,这里不再赘述。
图1-93 远程真机