0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony SystemUI開發(fā)記錄

OpenHarmony技術(shù)社區(qū) ? 來源: OpenHarmony技術(shù)社區(qū) ? 作者: OpenHarmony技術(shù)社區(qū) ? 2023-04-25 14:53 ? 次閱讀

最近學(xué)習(xí) OpenHarmony 應(yīng)用開發(fā), SDK 版本是 3.2.9.2 Beta4,IDE 版本是 3.1.0.200。

參考官方文檔,做了個 Demo 應(yīng)用,調(diào)試、運行非常順利。啟動應(yīng)用后,狀態(tài)欄和導(dǎo)航欄占用的高度過高,顯得很奇怪,嘗試修改一下系統(tǒng)應(yīng)用。

摸石頭過河

因為沒做過移動端開發(fā),最初以為狀態(tài)欄和導(dǎo)航欄是由 Launcher 控制的。

https://gitee.com/openharmony/applications_app_samples/tree/master/ability/Launcher

從示例中找了個 launcher,按照文檔進行編譯,放在設(shè)備上怎么也起不來,Google 查了半天,最后發(fā)現(xiàn)該版本中文檔描述不全,參考最新版本文檔進行編譯,運行成功。

有了經(jīng)驗之后,使用系統(tǒng) Launcher 進行編譯,報了一堆錯誤。

https://gitee.com/openharmony/applications_launcher

哪里報錯改哪里,修改完之后編譯成功,因為是系統(tǒng)應(yīng)用,不能使用自動簽名。根據(jù)官方提供的簽名方式進行簽名,放到設(shè)備中無法顯示應(yīng)用中心和 Dock。

看了系統(tǒng) Launcher 代碼,感覺狀態(tài)欄和導(dǎo)航欄并不是由 Launcher 控制的,又下載了系統(tǒng) SystemUI 代碼,編譯時也有幾個報錯,不知道怎么解決。

后來發(fā)現(xiàn)下載的代碼不對,應(yīng)該從分支中選擇版本,從標簽中選擇的版本代碼可能不全或者有問題。

編譯安裝踩坑

替換系統(tǒng)應(yīng)用方法:

//獲取系統(tǒng)目錄讀寫權(quán)限
hdcshell"mount-oremount,rw/"
//拷貝應(yīng)用到SystemUI目錄
hdcfilesendphone_statusbar-phone_entry-default-signed.hap/system/app/com.ohos.systemui/SystemUI-StatusBar.hap
//應(yīng)用放在/data目錄下,刪除/data目錄下的所有文件,系統(tǒng)會重新安裝系統(tǒng)應(yīng)用。
hdcshell"rm-rf/data/*"
//重啟設(shè)備
hdcshellreboot

①系統(tǒng)應(yīng)用簽名

環(huán)境:SDK:Beta4,代碼:Beta4

現(xiàn)象:系統(tǒng)應(yīng)用無法使用自動簽名。

解決方案:參考系統(tǒng)應(yīng)用簽名,我使用的是標準簽名。

下載 material 文件夾、OpenHarmony.p12 文件、OpenHarmonyApplication.pem 文件,放在 signature 目錄下,修改項目中的 build-profile.json5 文件,添加以下信息,重新編譯即可。

"products":[
{
"name":"default",
"signingConfig":"default"
}
],
"signingConfigs":[{
"name":"default",
"material":{
"storePassword":"00000016D9DCF063F0FC4BBD0E7FE1E3B06A67C07BECE1BDD4E2A3EFDAE20F890810EC02AA2A",
"certpath":"signature/OpenHarmonyApplication.pem",
"keyAlias":"OpenHarmonyApplicationRelease",
"keyPassword":"00000016FD3897FD4C46940ED39FFC652872B7B18BEDCCA07400A6EBEE307C9C41B96DB6B64D",
"profile":"signature/systemui.p7b",
"signAlg":"SHA256withECDSA",
"storeFile":"signature/OpenHarmony.p12"
}
}]

②SystemUI 編譯報錯(SDK 問題)

環(huán)境:SDK:Beta4,代碼:Beta4

現(xiàn)象:編譯報錯

信息如下:

