OpenHarmony开发者论坛

标题: OpenHarmony应用签名 - 系统应用签名(4.0-Release) [打印本页]

作者: tizizzz    时间: 2023-12-14 15:08
标题: OpenHarmony应用签名 - 系统应用签名(4.0-Release)
[md]# 概述

## 文档环境

开发环境:Windows 11

DevEco Studio 版本:DevEco Studio 4.0 Release(4.0.0.600)

SDK 版本:4.0.10.15(Full SDK)

开发板型号:DAYU 200(RK3568)

系统版本:OpenHarmony-4.0-Release

示例工程:[Applications\_SystemUI](https://gitee.com/openharmony/ap ... armony-4.0-Release/)

## 功能简介

OpenHarmony开源社区提供了标准系统上的部分系统应用,如桌面、SystemUI、设置等,为开发者提供了构建标准系统应用的具体实例,这些应用支持在所有标准系统的设备上使用。本篇文档将介绍如何给这些系统应用进行签名,使它们可以正确的安装和运行在OpenHarmony系统上。**本篇文档仅用于方便大家学习系统应用的开发和调试,不用做正式项目发布和商用使用**。

系统应用目前包含如下:

1.[Applications\_Launcher](https://gitee.com/openharmony/applications_launcher):Launcher 作为系统人机交互的首要入口,提供应用图标的显示、点击启动、卸载应用,并提供桌面布局设置以及最近任务管理等功能。
2.[Applications\_SystemUI](https://gitee.com/openharmony/applications_systemui):SystemUI应用是OpenHarmony中预置的系统应用,为用户提供系统相关信息展示及交互界面,包括系统状态、系统提示、系统提醒等,例如系统时间、电量信息。
3.[Applications\_Settings](https://gitee.com/openharmony/applications_settings):设置应用是 OpenHarmony 系统中预置的系统应用,为用户提供设置系统属性的交互界面,例如设置系统时间,屏幕亮度等系统属性。
4.[Applications\_Camera](https://gitee.com/openharmony/applications_camera):相机应用是OpenHarmony标准系统中预置的系统应用,为用户提供基础的相机拍摄功能,包括预览、拍照、摄像、缩略图显示、跳转相册、多机位协同。 Camera 采用纯 arkui-ts 语言开发。
5.[Applications\_Photos](https://gitee.com/openharmony/applications_photos):图库是系统内置的可视资源访问应用,提供图片和视频的管理、浏览、显示、编辑操作等功能,并支持默认相册和用户相册管理。

除以上主要系统应用之外,还预置了一些简单的示例应用,如时钟、计算器、空气质量等,可供开发者参考学习。

# 系统应用签名

我们以相对较复杂的 **Applications**\_**SystemUI** 项目为例,克隆 **SystemUI** 项目,使用 **DevEco Studio** 打开工程,查看当前工程的签名配置 **build-profile.json5**。

![image.png](https://forums-obs.openharmony.c ... prl9fr0yp5gpr0z.png "image.png")

当前默认工程是未配置签名的状态,所构建的包均为 **unsigned** 标记的HAP包,无法安装到 **OpenHarmony** 系统中,下面我们分别使用 **标准签名** 和 **自动签名** ,两种方式给 **SystemUI** 工程配置签名。

**标准签名**:配置简单,适用于工程中提供p7b签名文件的工程。

**自动签名**:配置较复杂,适用于工程中未提供p7b签名文件或p7b签名文件与系统配置不匹配的情况。

除以上两种方式外还可使用手动签名的方式生成签名文件给应用签名,此种方式更为复杂,但具有较高的灵活性,不在此篇文档中进行介绍。

## 标准签名

### 签名文件获取

拷贝 **OpenHarmony** 标准版工程签名文件到 **SystemUI** 工程的 **signature** 目录。打开[developtools\_hapsigner](https://gitee.com/openharmony/developtools_hapsigner/)仓库,进入 **dist** 目录,点击下载[OpenHarmony.p12](https://gitee.com/openharmony/de ... ist/OpenHarmony.p12)和[OpenHarmonyApplication.pem](https://gitee.com/openharmony/de ... monyApplication.pem)(pem文件若无法直接下载,可直接在目录中创建文件然后将内容拷贝到文件中)。

![](https://harmonyos.oss-cn-beijing ... 459c88ac7cdf9dc.png)

把下载好的文件放入工程目录的 **signature** 中。

![image.png](https://forums-obs.openharmony.c ... 7t0mih0cn0cvzbc.png "image.png")

### 签名文件配置

1.**DevEco Studio 4.0 Release** 版本界面化配置签名时,秘钥不允许配置8位以下纯数字秘钥,而标准签名文件的秘钥为**123456** ,所以无法通过**DevEco Studio** 界面进行签名的配置。仅能使用手动配置**build-profile.json5** 文件方式,进行签名信息的配置。下载[material包](https://ost.51cto.com/resource/2546)解压后放入**signature** 目录中,**material** 文件夹中存放的为加密盐文件,此包将给予签名工具验证秘钥时使用。

![](https://harmonyos.oss-cn-beijing ... 032ddd89ecf24d5.png)

2.配置工程根路径**build-profile.json5** 文件,拷贝以下签名信息到配置文件中,其中**storePassword** 和**keyPassword** 为**material** 包与秘钥加密生成的数据,**keyAlias** 为固定值"OpenHarmony Application Release"。

```plain
"signingConfigs": [{
    "name": "release",
    "material": {
        "storePassword": "00000016D9DCF063F0FC4BBD0E7FE1E3B06A67C07BECE1BDD4E2A3EFDAE20F890810EC02AA2A",
        "certpath": "signature/OpenHarmonyApplication.pem",
        "keyAlias": "OpenHarmony Application Release",
        "keyPassword": "00000016FD3897FD4C46940ED39FFC652872B7B18BEDCCA07400A6EBEE307C9C41B96DB6B64D",
        "profile": "signature/systemui.p7b",
        "signAlg": "SHA256withECDSA",
        "storeFile": "signature/OpenHarmony.p12"
    }
}],
```

![image.png](https://forums-obs.openharmony.c ... 6ia717uo304ys67.png "image.png")

### 构建安装验证

1.单击 **Build >Build Hap(s)/APP(s) > Build APP(s)** 构建 **SystemUI** 工程HAP包。

**SystemUI** 工程共有7个HAP包分别位于以下目录:

```plaintext
systemui_entry:
entry\phone\build\default\outputs\default\phone_entry-default-signed.hap

systemui_dialog:
product\default\dialog\build\default\outputs\default\default_dialog-phone_entry-default-signed.hap

systemui_volumepanel:
product\default\volumepanel\build\default\outputs\default\default_volumepanel-phone_entry-default-signed.hap

systemui_statusbar:
product\phone\statusbar\build\default\outputs\default\phone_statusbar-phone_entry-default-signed.hap

systemui_notificationmanagement:
product\default\notificationmanagement\build\default\outputs\default\default_notificationmanagement-phone_entry-default-signed.hap

systemui_navigationbar:
product\default\navigationBar\build\default\outputs\default\default_navigationBar-phone_entry-default-signed.hap

systemui_dropdownpanel:
product\phone\dropdownpanel\build\default\outputs\default\phone_dropdownpanel-phone_entry-default-signed.hap
```

2.使用"hdc file send {源地址} {目标地址}"命令分别把HAP包放入系统中替换当前 **SystemUI** 项目的安装包,**SystemUI** 安装包路径为 **/system/app/com.ohos.systemui/**。

> **推送文件前需先获取系统文件权限,执行"hdc shell mount -o remount,rw /"获取权限。**
>
> **hdc工具位于SDK/{Version}/toolchains/目录中。**
>
> **锁屏应用与SystemUI共包名,但属于单独工程,不在SystemUI工程中。**
>
> **此处使用 Build APP(s) 而非 Build Hap(s) ,因为 Build APP(s) 会构建出 Release 类型包,与系统预制包类型一致,如果使用 Build Hap(s) 则需删除锁屏应用。**

![image.png](https://forums-obs.openharmony.c ... 5s158hkhvzzon15.png "image.png")

3.在OpenHarmony系统 **Shell命令行** 中执行 **rm -rf /data/\* && reboot** 系统会删除所有用户数据并重启,重启后系统重新安装全部系统应用。也可通过 **bm instlal -p {HAP包地址} -u 0** 的方式单独安装某一个HAP包进行验证,不同系统应用在安装过程中存在差异。


4.在OpenHarmony系统**Shell命令行** 中使用 **bm dump -n com.ohos.systemui | grep '"name": "com.ohos.systemui.'** 或查看界面 **SystemUI** 是否启动,验证安装是否成功。

![image.png](https://forums-obs.openharmony.c ... zxe4rqo1iywtgj1.png "image.png")

以下为一键替换安装脚本,方便大家学习使用,可保存为 **shell** 或 **bat** 脚本,在 **SystemUI** 根目录下执行:

```plain
set systemui_entry=entry\phone\build\default\outputs\default\phone_entry-default-signed.hap

set systemui_dialog=product\default\dialog\build\default\outputs\default\default_dialog-phone_entry-default-signed.hap

set systemui_volumepanel=product\default\volumepanel\build\default\outputs\default\default_volumepanel-phone_entry-default-signed.hap

set systemui_statusbar=product\phone\statusbar\build\default\outputs\default\phone_statusbar-phone_entry-default-signed.hap

set systemui_notificationmanagement=product\default\notificationmanagement\build\default\outputs\default\default_notificationmanagement-phone_entry-default-signed.hap

set systemui_navigationbar=product\default\navigationBar\build\default\outputs\default\default_navigationBar-phone_entry-default-signed.hap

set systemui_dropdownpanel=product\phone\dropdownpanel\build\default\outputs\default\phone_dropdownpanel-phone_entry-default-signed.hap

set hdc=hdc

%hdc% shell mount -o remount,rw /

%hdc% shell rm -rf /data/*

%hdc% file send %systemui_entry% /system/app/com.ohos.systemui/SystemUI.hap

%hdc% file send %systemui_dialog% /system/app/com.ohos.systemui/SystemUI-SystemDialog.hap

%hdc% file send %systemui_volumepanel% /system/app/com.ohos.systemui/SystemUI-VolumePanel.hap

%hdc% file send %systemui_statusbar% /system/app/com.ohos.systemui/SystemUI-StatusBar.hap

%hdc% file send %systemui_notificationmanagement% /system/app/com.ohos.systemui/SystemUI-NotificationManagement.hap

%hdc% file send %systemui_navigationbar% /system/app/com.ohos.systemui/SystemUI-NavigationBar.hap

%hdc% file send %systemui_dropdownpanel% /system/app/com.ohos.systemui/SystemUI-DropdownPanel.hap

%hdc% shell reboot
```

## 自动签名

### 修改权限文件

1.打开 **OpenHarmony SDK** 所在目录,可通过工程根路径**local.properties** 文件或**DevEco Studio** 菜单栏中单击 **File > Settings > SDK > OpenHarmony** 界面查看 。

![image.png](https://forums-obs.openharmony.c ... 6j7vv421ev948e7.png "image.png")

2.在**OpenHarmony SDK** 目录下,进入 **{Version} > toolchains > lib** 文件夹,打开 **UnsgnedReleasedProfileTemplate.json** 文件。

![image.png](https://forums-obs.openharmony.c ... ylfpyrwjr5tpi2x.png "image.png")

3.将**apl** 配置项配置为 **system\_core** ,**app-feature** 配置项配置为 **ohos\_system\_app** , **Profile** 文件的修改参考[HarmonyAppProvision配置文件的说明](https://docs.openharmony.cn/page ... ision-structure.md/)。

![image.png](https://forums-obs.openharmony.c ... qws2hmih2jstjhl.png "image.png")

### 配置工程签名

1.单击**File > Project Structure > Project > SigningConfigs** 界面勾选**Automatically generate signature** ,等待自动签名完成即可,单击**OK。**

![image.png](https://forums-obs.openharmony.c ... l6e5a5b8jyi0bv5.png "image.png")

2.查看**build-profile.json5** 配置信息,配置信息中增加自动签名生成的证书信息。

![image.png](https://forums-obs.openharmony.c ... l1z88y23ugrg848.png "image.png")

### 证书指纹获取

#### 方式一(官方推荐)

1.证书存放在**HarmonyAppProvision** 文件(修改权限文件中修改的Profile文件)的**distribution-certificate** 字段下,新建**profile.cer** 文件,将证书的内容拷贝到**profile.cer** 文件中。

![image.png](https://forums-obs.openharmony.c ... vut7n2716n631gb.png "image.png")

2.将**profile.cer** 内容换行和去掉换行符。

![image.png](https://forums-obs.openharmony.c ... 5rrbzyxre1rsq58.png "image.png")

3.使用**keytool** 工具执行 "keytool -printcert -file profile.cer" 打印对应的证书指纹。

若提示以下信息,则未安装 **Java环境** 或 **keytool工具** 未加入环境变量中。可安装后再次尝试,或使用完整路径使用工具。

![](https://harmonyos.oss-cn-beijing ... f67e6590f49c869.png)

打印指纹信息:

![image.png](https://forums-obs.openharmony.c ... xgdgjmgjtpytnvg.png "image.png")

4.处理证书指纹,使用SHA256证书信息,去掉冒号,最终结果为:

> 29D2B4EFFD0E6009778AF993EFBB270A6513420781BD37C5513B983C3253355C

#### 方式二(个人推荐)

1.单击 **Build > Build Hap(s)/APP(s) > Build Hap(s)** 构建 **SystemUI** 工程HAP包。找到 **SystemUI\_Entry**模块构建的HAP包目录,位于工程路径 **entry\\phone\\build\\default\\outputs\\default\\** 中。

![image.png](https://forums-obs.openharmony.c ... 9ry9ixd5n3zrxyc.png "image.png")

2.把HAP推送至系统中。

> hdc file send entry\\phone\\build\\default\\outputs\\default\\phone\_entry-default-signed.hap /data/

![image.png](https://forums-obs.openharmony.c ... 9hmagk3f297m9i9.png "image.png")

3.在**DevEco Studio** 中打开**Log** 界面,选择**HiLog** 过滤 "**finger**" 字符。

![image.png](https://forums-obs.openharmony.c ... nnadnzaa1n19yza.png "image.png")

4.进入系统**Shell命令行** ,设置**Hilog** 等级。

> hilog -b D

![image.png](https://forums-obs.openharmony.c ... sbcd61e0lnmbcpa.png "image.png")

5.安装推送进系统的 **SystemUI\_Entry** 构建的HAP包,此时会发现安装报错,是因为我们HAP包的指纹信息与系统中配置的不同导致,但此时我们目的为获取指纹信息,忽略报错信息。

> bm install -p /data/phone\_entry-default-signed.hap -u 0

![image.png](https://forums-obs.openharmony.c ... ajgaolczejlqzzb.png "image.png")

6.查看**DevEco Studio** 的**Log** 界面,指纹信息已经被打印出来。

![image.png](https://forums-obs.openharmony.c ... hm9yxy0yhsi6qis.png "image.png")

> 29D2B4EFFD0E6009778AF993EFBB270A6513420781BD37C5513B983C3253355C

### 应用特权配置

1.提取当前系统中的特权配置文件 **install\_list\_capability.json **,文件位于**/etc/app/ **中**。**

> hdc file recv /etc/app/install\_list\_capability.json D:\\

![image.png](https://forums-obs.openharmony.c ... s4n8bat12213ht1.png "image.png")

2.找到 **install**\_**list**\_**capability.json** 中 **SystemUI** 配置段。

![image.png](https://forums-obs.openharmony.c ... p2y0ksv33wo5pt0.png "image.png")

3.替换**app\_signature**为我们在**证书指纹获取**章节中获取到的指纹信息并保存。

![image.png](https://forums-obs.openharmony.c ... tc19yz1ic99osoq.png "image.png")

4.将特权配置文件 **install\_list\_capability.json** 推送回系统中,覆盖系统配置。

> hdc shell "mount -o remount,rw /"
> hdc file send d:\\install\_list\_capability.json /etc/app/install\_list\_capability.json

![image.png](https://forums-obs.openharmony.c ... 29pojzf1gmf9ivk.png "image.png")

5.重启系统特权配置文件生效。

### 构建安装验证

同标准签名。

# 参考文档

[OpenHarmony Gitee Docs - 应用特权配置指南](https://gitee.com/openharmony/do ... ege-config-guide.md)
[/md]
作者: ryan    时间: 2024-1-4 15:19
通篇没有讲signature/systemui.p7b包是从哪里来的
作者: ohos_w    时间: 2024-2-8 15:07
@楼主,storePassword 和keyPassword 是怎么自动由material生成的?
作者: koubo    时间: 2024-4-25 14:27
想问下,OpenHarmony官网给出的app-feature 配置项配置为 hos_system_app,这与 ohos_system_app有什么区别吗,是HarmonyOS与OpenHarmony的区别吗
作者: xq_qyh    时间: 2024-4-30 17:57
回复 ryan: 自带的东西还要讲什么,你去拉一个systemui的工程里面不就有吗
作者: feynman    时间: 2024-5-7 19:52
app-feature 配置项配置为 ohos_system_app  官网上面是hos_system_app
作者: koubo    时间: 2024-5-20 15:21
回复 feynman: 所以二者有什么区别




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5