主頁 > 移動端開發 > OpenHarmony SystemUI開發記錄

OpenHarmony SystemUI開發記錄

2023-04-21 09:01:49 移動端開發

背景介紹

最近學習OpenHarmony應用開發, SDK版本是3.2.9.2 Beta4,IDE版本是3.1.0.200,參考官方檔案,做了個Demo應用,除錯、運行非常順利,啟動應用后,狀態欄和導航欄占用的高度過高,顯得很奇怪,嘗試修改一下系統應用,

摸石頭過河

因為沒做過移動端開發,最初以為狀態欄和導航欄是由Launcher控制的,從示例中找了個launcher,按照檔案進行編譯,放在設備上怎么也起不來,Google查了半天,最后發現該版本中檔案描述不全,參考最新版本檔案進行編譯,運行成功,

有了經驗之后,使用系統Launcher進行編譯,報了一堆錯誤,哪里報錯改哪里,修改完之后編譯成功,因為是系統應用,不能使用自動簽名,根據官方提供的簽名方式進行簽名,放到設備中無法顯示應用中心和Dock,

看了系統Launcher代碼,感覺狀態欄和導航欄并不是由Launcher控制的,又下載了系統SystemUI代碼,編譯時也有幾個報錯,不知道怎么解決,后來發現下載的代碼不對,應該從分支中選擇版本,從標簽中選擇的版本代碼可能不全或者有問題,

編譯安裝

替換系統應用方法:

// 獲取系統目錄讀寫權限
hdc shell "mount -o remount,rw /"
// 拷貝應用到SystemUI目錄
hdc file send phone_statusbar-phone_entry-default-signed.hap /system/app/com.ohos.systemui/SystemUI-StatusBar.hap
// 應用放在/data目錄下,洗掉/data目錄下的所有檔案,系統會重新安裝系統應用,
hdc shell "rm -rf /data/*"
// 重啟設備
hdc shell reboot

1.系統應用簽名

  • 環境

    SDK:Beta4,代碼:Beta4

  • 現象

    系統應用無法使用自動簽名,

  • 解決方案

    參考鏈接:系統應用簽名,我使用的是標準簽名,

    下載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": "OpenHarmony Application Release",
            "keyPassword": "00000016FD3897FD4C46940ED39FFC652872B7B18BEDCCA07400A6EBEE307C9C41B96DB6B64D",
            "profile": "signature/systemui.p7b",
            "signAlg": "SHA256withECDSA",
            "storeFile": "signature/OpenHarmony.p12"
          }
        }]
    

2.SystemUI編譯報錯(SDK問題)

  • 環境

    SDK:Beta4,代碼:Beta4

  • 現象

    編譯報錯,資訊如下:

    > hvigor ERROR: Failed :phone_statusbar:default@CompileArkTS... 
    > hvigor ERROR: Tools execution failed.
     ArkTS:ERROR File: /xxx/applications_systemui-OpenHarmony-3.2-Beta4/features/batterycomponent/src/main/ets/default/batteryModel.ts:16:25
     Cannot find module '@ohos.batteryinfo' or its corresponding type declarations.
     Module not found: Error: Can't resolve 'bundle/extensionAbilityInfo' in '/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource'
     Module not found: Error: Can't resolve 'bundle/extensionAbilityInfo' in '/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource/common'
     Module not found: Error: Can't resolve 'bundle/metadata' in '/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource/common'
    
  • 排查

    查看API發現bundle目錄下沒有extensionAbilityInfometadata檔案,而bundleManager中有這兩個檔案,

  • 解決方案

    在報錯的地方將bundle/extensionAbilityInfo改為bundleManager/extensionAbilityInfobundle/metadata改為bundleManager/metadata,編譯通過,

  • 環境

    SDK:Beta2,代碼:Beta4

  • 現象

    編譯報錯,資訊如下:

    > hvigor ERROR: Failed :pc_statusbar:default@CompileArkTS... 
    > hvigor ERROR: Tools execution failed.
     ETS:ERROR File: /xxx/applications_systemui-OpenHarmony-3.2-Beta4/features/batterycomponent/src/main/ets/default/batteryModel.ts:16:25
     Cannot find module '@ohos.batteryInfo' or its corresponding type declarations.
    
  • 排查

    api中info的i為小寫,而檔案中匯入包的時候是大寫I

    image

  • 解決方案

    batteryModel.ts檔案中大寫I改為小寫i,即可編譯成功,如下:

    import BatteryInfo from "@ohos.batteryinfo";
    