>hvigorERROR:Faileddefault@CompileArkTS...
>hvigorERROR:Toolsexecutionfailed.
ArkTS:ERRORFile:/xxx/applications_systemui-OpenHarmony-3.2-Beta4/features/batterycomponent/src/main/ets/default/batteryModel.ts:16:25
Cannotfindmodule'@ohos.batteryinfo'oritscorrespondingtypedeclarations.
Modulenotfound:Error:Can'tresolve'bundle/extensionAbilityInfo'in'/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource'
Modulenotfound:Error:Can'tresolve'bundle/extensionAbilityInfo'in'/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource/common'
Modulenotfound:Error:Can'tresolve'bundle/metadata'in'/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource/common'

排查:查看 API 發(fā)現(xiàn) bundle 目錄下沒有 extensionAbilityInfo 和 metadata 文件,而 bundleManager 中有這兩個文件。

解決方案:在報錯的地方將 bundle/extensionAbilityInfo 改為 bundleManager/extensionAbilityInfo,bundle/metadata 改為 bundleManager/metadata,編譯通過。

環(huán)境:SDK:Beta2,代碼:Beta4

現(xiàn)象:編譯報錯

信息如下:

>hvigorERROR:Faileddefault@CompileArkTS...
>hvigorERROR:Toolsexecutionfailed.
ETS:ERRORFile:/xxx/applications_systemui-OpenHarmony-3.2-Beta4/features/batterycomponent/src/main/ets/default/batteryModel.ts:16:25
Cannotfindmodule'@ohos.batteryInfo'oritscorrespondingtypedeclarations.
排查:api 中 info 的 i 為小寫,而文件中導(dǎo)入包的時候是大寫 I。 ede19c00-e307-11ed-ab56-dac502259ad0.png

解決方案:將 batteryModel.ts 文件中大寫I改為小寫 i,即可編譯成功。

如下:

importBatteryInfofrom"@ohos.batteryinfo";

③SystemUI 應(yīng)用安裝失敗

環(huán)境:SDK:Beta4,代碼:Beta4

現(xiàn)象:替換狀態(tài)欄應(yīng)用后,狀態(tài)欄消失

排查:使用 bm 命令手動安裝應(yīng)用報錯

手動安裝應(yīng)用
bminstall-p/system/app/com.ohos.systemui/SystemUI-Status.hap-u0
//報錯信息
error:failedtoinstallbundle.
error:installreleaseTypenotsame

報錯信息意思是設(shè)備中 SystemUI 中 SDK 版本與我自己編譯的 SystemUI SDK 版本不一致。

查看一下設(shè)備中 SystemUI 的 SDK 版本:

hdcshellcat/data/app/el1/bundle/public/com.ohos.systemui/phone_statusbar/module.json

edf76a80-e307-11ed-ab56-dac502259ad0.png

解決方案:系統(tǒng)中使用的是 SDK Beta2,而我編譯使用的是 SDK Beta4,所以需要將 SDK 切換到 Beta2 版本。

Beta2 編譯 Beta4 版本代碼也會有問題,參考:SystemUI 編譯報錯(SDK 問題))。

④安裝導(dǎo)航欄后狀態(tài)欄消失

環(huán)境:SDK:Beta4,代碼:Beta2

現(xiàn)象:單獨安裝狀態(tài)欄正常,安裝導(dǎo)航欄后狀態(tài)欄消失

排查:查看狀態(tài)欄日志,發(fā)現(xiàn)有很多日志沒有打出來,追蹤了一下,定位到 features/statusbarcomponent/src/main/ets/com/ohos/common/StatusBarConfiguration.ts 文件中,發(fā)現(xiàn)卡在這里:

ee1ba1b6-e307-11ed-ab56-dac502259ad0.png

status_bar_size_landscape 搜索一下這個字段,發(fā)現(xiàn) base/element/string.json 文件中存在該字段,zh_CN/element/string.json 文件中不存在該字段。

zh_CN/element/string.json 添加字段后狀態(tài)欄正常顯示,是什么原因不清楚。

解決方案:product/phone/statusbar/src/main/resources/zh_CN/element/string.json 文件中添加以下內(nèi)容:

