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

基本概念

UI框架

HarmonyOS提供了一套UI開發(fā)框架卢佣,即方舟開發(fā)框架(ArkUI框架)檩电。方舟開發(fā)框架可為開發(fā)者提供應(yīng)用UI開發(fā)所必需的能力贤笆,比如多種組件、布局計(jì)算吟孙、動(dòng)畫能力澜倦、UI交互、繪制等杰妓。

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

開發(fā)范式名稱 語言生態(tài) UI更新方式 適用場景 適用人群
聲明式開發(fā)范式 ArkTS語言 數(shù)據(jù)驅(qū)動(dòng)更新 復(fù)雜度較大栋艳、團(tuán)隊(duì)合作度較高的程序 移動(dòng)系統(tǒng)應(yīng)用開發(fā)人員、系統(tǒng)應(yīng)用開發(fā)人員
類Web開發(fā)范式 JS語言 數(shù)據(jù)驅(qū)動(dòng)更新 界面較為簡單的程序應(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開始新增的模型排作,是目前主推且會(huì)長期演進(jìn)的模型。在該模型中亚情,由于提供了AbilityStage妄痪、WindowStage等類作為應(yīng)用組件和Window窗口的“舞臺(tái)”,因此稱這種應(yīng)用模型為Stage模型楞件。Stage模型開發(fā)可見衫生。

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

Stage 模型

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

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

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

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

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

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

    • Entry類型的HAP:是應(yīng)用的主模塊,在module.json5配置文件中的type標(biāo)簽配置為“entry”類型契耿。在同一個(gè)應(yīng)用中瞒大,同一設(shè)備類型只支持一個(gè)Entry類型的HAP,通常用于實(shí)現(xiàn)應(yīng)用的入口界面搪桂、入口圖標(biāo)透敌、主特性功能等。
    • Feature類型的HAP:是應(yīng)用的動(dòng)態(tài)特性模塊踢械,在module.json5配置文件中的type標(biāo)簽配置為“feature”類型酗电。一個(gè)應(yīng)用程序包可以包含一個(gè)或多個(gè)Feature類型的HAP,也可以不包含内列;Feature類型的HAP通常用于實(shí)現(xiàn)應(yīng)用的特性功能撵术,可以配置成按需下載安裝,也可以配置成隨Entry類型的HAP一起下載安裝
  • 每個(gè)HarmonyOS應(yīng)用可以包含多個(gè) .hap文件话瞧,一個(gè)應(yīng)用中的.hap文件合在一起稱為一個(gè)Bundle荷荤,而bundleName就是應(yīng)用的唯一標(biāo)識(shí)戒职。需要注意的是:在應(yīng)用上架到應(yīng)用市場時(shí),需要把應(yīng)用包含的所有.hap文件(即Bundle)打包為一個(gè) .app后綴的文件用于上架摔笤,這個(gè).app文件稱為App Pack(Application Package)妥曲,其中同時(shí)包含了描述App Pack屬性的pack.info文件;在云端(服務(wù)器)分發(fā)和終端設(shè)備安裝時(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編譯工程時(shí)生成。
    • module.json是HAP的配置文件拉庵,內(nèi)容由工程配置中的module.json5和app.json5組成灿椅,該文件是HAP中必不可少的文件。IDE會(huì)自動(dòng)生成一部分默認(rèn)配置钞支,開發(fā)者按需修改其中的配置茫蛹。
    • pack.info是Bundle中用于描述每個(gè)HAP屬性的文件,例如app中的bundleName和versionCode信息烁挟、module中的name麻惶、type和abilities等信息,由IDE工具生成Bundle包時(shí)自動(dòng)生成信夫。

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會(huì)自動(dòng)生成一部分模塊代碼,開發(fā)者按需修改其中的配置押搪。詳細(xì)字段請(qǐng)參見應(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中用于描述每個(gè)HAP屬性的文件,例如app中的bundleName和versionCode信息畸裳、module中的name缰犁、type和abilities等信息,由IDE工具生成Bundle包時(shí)自動(dòng)生成怖糊。

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

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

其中詳細(xì)如下:

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

在AppScope能扒,其中有resources文件夾和配置文件app.json5佣渴。AppScope>resources>base中包含element和media兩個(gè)文件夾,

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

模塊級(jí)目錄

entry>src目錄中主要包含總的main文件夾见秤,單元測試目錄ohosTest砂竖,以及模塊級(jí)的配置文件真椿。

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

進(jìn)入src>main>ets目錄中,其分為 entryability路媚、pages 兩個(gè)文件夾黄琼。

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

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

app.json5

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

其中配置信息如下:

  • bundleName是包名淤袜。
  • vendor是應(yīng)用程序供應(yīng)商痒谴。
  • versionCode是用于區(qū)分應(yīng)用版本。
  • versionName是版本號(hào)铡羡。
  • icon對(duì)應(yīng)于應(yīng)用的顯示圖標(biāo)积蔚。
  • label是應(yīng)用名。

module.json5

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

其中module對(duì)應(yīng)的是模塊的配置信息,一個(gè)模塊對(duì)應(yīng)一個(gè)打包后的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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末彪笼,一起剝皮案震驚了整個(gè)濱河市钻注,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌配猫,老刑警劉巖幅恋,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泵肄,居然都是意外死亡捆交,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門腐巢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來品追,“玉大人,你說我怎么就攤上這事冯丙∪馔撸” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵胃惜,是天一觀的道長泞莉。 經(jīng)常有香客問我,道長船殉,這世上最難降的妖魔是什么鲫趁? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮利虫,結(jié)果婚禮上挨厚,老公的妹妹穿的比我還像新娘。我一直安慰自己列吼,他們只是感情好幽崩,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布苦始。 她就那樣靜靜地躺著寞钥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陌选。 梳的紋絲不亂的頭發(fā)上理郑,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音咨油,去河邊找鬼您炉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛役电,可吹牛的內(nèi)容都是我干的赚爵。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冀膝!你這毒婦竟也來了唁奢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤窝剖,失蹤者是張志新(化名)和其女友劉穎麻掸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赐纱,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脊奋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疙描。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诚隙。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淫痰,靈堂內(nèi)的尸體忽然破棺而出最楷,到底是詐尸還是另有隱情,我是刑警寧澤待错,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布籽孙,位于F島的核電站,受9級(jí)特大地震影響火俄,放射性物質(zhì)發(fā)生泄漏犯建。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一瓜客、第九天 我趴在偏房一處隱蔽的房頂上張望适瓦。 院中可真熱鬧,春花似錦谱仪、人聲如沸玻熙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗦随。三九已至,卻和暖如春敬尺,著一層夾襖步出監(jiān)牢的瞬間枚尼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工砂吞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留署恍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓蜻直,卻偏偏與公主長得像盯质,于是被迫代替她去往敵國和親袁串。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容