3.SystemUI應用安裝失敗

  • 環境

    SDK:Beta4,代碼:Beta4

  • 現象

    替換狀態欄應用后,狀態欄消失

  • 排查

    使用bm命令手動安裝應用報錯:

    手動安裝應用
    bm install -p /system/app/com.ohos.systemui/SystemUI-Status.hap -u 0
    // 報錯資訊
    error: failed to install bundle.
    error: install releaseType not same
    

    報錯資訊意思是設備中SystemUI中SDK版本與我自己編譯的SystemUI SDK版本不一致,查看一下設備中SystemUI的SDK版本:

    hdc shell cat /data/app/el1/bundle/public/com.ohos.systemui/phone_statusbar/module.json
    

    image

  • 解決方案:

    系統中使用的是SDK Beta2,而我編譯使用的是SDK Beta4,所以需要將SDK切換到Beta2版本(Beta2編譯Beta4版本代碼也會有問題,參考:SystemUI編譯報錯(SDK問題)),

4.安裝導航欄后狀態欄消失

  • 環境

    SDK:Beta4,代碼:Beta2

  • 現象

    單獨安裝狀態欄正常,安裝導航欄后狀態欄消失

  • 排查

    查看狀態欄日志,發現有很多日志沒有打出來,追蹤了一下,定位到features/statusbarcomponent/src/main/ets/com/ohos/common/StatusBarConfiguration.ts檔案中,發現卡在這里

    image

    status_bar_size_landscape搜索一下這個欄位,發現base/element/string.json檔案中存在該欄位,zh_CN/element/string.json檔案中不存在該欄位,(zh_CN/element/string.json添加欄位后狀態欄正常顯示,是什么原因不清楚)

  • 解決方案

    product/phone/statusbar/src/main/resources/zh_CN/element/string.json檔案中添加以下內容:

        {
          "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"
        },
    

定制化開發

經過摸索,狀態欄和導航欄布局在視窗管理中控制,可以修改模塊下的ServiceExtAbility.ts檔案來自定義實作,也可以修改組態檔resources/zh_CN/element/string.json中的以下欄位,來控制狀態欄和導航欄的高度(這里高度不能加單位,按照官網檔案的說法默認使用的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"
    },

總結

做普通應用Demo上手容易,ArkTS做頁面布局方便,使用組件點點點即可得到想要的樣式,因為使用的是Beta版本,修改SystemUI程序中遇到很多坑,比如編譯報錯,應用安裝失敗,應用消失等問題,在Google上基本搜不出來解決方案,只能在官方檔案、51CTO社區、華為開發者聯盟上搜索、提問來解決,像是安裝導航欄后狀態欄消失問題,解決起來很容易,但是尋找解決方法要花很長時間,這也是寫這篇文章的原因,希望可以幫助開發者解決問題,同時也希望OpenHarmony社區能夠建立起來,為開發者答疑解惑,
最后,感謝Haoc_小源同學的幫助,感謝TiZizzz的OpenHarmony應用簽名 - 系統應用簽名文章,

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/550739.html

標籤:其他

上一篇:手機穿戴設備能力共享,提升豐富互動體驗

下一篇:返回列表

標籤雲
其他(157766) Python(38083) JavaScript(25379) Java(17984) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7134) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4555) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1917) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • OpenHarmony SystemUI開發記錄

    背景介紹 最近學習OpenHarmony應用開發, SDK版本是3.2.9.2 Beta4,IDE版本是3.1.0.200。參考官方檔案,做了個Demo應用,除錯、運行非常順利。啟動應用后,狀態欄和導航欄占用的高度過高,顯得很奇怪,嘗試修改一下系統應用。 摸石頭過河 因為沒做過移動端開發,最初以為狀 ......

    uj5u.com 2023-04-21 09:01:49 more
  • 手機穿戴設備能力共享,提升豐富互動體驗

    HUAWEI Wear Engine面向手機和穿戴設備的應用與服務開發者,提供華為穿戴設備開放能力。 開發者通過呼叫Wear Engine開放能力,可以實作手機上的生態應用與服務給華為穿戴設備發訊息、發通知、傳輸資料,并獲取穿戴設備狀態、讀取傳感器資料等,也可以實作華為穿戴設備上的生態應用與服務給手 ......

    uj5u.com 2023-04-21 09:01:34 more
  • Cmder: 懶癌必備!從此告別記事本記命令的日子

    前言 平時開發中遇到這樣那樣的命令需要記下來,一般做法是這樣。 新建記事本 將需要記下的關鍵命令保存。 每次需要使用時,粘貼復制即可。 好像沒什么毛病!直到遇到了 Cmder。。。 當看到同事分析問題時在 Cmder 里命令快捷鍵刷刷一頓操作,覺得挺厲害滴。感覺這同事技術好牛,快捷鍵用這么好。后來才 ......

    uj5u.com 2023-04-21 08:56:04 more
  • 手機穿戴設備能力共享,提升豐富互動體驗

    HUAWEI Wear Engine面向手機和穿戴設備的應用與服務開發者,提供華為穿戴設備開放能力。 開發者通過呼叫Wear Engine開放能力,可以實作手機上的生態應用與服務給華為穿戴設備發訊息、發通知、傳輸資料,并獲取穿戴設備狀態、讀取傳感器資料等,也可以實作華為穿戴設備上的生態應用與服務給手 ......

    uj5u.com 2023-04-21 08:53:02 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more