?
概述
文檔環境
開發環境:windows 11
DevEco Studio 版本:DevEco Studio 3.1 Beta1(3.1.0.200)
SDK 版本:3.2.10.8(Full SDK)
開發板型號:DAYU 200
系統版本:OpenHarmony 3.2 Beta5
示例工程:??Applications_SystemUI (OpenHarmony 3.2 Beta5分支)???
功能簡介
OpenHarmony開源社區提供了標準系統上的部分系統應用,如桌面、SystemUI、設置等,為開發者提供了構建標準系統應用的具體實例,這些應用支持在所有標準系統的設備上使用。本篇文檔將介紹如何給這些系統應用進行簽名,使它們可以正確的安裝和運行在OpenHarmony系統上。本篇文檔僅用于方便大家學習系統應用的開發和調試,不用做正式項目發布和商用使用。
系統應用目前包含如下:
- ??Applications_Launcher??:Launcher 作為系統人機交互的首要入口,提供應用圖標的顯示、點擊啟動、卸載應用,并提供桌面布局設置以及最近任務管理等功能。
- ??Applications_SystemUI??:SystemUI應用是OpenHarmony中預置的系統應用,為用戶提供系統相關信息展示及交互界面,包括系統狀態、系統提示、系統提醒等,例如系統時間、電量信息。
- ??Applications_Settings??:設置應用是 OpenHarmony 系統中預置的系統應用,為用戶提供設置系統屬性的交互界面,例如設置系統時間,屏幕亮度等系統屬性。
- ??Applications_Camera??:相機應用是OpenHarmony標準系統中預置的系統應用,為用戶提供基礎的相機拍攝功能,包括預覽、拍照、攝像、縮略圖顯示、跳轉相冊、多機位協同。 Camera 采用純 arkui-ts 語言開發。
- ??Applications_Photos??:圖庫是系統內置的可視資源訪問應用,提供圖片和視頻的管理、瀏覽、顯示、編輯操作等功能,并支持默認相冊和用戶相冊管理。
除以上主要系統應用之外,還預置了一些簡單的示例應用,如時鐘、計算器、空氣質量等,可供開發者參考學習。
系統應用簽名
我們以相對較復雜的 Applications_SystemUI 項目為例,克隆 SystemUI 項目,使用 DevEco Studio 打開工程,查看當前工程的簽名配置 build-profile.json5 。
當前默認工程是未配置簽名的狀態,所構建的包均為 unsigned 標記的HAP包,無法安裝到 OpenHarmony 系統中,下面我們分別使用 標準簽名 和 自動簽名 ,兩種方式給 SystemUI 工程配置簽名。
標準簽名:配置簡單,適用于工程中提供p7b簽名文件的工程。
自動簽名:配置較復雜,適用于工程中未提供p7b簽名文件或p7b簽名文件與系統配置不匹配的情況。
除以上兩種方式外還可使用手動簽名的方式生成簽名文件給應用簽名,此種方式更為復雜,但具有較高的靈活性,不在此篇文檔中進行介紹。
標準簽名
簽名文件獲取
拷貝 OpenHarmony 標準版工程簽名文件到 SystemUI 工程的 signature 目錄。打開??developtools_hapsigner??倉庫,進入 dist 目錄,點擊下載??OpenHarmony.p12???和??OpenHarmonyApplication.pem??(pem文件若無法直接下載,可直接在目錄中創建文件然后將內容拷貝到文件中)。
把下載好的文件放入工程目錄的 signature 中。
簽名文件配置
- DevEco Studio 3.1 Beta1 版本界面化配置簽名時,秘鑰不允許配置8位以下純數字秘鑰,而標準簽名文件的秘鑰為123456 ,所以無法通過DevEco Studio 界面進行簽名的配置。僅能使用手動配置build-profile.json5 文件方式,進行簽名信息的配置。下載??material包??解壓后放入signature 目錄中,material 文件夾中存放的為加密鹽文件,此包將給予簽名工具驗證秘鑰時使用。
- 配置工程根路徑build-profile.json5 文件,拷貝以下簽名信息到配置文件中,其中storePassword 和keyPassword 為material 包與秘鑰加密生成的數據,keyAlias 為固定值"OpenHarmony Application Release"。
"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"
}
}],
構建安裝驗證
- 單擊Build >Build Hap(s)/APP(s) > Build Hap(s) 構建SystemUI 工程HAP包。
SystemUI 工程共有6個HAP包分別位于以下目錄:
systemui_entry:
entryphonebuilddefaultoutputsdefaultphone_entry-default-signed.hap
systemui_volumepanel:
productdefaultvolumepanelbuilddefaultoutputsdefaultdefault_volumepanel-phone_entry-default-signed.hap
systemui_statusbar:
productphonestatusbarbuilddefaultoutputsdefaultphone_statusbar-phone_entry-default-signed.hap
systemui_notificationmanagement:
productdefaultnotificationmanagementbuilddefaultoutputsdefaultdefault_notificationmanagement-phone_entry-default-signed.hap
systemui_navigationbar:
productdefaultnavigationBarbuilddefaultoutputsdefaultdefault_navigationBar-phone_entry-default-signed.hap
systemui_dropdownpanel:
productphonedropdownpanelbuilddefaultoutputsdefaultphone_dropdownpanel-phone_entry-default-signed.hap
- 使用"hdc file send {源地址} {目標地址}"命令分別把HAP包放入系統中替換當前SystemUI 項目的安裝包,SystemUI 安裝包路徑為/system/app/com.ohos.systemui/。
推送文件前需先獲取系統文件權限,執行"hdc shell mount -o remount,rw /"獲取權限。
hdc工具位于SDK/{Version}/toolchains/目錄中。
- 在OpenHarmony系統Shell命令行 中執行"rm -rf /data/* && reboot"系統會刪除所有用戶數據并重啟,重啟后系統重新安裝全部系統應用。也可通過"bm instlal -p {HAP包地址} -u 0"的方式單獨安裝某一個HAP包進行驗證,不同系統應用在安裝過程中存在差異。
- 在OpenHarmony系統Shell命令行 中使用"bm dump -n com.ohos.systemui | grep name"或查看界面SystemUI 是否啟動,驗證安裝是否成功。
以下為一鍵替換安裝腳本,方便大家學習使用,可保存為 shell 或 bat 腳本,在 SystemUI 根目錄下執行:
set systemui_entry=entryphonebuilddefaultoutputsdefaultphone_entry-default-signed.hap
set systemui_volumepanel=productdefaultvolumepanelbuilddefaultoutputsdefaultdefault_volumepanel-phone_entry-default-signed.hap
set systemui_statusbar=productphonestatusbarbuilddefaultoutputsdefaultphone_statusbar-phone_entry-default-signed.hap
set systemui_notificationmanagement=productdefaultnotificationmanagementbuilddefaultoutputsdefaultdefault_notificationmanagement-phone_entry-default-signed.hap
set systemui_navigationbar=productdefaultnavigationBarbuilddefaultoutputsdefaultdefault_navigationBar-phone_entry-default-signed.hap
set systemui_dropdownpanel=productphonedropdownpanelbuilddefaultoutputsdefaultphone_dropdownpanel-phone_entry-default-signed.hap
set hdc=hdc
%hdc% shell mount -o remount,rw /
%hdc% shell rm -rf /data/*
%hdc% shell rm -rf /system/app/com.ohos.systemui/*
%hdc% file send %systemui_entry% /system/app/com.ohos.systemui/SystemUI.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
自動簽名
修改權限文件
- 打開OpenHarmony SDK 所在目錄,可通過工程根路徑local.properties 文件或DevEco Studio 菜單欄中單擊File > Settings > SDK > OpenHarmony 界面查看 。
- 在OpenHarmony SDK 目錄下,進入{Version} > toolchains > lib 文件夾,打開 UnsgnedReleasedProfileTemplate.json 文件。
- 將apl 配置項配置為system_core ,app-feature 配置項配置為ohos_system_app , Profile 文件的修改參考??HarmonyAppProvision配置文件的說明??。
配置工程簽名
- 單擊File > Project Structure > Project > SigningConfigs 界面勾選Automatically generate signature ,等待自動簽名完成即可,單擊OK。
- 查看build-profile.json5 配置信息,配置信息中增加自動簽名生成的證書信息。
證書指紋獲取
方式一(官方推薦)
- 證書存放在HarmonyAppProvision 文件(修改權限文件中修改的Profile文件)的distribution-certificate 字段下,新建profile.cer 文件,將證書的內容拷貝到profile.cer 文件中。
- 將profile.cer 內容換行和去掉換行符。
- 使用keytool 工具執行 "keytool -printcert -file profile.cer" 打印對應的證書指紋。
若提示以下信息,則未安裝 JAVA環境 或 keytool工具 未加入環境變量中。可安裝后再次嘗試,或使用完整路徑使用工具。
打印指紋信息:
- 處理證書指紋,使用SHA256證書信息,去掉冒號,最終結果為:
A08D9DAB5FF3012158CDAA68D45ACAEE49F848E05065ED1CEF29A9B2724E3FA6
方式二(個人推薦)
- 單擊Build > Build Hap(s)/APP(s) > Build Hap(s) 構建SystemUI 工程HAP包。找到 SystemUI_Entry模塊構建的HAP包目錄,位于工程路徑 entryphonebuilddefaultoutputsdefault 中。
- 把HAP推送至系統中。
hdc file send entryphonebuilddefaultoutputsdefaultphone_entry-default-signed.hap /data/
- 在DevEco Studio 中打開Log 界面,選擇HiLog 過濾 "finger" 字符。
- 進入系統Shell命令行 ,設置Hilog 等級。
hilog -b D
- 安裝推送進系統的SystemUI_Entry 構建的HAP包,此時會發現安裝報錯,是因為我們HAP包的指紋信息與系統中配置的不同導致,但此時我們目的為獲取指紋信息,忽略報錯信息。
bm install -p /data/phone_entry-default-signed.hap -u 0
- 查看DevEco Studio 的Log 界面,指紋信息已經被打印出來。
A08D9DAB5FF3012158CDAA68D45ACAEE49F848E05065ED1CEF29A9B2724E3FA6
應用特權配置
- 提取當前系統中的特權配置文件install_list_capability.json ,文件位于/etc/app/ 中。
hdc file recv /etc/app/install_list_capability.json D:
- 找到install_list_capability.json 中SystemUI 配置段。
- 替換app_signature為我們在證書指紋獲取章節中獲取到的指紋信息并保存。
- 將特權配置文件install_list_capability.json 推送回系統中,覆蓋系統配置。
hdc shell "mount -o remount,rw /"
hdc file send d:install_list_capability.json /etc/app/install_list_capability.json
- 重啟系統特權配置文件生效。
構建安裝驗證
同標準簽名。
文章相關附件可以點擊下面的原文鏈接前往下載:
https://ost.51cto.com/resource/2546。