HarmonyOS系統(tǒng)架構(gòu)及項(xiàng)目結(jié)構(gòu)淺析

基本概念

UI框架

HarmonyOS提供了一套UI開發(fā)框架,即方舟開發(fā)框架(ArkUI框架)。方舟開發(fā)框架可為開發(fā)者提供應(yīng)用UI開發(fā)所必需的能力,比如多種組件、布局計算、動畫能力、UI交互、繪制等。

方舟開發(fā)框架針對不同目的和技術(shù)背景的開發(fā)者提供了兩種開發(fā)范式,分別是基于ArkTS的聲明式開發(fā)范式(簡稱“聲明式開發(fā)范式”)和兼容JS的類Web開發(fā)范式(簡稱“類Web開發(fā)范式”)。以下是兩種開發(fā)范式的簡單對比。

開發(fā)范式名稱 語言生態(tài) UI更新方式 適用場景 適用人群
聲明式開發(fā)范式 ArkTS語言 數(shù)據(jù)驅(qū)動更新 復(fù)雜度較大、團(tuán)隊(duì)合作度較高的程序 移動系統(tǒng)應(yīng)用開發(fā)人員、系統(tǒng)應(yīng)用開發(fā)人員
類Web開發(fā)范式 JS語言 數(shù)據(jù)驅(qū)動更新 界面較為簡單的程序應(yīng)用和卡片 Web前端開發(fā)人員

應(yīng)用模型

應(yīng)用模型是HarmonyOS為開發(fā)者提供的應(yīng)用程序所需能力的抽象提煉,它提供了應(yīng)用程序必備的組件和運(yùn)行機(jī)制。有了應(yīng)用模型,開發(fā)者可以基于一套統(tǒng)一的模型進(jìn)行應(yīng)用開發(fā),使應(yīng)用開發(fā)更簡單、高效。

隨著系統(tǒng)的演進(jìn)發(fā)展,HarmonyOS先后提供了兩種應(yīng)用模型:

  • FA(Feature Ability)模型: HarmonyOS API 7開始支持的模型,已經(jīng)不再主推。FA模型開發(fā)可見。
  • Stage模型(推薦): HarmonyOS API 9開始新增的模型,是目前主推且會長期演進(jìn)的模型。在該模型中,由于提供了AbilityStage、WindowStage等類作為應(yīng)用組件和Window窗口的“舞臺”,因此稱這種應(yīng)用模型為Stage模型。Stage模型開發(fā)可見。

FA模型和Stage模型的整體架構(gòu)和設(shè)計思想等更多區(qū)別,請見應(yīng)用模型解讀。

Stage 模型

基于Stage模型開發(fā)的應(yīng)用,經(jīng)編譯打包后,其應(yīng)用程序包結(jié)構(gòu)如下圖所示

  • 在開發(fā)態(tài),一個應(yīng)用包含一個或者多個Module,可以在DevEco Studio工程中創(chuàng)建一個或者多個Module。

  • Module是HarmonyOS應(yīng)用 / 服務(wù)的基本功能單元,包含了源代碼、資源文件、第三方庫及應(yīng)用/服務(wù)配置文件,每一個Module都可以獨(dú)立進(jìn)行編譯和運(yùn)行。

  • Module分為“Ability”和“Library”兩種類型

    • “Ability”類型的Module對應(yīng)于編譯后的HAP(Harmony Ability Package);
  • “Library”類型的Module對應(yīng)于HAR(Harmony Archive),或者HSP(Harmony Shared Package)。
    如下圖所示。
  • 這里介紹到的Module默認(rèn)指的是“Ability”類型的Module。

  • 我們通過DevEco Studio把應(yīng)用程序編譯為一個或者多個.hap后綴的文件,即HAP。HAP是HarmonyOS應(yīng)用安裝的基本單位,包含了編譯后的代碼、資源、三方庫及配置文件。HAP可分為Entry和Feature兩種類型。

    • Entry類型的HAP:是應(yīng)用的主模塊,在module.json5配置文件中的type標(biāo)簽配置為“entry”類型。在同一個應(yīng)用中,同一設(shè)備類型只支持一個Entry類型的HAP,通常用于實(shí)現(xiàn)應(yīng)用的入口界面、入口圖標(biāo)、主特性功能等。
    • Feature類型的HAP:是應(yīng)用的動態(tài)特性模塊,在module.json5配置文件中的type標(biāo)簽配置為“feature”類型。一個應(yīng)用程序包可以包含一個或多個Feature類型的HAP,也可以不包含;Feature類型的HAP通常用于實(shí)現(xiàn)應(yīng)用的特性功能,可以配置成按需下載安裝,也可以配置成隨Entry類型的HAP一起下載安裝
  • 每個HarmonyOS應(yīng)用可以包含多個 .hap文件,一個應(yīng)用中的.hap文件合在一起稱為一個Bundle,而bundleName就是應(yīng)用的唯一標(biāo)識。需要注意的是:在應(yīng)用上架到應(yīng)用市場時,需要把應(yīng)用包含的所有.hap文件(即Bundle)打包為一個 .app后綴的文件用于上架,這個.app文件稱為App Pack(Application Package),其中同時包含了描述App Pack屬性的pack.info文件;在云端(服務(wù)器)分發(fā)和終端設(shè)備安裝時,都是以HAP為單位進(jìn)行分發(fā)和安裝的。

  • 打包后的HAP包結(jié)構(gòu)包括ets、libs、resources等文件夾和resources.index、module.json、pack.info等文件。

    • ets目錄用于存放應(yīng)用代碼編譯后的字節(jié)碼文件。
    • libs目錄用于存放庫文件。庫文件是HarmonyOS應(yīng)用依賴的第三方代碼(.so二進(jìn)制文件)。
    • resources目錄用于存放應(yīng)用的資源文件(字符串、圖片等),便于開發(fā)者使用和維護(hù)。
    • resources.index是資源索引表,由IDE編譯工程時生成。
    • module.json是HAP的配置文件,內(nèi)容由工程配置中的module.json5和app.json5組成,該文件是HAP中必不可少的文件。IDE會自動生成一部分默認(rèn)配置,開發(fā)者按需修改其中的配置。
    • pack.info是Bundle中用于描述每個HAP屬性的文件,例如app中的bundleName和versionCode信息、module中的name、type和abilities等信息,由IDE工具生成Bundle包時自動生成。