{
"name":"status_bar_size_portrait",
"value":"16"
},
{
"name":"status_bar_size_landscape",
"value":"16"
},
{
"name":"phone_status_bar_size_portrait",
"value":"16"
},
{
"name":"phone_status_bar_size_landscape",
"value":"16"
},

定制化開發(fā)

經(jīng)過摸索,狀態(tài)欄和導(dǎo)航欄布局在窗口管理中控制,可以修改模塊下的 ServiceExtAbility.ts 文件來自定義實現(xiàn)。

也可以修改配置文件 resources/zh_CN/element/string.json 中的以下字段,來控制狀態(tài)欄和導(dǎo)航欄的高度(這里高度不能加單位,按照官網(wǎng)文檔的說法默認使用的 VP 單位)。

{
"name":"nav_bar_size_portrait",
"value":"26"
},
{
"name":"nav_bar_size_landscape",
"value":"26"
},
{
"name":"status_bar_size_portrait",
"value":"16"
},
{
"name":"status_bar_size_landscape",
"value":"16"
},

總結(jié)

做普通應(yīng)用 Demo 上手容易,ArkTS 做頁面布局方便,使用組件點點點即可得到想要的樣式。

因為使用的是 Beta 版本,修改 SystemUI 過程中遇到很多坑,比如編譯報錯,應(yīng)用安裝失敗,應(yīng)用消失等問題。

在 Google 上基本搜不出來解決方案,只能在官方文檔、51CTO 社區(qū)、華為開發(fā)者聯(lián)盟上搜索、提問來解決。

像是安裝導(dǎo)航欄后狀態(tài)欄消失問題,解決起來很容易,但是尋找解決方法要花很長時間,這也是寫這篇文章的原因。

希望可以幫助開發(fā)者解決問題,同時也希望 OpenHarmony 社區(qū)能夠建立起來,為開發(fā)者答疑解惑。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68611
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    657

    瀏覽量

    32870
  • 開發(fā)者
    +關(guān)注

    關(guān)注

    1

    文章

    575

    瀏覽量

    17010
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16317

