基本概念
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)行配置。