FA 模型

基于FA模型開發(fā)的應(yīng)用,其應(yīng)用程序包結(jié)構(gòu)如下圖所示。

FA模型與Stage模型不同之處在于HAP內(nèi)部文件存放位置不同,F(xiàn)A模型將所有的資源文件、庫文件和代碼文件都放在assets文件夾中,在文件夾內(nèi)部進(jìn)一步區(qū)分。

  • config.json是應(yīng)用配置文件,IDE會自動生成一部分模塊代碼,開發(fā)者按需修改其中的配置。詳細(xì)字段請參見應(yīng)用配置文件。
  • assets是HAP所有的資源文件、庫文件和代碼文件的集合,內(nèi)部可以分為entry和js文件夾。entry文件夾中存放的是resources目錄和resources.index文件。
  • resources目錄用于存放應(yīng)用的資源文件(字符串、圖片等),便于開發(fā)者使用和維護(hù)。
  • resources.index是資源索引表,由IDE調(diào)用SDK工具生成。
  • js文件夾中存放的是編譯后的代碼文件。
  • pack.info是Bundle中用于描述每個HAP屬性的文件,例如app中的bundleName和versionCode信息、module中的name、type和abilities等信息,由IDE工具生成Bundle包時自動生成。

項(xiàng)目結(jié)構(gòu)

一個 HarmonyOS 項(xiàng)目的目錄結(jié)構(gòu)如下

其中詳細(xì)如下:

  • AppScope中存放應(yīng)用全局所需要的資源文件。
  • entry是應(yīng)用的主模塊,存放HarmonyOS應(yīng)用的代碼、資源等。
  • oh_modules是工程的依賴包,存放工程依賴的源文件。
  • build-profile.json5是工程級配置信息,包括簽名、產(chǎn)品配置等。
  • hvigorfile.ts是工程級編譯構(gòu)建任務(wù)腳本,hvigor是基于任務(wù)管理機(jī)制實(shí)現(xiàn)的一款全新的自動化構(gòu)建工具,主要提供任務(wù)注冊編排,工程模型管理、配置管理等核心能力。
  • oh-package.json5是工程級依賴配置文件,用于記錄引入包的配置信息。

在AppScope,其中有resources文件夾和配置文件app.json5。AppScope>resources>base中包含element和media兩個文件夾,

  • 其中element文件夾主要存放公共的字符串、布局文件等資源。
  • media存放全局公共的多媒體資源文件。

模塊級目錄

entry>src目錄中主要包含總的main文件夾,單元測試目錄ohosTest,以及模塊級的配置文件。

  • main文件夾中,ets文件夾用于存放ets代碼,resources文件存放模塊內(nèi)的多媒體及布局文件等,module.json5文件為模塊的配置文件。
  • ohosTest是單元測試目錄。
  • build-profile.json5是模塊級配置信息,包括編譯構(gòu)建配置項(xiàng)。
  • hvigorfile.ts文件是模塊級構(gòu)建腳本。
  • oh-package.json5是模塊級依賴配置信息文件。

進(jìn)入src>main>ets目錄中,其分為 entryabilitypages 兩個文件夾。

  • entryability存放ability文件,用于當(dāng)前ability應(yīng)用邏輯和生命周期管理。
  • pages存放UI界面相關(guān)代碼文件,初始會生成一個Index頁面。

resources目錄下存放模塊公共的多媒體、字符串及布局文件等資源,分別存放在element、media文件夾中。

app.json5

AppScope>app.json5是應(yīng)用的全局的配置文件,用于存放應(yīng)用公共的配置信息。

其中配置信息如下:

  • bundleName是包名。
  • vendor是應(yīng)用程序供應(yīng)商。
  • versionCode是用于區(qū)分應(yīng)用版本。
  • versionName是版本號。
  • icon對應(yīng)于應(yīng)用的顯示圖標(biāo)。
  • label是應(yīng)用名。

module.json5

entry>src>main>module.json5是模塊的配置文件,包含當(dāng)前模塊的配置信息。

其中module對應(yīng)的是模塊的配置信息,一個模塊對應(yīng)一個打包后的hap包,hap包全稱是HarmonyOS Ability Package,其中包含了ability、第三方庫、資源和配置文件。

module.json5默認(rèn)配置屬性及描述

main_pages.json

src/main/resources/base/profile/main_pages.json 文件保存的是頁面page的路徑配置信息,所有需要進(jìn)行路由跳轉(zhuǎn)的page頁面都要在這里進(jìn)行配置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容