基本概念
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目錄中,其分為 entryability、pages 兩個文件夾。
- 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)行配置。
