OpenHarmony預置系統應用編譯安裝全流程記錄
??https://harmonyos.51cto.com??
開發環境
- 系統版本:OpenHarmony 3.0LTS / OpenHarmony 3.1beta
- 開發板:3516 / rk3568
- IDE:DevEco3.0.0.800
開源系統應用
- SystemUI
SystemUI應用是OpenHarmony中預置的系統應用,為用戶提供系統相關信息展示及交互界面,包括系統狀態、系統提示、系統提醒等,例如系統時間、電量信息。
https://gitee.com/openharmony/applications_systemui
- Settings
設置應用是 OpenHarmony 系統中預置的系統應用,為用戶提供設置系統屬性的交互界面,例如設置系統時間,屏幕亮度等系統屬性。
https://gitee.com/openharmony/applications_settings
- Launcher
Launcher 作為系統人機交互的首要入口,提供應用圖標的顯示、點擊啟動、卸載應用,并提供桌面布局設置以及最近任務管理等功能。
Launcher 采用純 JS 語言開發,開發過程中不涉及任何 Java 部分的代碼。
https://gitee.com/openharmony/applications_launcher
導入工程
代碼下載
git clone '復制的下載地址'
我本人喜歡用可視化TortoiseGit。
接下來我們拿SystemUI項目進行示例。
項目倉庫:https://gitee.com/openharmony/applications_systemui
代碼下載完成后,記得切換分支與當前開發板系統保持一致。
使用其他分支可能由于每個版本系統底層實現修改而出現問題。
打開工程
選擇Open File or Project,選擇項目文件夾即可。
選擇OK后,會彈出詢問框。
選擇Update。
再次彈出詢問框。
選擇Trust Project。
等待右下角gradle build進度完成。
提示報錯。
根據錯誤提示,我們打開build.gradle。
將build.gradle中http開頭的鏈接修改為https。
buildscript {
repositories {
maven {
url 'https://repo.ark.tools.huawei.com/artifactory/maven-public/'
}
...
}
dependencies {
classpath 'com.huawei.ohos:hap:3.0.5.2'
}
}
allprojects {
repositories {
maven {
url 'https://repo.ark.tools.huawei.com/artifactory/maven-public/'
}
...
}
}
修改時會彈出詢問框,選擇OK。
選擇重新同步工程。
終于可以看到工程目錄了。
檢查build.gradle文件
每次修改該文件后,會提示要求重新同步,選擇進行同步即可。
檢查local.properties文件
例如settings工程該文件可能會出現內容錯亂。
刪除不需要的內容,我們只需要配置:
- sdk.dir
- nodejs.dir
- npm.dir
執行Build
會發現多了很多警告,導致Build失敗。
我們按照錯誤一個一個進行修改。
- \entry\src\main\config.json
- \product\navigationBar\src\main\config.json
- \product\notificationmanagement\src\main\config.json
- \product\statusbar\src\main\config.json
在配置中添加installationFree
...
},
"distro": {
...
"installationFree": true
},
...
重新Build,出現了新的錯誤。
繼續按照錯誤一個一個進行修改。發現引起錯誤的原因是由于資源文件內容都是空。
那么我們一個一個將資源文件補充進去。
- \features\airplanecomponent\src\main\resources\base\element\string.json
- \features\airplanecomponent\src\main\resources\base\element\color.json
- \features\capsulecomponent\src\main\resources\base\element\string.json
- \features\wificomponent\src\main\resources\base\element\color.json
- \features\statusbarcomponent\src\main\resources\base\element\string.json
- \features\statusbarcomponent\src\main\resources\en_US\element\string.json
- \features\statusbarcomponent\src\main\resources\zh_CN\element\string.json
// 這樣的資源文件內容會引起報錯
{
"string": [
]
}
// 隨便補充內容即可
{
"string": [
{
"name": "xxx",
"value": "xxx"
}
]
}
修改完成,再次進行Build,成功!
可以在工程的build目錄下查看到所有未簽名的hap包。
應用簽名
需要使用的別名與密|碼 (密|碼為什么是敏感詞啊_(:з」∠)_):
Alias:OpenHarmony Application Release
Password:123456
生成簽名文件
查看了官方的簽名工具倉:https://gitee.com/openharmony/signcenter_tool
發現官方就是沒提供.cer,只好自己生成一個。在工具倉你可以獲取到一個OpenHarmony.p12的文件。
## .csr
keytool -certreq -alias "OpenHarmony Application Release" -keystore E:\signcenter_tool\key\OpenHarmony.p12 -storetype pkcs12 -file E:\signcenter_tool\key\OpenHarmony.csr
## .cer
## 需要進入Openharmony SDK路徑/toolchain/lib目錄下執行
keytool -gencert -alias "OpenHarmony Application CA" -infile E:\signcenter_tool\key\OpenHarmony.csr -outfile E:\signcenter_tool\key\OpenHarmony.cer -keystore OpenHarmony.p12 -sigalg SHA384withECDSA -storepass 123456 -ext KeyUsage:"critical=digitalSignature" -validity 3650 -rfc
獲取應用 Profile 文件
每個官方開源工程下都有個signature文件夾,直接使用里面的p7b文件即可。
也可以重新生成,自行生成參考官方文檔。
配置簽名
打開Project Strcture->Modules->Signing Configs,去掉勾選Automatically generate signing,填寫簽名配置。
執行Apply后會彈出提示框,忽略即可。
需要配置簽名的Modules如下:
- navigationBar
- statusbar
- systemDialog(3.1beta已去掉)
執行Build,即可在工程build目錄下看到已簽名完成的hap包。
應用安裝
hdc_std使用指導:https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-toolchain-hdc-guide.md
OpenHarmony 3.0LTS
臨時安裝
使用一般hap包安裝方式,適合臨時調試。清除設備中存儲的應用信息后,系統應用將啟用原來預置的系統包。
hdc_std install [-r/-d/-g] 應用路徑
內置安裝
# 進入交互命令環境
hdc_std shell
如果設備不存在 /system/app 目錄,則需要手動創建該目錄并修改權限。
$ cd system
$ mkdir app
$ chmod 777 app
/system/app 目錄放置系統應用,例如:Launcher,SystemUI,Settings 等。
發送hap包到目錄。
hdc_std file send [文件路徑]\[應用].hap system/app/[應用].hap
新加入的hap包需要在該目錄下手動設置權限。
$ chmod 666 hap包名
每次系統重啟,都會自動拉起該目錄下的所有應用。
$ reboot
注意,如果設備之前安裝過系統應用,則需要執行如下兩條命令清除設備中存儲的應用信息才能夠在設備重啟的時候將我們裝入設備的新 hap 包正常拉起。
hdc_std shell rm -rf /data/misc_de/0/mdds/0/default/bundle_manager_service
hdc_std shell rm -rf /data/accounts
OpenHarmony 3.1beta
臨時安裝
同OpenHarmony 3.0LTS臨時安裝操作。
3.1beta臨時安裝可能會出現界面不刷新的情況,建議是安裝系統應用后,進行重啟。
# 安裝應用
hdc_std install [-r/-d/-g] 應用路徑
# 成功安裝后,3.1beta需要重啟系統
hdc_std shell reboot
內置安裝
進入交互命令環境。
hdc_std shell
3.1beta系統重啟后,都需要先更改目錄權限,才能進行操作。
# 更改權限
$ mount -o remount,rw /
# 完成后退出
$ exit
后續安裝操作同OpenHarmony 3.0LTS內置安裝操作。
完成后重啟系統即可。
hdc_std shell rm -rf /data/misc_de/0/mdds/0/default/bundle_manager_service
hdc_std shell rm -rf /data/accounts
hdc_std shell reboot
感興趣的小伙伴趕緊上手試一下吧~
??https://harmonyos.51cto.com??