原文標題:OpenHarmony SystemUI開發(fā)記錄

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    OpenHarmony應(yīng)用開發(fā)安裝數(shù)學(xué)庫

    OpenHarmony應(yīng)用開發(fā)安裝數(shù)學(xué)庫
    的頭像 發(fā)表于 12-01 14:15 ?1180次閱讀
    <b class='flag-5'>OpenHarmony</b>應(yīng)用<b class='flag-5'>開發(fā)</b>安裝數(shù)學(xué)庫

    HarmonyOS與OpenHarmony應(yīng)用開發(fā)差異

    DevEco Studio是HarmonyOS的配套的開發(fā)IDE,因為HarmonyOS是基于OpenHarmony開發(fā)的,因此,使用DevEco Studio(配套HarmonyOS)也可以進行
    發(fā)表于 10-22 10:35

    OpenHarmony設(shè)備開發(fā)入門【1】初始OpenHarmony

    操作系統(tǒng)的框架和平臺,促進萬物互聯(lián)產(chǎn)業(yè)的繁榮發(fā)展。官方gitee倉庫:https://gitee.com/openharmony技術(shù)架構(gòu)如下:關(guān)于系統(tǒng)的特性,這里不再過多贅述,開發(fā)者可以直接在 官方
    發(fā)表于 01-20 09:08

    請教大神SystemUI加載過程是如何去完成的

    請教大神SystemUI加載過程是如何去完成的?
    發(fā)表于 03-03 07:39

    使用900版本ide編譯systemui,狀態(tài)欄和控制中心無法顯示怎么處理?

    碰巧到開發(fā)板,上下不顯示、時間和顯示欄可以正常顯示到屏幕控制中心滑動不出來,中間環(huán)境如下開發(fā)板:dayu200openharmony系統(tǒng)版本:3.2-beta1systemui代碼版本
    發(fā)表于 05-26 15:33

    OpenHarmony3.1 Release for Rk3568 如何修改系統(tǒng)應(yīng)用,如SystemUI-NavigationBar &Settings

    需要定制一下狀態(tài)欄,添加一個按鈕。發(fā)現(xiàn)修改applications中的systemui 未生效,查看之后發(fā)現(xiàn)編譯到out目錄的是applications/standard/hap 中已經(jīng)編譯好的hap文件。所以我該如何修改呢。
    發(fā)表于 08-17 17:09

    openharmony開發(fā)企業(yè)有哪些

    將會在各種智能終端上運用。那么openharmony開發(fā)企業(yè)有哪些?下面小編就為大家?guī)?b class='flag-5'>openharmony開發(fā)企業(yè)有哪些的答案。 openhar
    的頭像 發(fā)表于 06-23 11:13 ?2207次閱讀

    openharmony開發(fā)openharmony開發(fā)

    現(xiàn)在市面上支持OpenHarmony開發(fā)板已經(jīng)非常多了,OpenHarmony不僅僅只能在海思系列芯片上運行,比較常見的有HiSpark、小熊派系列。這些開發(fā)板都是基于海思的Hi38
    的頭像 發(fā)表于 06-24 09:03 ?3677次閱讀

    OpenHarmony2.03516編譯燒錄開機成功

    ,具備的主要功能如下: 新增 22 個子系統(tǒng),支持全面的 OS 能力,支持內(nèi)存大于 128M 的帶屏設(shè)備開發(fā)等。 提供系統(tǒng)三大應(yīng)用:桌面、設(shè)置和 SystemUI。 提供全新的 OpenHarmony
    的頭像 發(fā)表于 06-25 17:22 ?2408次閱讀
    <b class='flag-5'>OpenHarmony</b>2.03516編譯燒錄開機成功

    OpenHarmony輕量系統(tǒng)開發(fā)【1】初始OH

    的。 后續(xù)將給大家陸續(xù)分享輕量系統(tǒng)開發(fā)相關(guān)內(nèi)容 目錄: OpenHarmony輕量系統(tǒng)開發(fā)【1】初始OpenHarmony OpenHarmony
    發(fā)表于 02-25 17:49 ?998次閱讀

    openharmony開源社區(qū) OpenHarmony開發(fā)樣例上新了

    openharmony開源社區(qū) OpenHarmony開發(fā)樣例上新了 OpenHarmony 開源項目是由開放原子開源基金會孵化及運營的開源項目,由開放原子開源基金會
    的頭像 發(fā)表于 04-25 16:37 ?2411次閱讀

    OpenHarmony開發(fā)體系內(nèi)容介紹

    初學(xué)OpenHarmony,開發(fā)者最需要構(gòu)建對OpenHarmony開發(fā)體系的整體了解。
    的頭像 發(fā)表于 07-04 10:34 ?1481次閱讀

    OpenHarmony輕量系統(tǒng)書籍推薦《OpenHarmony輕量設(shè)備開發(fā)理論與實戰(zhàn)》

    最近大家問的智能家居套件方面有沒有可以參考的資料,這里給大家統(tǒng)一回復(fù)一下 推薦大家可以看這本書 《OpenHarmony輕量設(shè)備開發(fā)理論與實戰(zhàn)》 本書系統(tǒng)地講授OpenHarmony 輕量系統(tǒng) 設(shè)備
    的頭像 發(fā)表于 07-20 12:43 ?1250次閱讀

    openharmony開發(fā)應(yīng)用

    隨著智能設(shè)備的普及和多樣化,開發(fā)者們對于更加靈活、高效的操作系統(tǒng)需求與日俱增。在這個背景下,華為推出了OpenHarmony,一個全場景智能終端操作系統(tǒng)和生態(tài)平臺。本文將詳細探討
    的頭像 發(fā)表于 12-19 09:42 ?689次閱讀

    基于ArkTS語言的OpenHarmony APP應(yīng)用開發(fā):HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統(tǒng)編寫的UI應(yīng)用類:HelloOpenHarmony。本案例是基于API9接口開發(fā)。本案例已在OpenHarmony凌蒙派-RK35
    的頭像 發(fā)表于 09-15 08:09 ?387次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應(yīng)用<b class='flag-5'>開發(fā)</b>:Hello<b class='flag-5'>Openharmony</b>