OpenHarmony預(yù)置系統(tǒng)應(yīng)用編譯安裝全流程記錄
??想了解更多內(nèi)容,請(qǐng)?jiān)L問:??
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??
開發(fā)環(huán)境
- 系統(tǒng)版本:OpenHarmony 3.0LTS / OpenHarmony 3.1beta
- 開發(fā)板:3516 / rk3568
- IDE:DevEco3.0.0.800
開源系統(tǒng)應(yīng)用
- SystemUI
SystemUI應(yīng)用是OpenHarmony中預(yù)置的系統(tǒng)應(yīng)用,為用戶提供系統(tǒng)相關(guān)信息展示及交互界面,包括系統(tǒng)狀態(tài)、系統(tǒng)提示、系統(tǒng)提醒等,例如系統(tǒng)時(shí)間、電量信息。
https://gitee.com/openharmony/applications_systemui
- Settings
設(shè)置應(yīng)用是 OpenHarmony 系統(tǒng)中預(yù)置的系統(tǒng)應(yīng)用,為用戶提供設(shè)置系統(tǒng)屬性的交互界面,例如設(shè)置系統(tǒng)時(shí)間,屏幕亮度等系統(tǒng)屬性。
https://gitee.com/openharmony/applications_settings
- Launcher
Launcher 作為系統(tǒng)人機(jī)交互的首要入口,提供應(yīng)用圖標(biāo)的顯示、點(diǎn)擊啟動(dòng)、卸載應(yīng)用,并提供桌面布局設(shè)置以及最近任務(wù)管理等功能。
Launcher 采用純 JS 語(yǔ)言開發(fā),開發(fā)過程中不涉及任何 Java 部分的代碼。
https://gitee.com/openharmony/applications_launcher
導(dǎo)入工程
代碼下載
git clone '復(fù)制的下載地址'
我本人喜歡用可視化TortoiseGit。
接下來我們拿SystemUI項(xiàng)目進(jìn)行示例。
項(xiàng)目倉(cāng)庫(kù):https://gitee.com/openharmony/applications_systemui
代碼下載完成后,記得切換分支與當(dāng)前開發(fā)板系統(tǒng)保持一致。
使用其他分支可能由于每個(gè)版本系統(tǒng)底層實(shí)現(xiàn)修改而出現(xiàn)問題。
打開工程
選擇Open File or Project,選擇項(xiàng)目文件夾即可。
選擇OK后,會(huì)彈出詢問框。
選擇Update。
再次彈出詢問框。
選擇Trust Project。
等待右下角gradle build進(jìn)度完成。
提示報(bào)錯(cuò)。
根據(jù)錯(cuò)誤提示,我們打開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/'
}
...
}
}
修改時(shí)會(huì)彈出詢問框,選擇OK。
選擇重新同步工程。
終于可以看到工程目錄了。
檢查build.gradle文件
每次修改該文件后,會(huì)提示要求重新同步,選擇進(jìn)行同步即可。
檢查local.properties文件
例如settings工程該文件可能會(huì)出現(xiàn)內(nèi)容錯(cuò)亂。
刪除不需要的內(nèi)容,我們只需要配置:
- sdk.dir
- nodejs.dir
- npm.dir
執(zhí)行Build
會(huì)發(fā)現(xiàn)多了很多警告,導(dǎo)致Build失敗。
我們按照錯(cuò)誤一個(gè)一個(gè)進(jìn)行修改。
- \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,出現(xiàn)了新的錯(cuò)誤。
繼續(xù)按照錯(cuò)誤一個(gè)一個(gè)進(jìn)行修改。發(fā)現(xiàn)引起錯(cuò)誤的原因是由于資源文件內(nèi)容都是空。
那么我們一個(gè)一個(gè)將資源文件補(bǔ)充進(jìn)去。
- \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
// 這樣的資源文件內(nèi)容會(huì)引起報(bào)錯(cuò)
{
"string": [
]
}
// 隨便補(bǔ)充內(nèi)容即可
{
"string": [
{
"name": "xxx",
"value": "xxx"
}
]
}
修改完成,再次進(jìn)行Build,成功!
可以在工程的build目錄下查看到所有未簽名的hap包。
應(yīng)用簽名
需要使用的別名與密|碼 (密|碼為什么是敏感詞啊_(:з」∠)_):
Alias:OpenHarmony Application Release
Password:123456
生成簽名文件
查看了官方的簽名工具倉(cāng):https://gitee.com/openharmony/signcenter_tool
發(fā)現(xiàn)官方就是沒提供.cer,只好自己生成一個(gè)。在工具倉(cāng)你可以獲取到一個(gè)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
## 需要進(jìn)入Openharmony SDK路徑/toolchain/lib目錄下執(zhí)行
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
獲取應(yīng)用 Profile 文件
每個(gè)官方開源工程下都有個(gè)signature文件夾,直接使用里面的p7b文件即可。
也可以重新生成,自行生成參考官方文檔。
配置簽名
打開Project Strcture->Modules->Signing Configs,去掉勾選Automatically generate signing,填寫簽名配置。
執(zhí)行Apply后會(huì)彈出提示框,忽略即可。
需要配置簽名的Modules如下:
- navigationBar
- statusbar
- systemDialog(3.1beta已去掉)
執(zhí)行Build,即可在工程build目錄下看到已簽名完成的hap包。
應(yīng)用安裝
hdc_std使用指導(dǎo):https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-toolchain-hdc-guide.md
OpenHarmony 3.0LTS
臨時(shí)安裝
使用一般hap包安裝方式,適合臨時(shí)調(diào)試。清除設(shè)備中存儲(chǔ)的應(yīng)用信息后,系統(tǒng)應(yīng)用將啟用原來預(yù)置的系統(tǒng)包。
hdc_std install [-r/-d/-g] 應(yīng)用路徑
內(nèi)置安裝
# 進(jìn)入交互命令環(huán)境
hdc_std shell
如果設(shè)備不存在 /system/app 目錄,則需要手動(dòng)創(chuàng)建該目錄并修改權(quán)限。
$ cd system
$ mkdir app
$ chmod 777 app
/system/app 目錄放置系統(tǒng)應(yīng)用,例如:Launcher,SystemUI,Settings 等。
發(fā)送hap包到目錄。
hdc_std file send [文件路徑]\[應(yīng)用].hap system/app/[應(yīng)用].hap
新加入的hap包需要在該目錄下手動(dòng)設(shè)置權(quán)限。
$ chmod 666 hap包名
每次系統(tǒng)重啟,都會(huì)自動(dòng)拉起該目錄下的所有應(yīng)用。
$ reboot
注意,如果設(shè)備之前安裝過系統(tǒng)應(yīng)用,則需要執(zhí)行如下兩條命令清除設(shè)備中存儲(chǔ)的應(yīng)用信息才能夠在設(shè)備重啟的時(shí)候?qū)⑽覀冄b入設(shè)備的新 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
臨時(shí)安裝
同OpenHarmony 3.0LTS臨時(shí)安裝操作。
3.1beta臨時(shí)安裝可能會(huì)出現(xiàn)界面不刷新的情況,建議是安裝系統(tǒng)應(yīng)用后,進(jìn)行重啟。
# 安裝應(yīng)用
hdc_std install [-r/-d/-g] 應(yīng)用路徑
# 成功安裝后,3.1beta需要重啟系統(tǒng)
hdc_std shell reboot
內(nèi)置安裝
進(jìn)入交互命令環(huán)境。
hdc_std shell
3.1beta系統(tǒng)重啟后,都需要先更改目錄權(quán)限,才能進(jìn)行操作。
# 更改權(quán)限
$ mount -o remount,rw /
# 完成后退出
$ exit
后續(xù)安裝操作同OpenHarmony 3.0LTS內(nèi)置安裝操作。
完成后重啟系統(tǒng)即可。
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
感興趣的小伙伴趕緊上手試一下吧~
??想了解更多內(nèi)容,請(qǐng)?jiān)L問:??
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??