Stage模型應(yīng)用程序包結(jié)構(gòu)
為了讓開發(fā)者能對(duì)應(yīng)用程序包在不同階段的形態(tài)更有清晰的認(rèn)知,分別對(duì)開發(fā)態(tài)、編譯態(tài)、發(fā)布態(tài)的應(yīng)用程序結(jié)構(gòu)展開介紹。
開發(fā)態(tài)包結(jié)構(gòu)
在DevEco Studio上[創(chuàng)建一個(gè)項(xiàng)目工程],并嘗試創(chuàng)建多個(gè)不同類型的Module。根據(jù)實(shí)際工程中的目錄對(duì)照本章節(jié)進(jìn)行學(xué)習(xí),可以有助于理解開發(fā)態(tài)的應(yīng)用程序結(jié)構(gòu)。
開發(fā)前請(qǐng)熟悉鴻蒙開發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
圖1 項(xiàng)目工程結(jié)構(gòu)示意圖(以實(shí)際為準(zhǔn))
工程結(jié)構(gòu)主要包含的文件類型及用途如下:
說(shuō)明:
- AppScope目錄由DevEco Studio自動(dòng)生成,不可更改。
- Module目錄名稱可以由DevEco Studio自動(dòng)生成(比如entry、library等),也可以自定義。為了便于說(shuō)明,下表中統(tǒng)一采用Module_name表示。
文件類型 | 說(shuō)明 |
---|---|
配置文件 | 包括應(yīng)用級(jí)配置信息、以及Module級(jí)配置信息: - AppScope > app.json5 :[app.json5配置文件],用于聲明應(yīng)用的全局配置信息,比如應(yīng)用Bundle名稱、應(yīng)用名稱、應(yīng)用圖標(biāo)、應(yīng)用版本號(hào)等。 - Module_name > src > main > module.json5 :[module.json5配置文件],用于聲明Module基本信息、支持的設(shè)備類型、所含的組件信息、運(yùn)行所需申請(qǐng)的權(quán)限等。 |
ArkTS源碼文件 | Module_name > src > main > ets :用于存放Module的ArkTS源碼文件(.ets文件)。 |
資源文件 | 包括應(yīng)用級(jí)資源文件、以及Module級(jí)資源文件,支持圖形、多媒體、字符串、布局文件等,詳見[資源分類與訪問(wèn)]。 -AppScope > resources:用于存放應(yīng)用需要用到的資源文件。 -Module_name > src > main > resources:用于存放該Module需要用到的資源文件。 |
其他配置文件 | 用于編譯構(gòu)建,包括構(gòu)建配置文件、編譯構(gòu)建任務(wù)腳本、混淆規(guī)則文件、依賴的共享包信息等。 - build-profile.json5 :工程級(jí)或Module級(jí)的構(gòu)建配置文件,包括應(yīng)用簽名、產(chǎn)品配置等。 - hvigorfile.ts :應(yīng)用級(jí)或Module級(jí)的編譯構(gòu)建任務(wù)腳本,開發(fā)者可以自定義編譯構(gòu)建工具版本、控制構(gòu)建行為的配置參數(shù)。 - obfuscation-rules.txt :混淆規(guī)則文件。混淆開啟后,在使用Release模式進(jìn)行編譯時(shí),會(huì)對(duì)代碼進(jìn)行編譯、混淆及壓縮處理,保護(hù)代碼資產(chǎn)。 - oh-package.json5 :用于存放依賴庫(kù)的信息,包括所依賴的三方庫(kù)和共享包。 |
編譯態(tài)包結(jié)構(gòu)
不同類型的Module編譯后會(huì)生成對(duì)應(yīng)的HAP、HAR、HSP等文件,開發(fā)態(tài)視圖與編譯態(tài)視圖的對(duì)照關(guān)系如下:
圖2 開發(fā)態(tài)與編譯態(tài)的工程結(jié)構(gòu)視圖
從開發(fā)態(tài)到編譯態(tài),Module中的文件會(huì)發(fā)生如下變更:
- ets目錄 :ArkTS源碼編譯生成.abc文件。
- resources目錄 :AppScope目錄下的資源文件會(huì)合入到Module下面資源目錄中,如果兩個(gè)目錄下的存在重名文件,編譯打包后只會(huì)保留AppScope目錄下的資源文件。
- module配置文件 :AppScope目錄下的app.json5文件字段會(huì)合入到Module下面的module.json5文件之中,編譯后生成HAP或HSP最終的module.json文件。
說(shuō)明:
在編譯HAP和HSP時(shí),會(huì)把他們所依賴的HAR直接編譯到HAP和HSP中。
發(fā)布態(tài)包結(jié)構(gòu)
每個(gè)應(yīng)用中至少包含一個(gè).hap文件,可能包含若干個(gè).hsp文件、也可能不含,一個(gè)應(yīng)用中的所有.hap與.hsp文件合在一起稱為 Bundle ,其對(duì)應(yīng)的bundleName是應(yīng)用的唯一標(biāo)識(shí)(詳見[app.json5配置文件]中的bundleName標(biāo)簽)。
當(dāng)應(yīng)用發(fā)布上架到應(yīng)用市場(chǎng)時(shí),需要將Bundle打包為一個(gè).app后綴的文件用于上架,這個(gè).app文件稱為 App Pack (Application Package),與此同時(shí),DevEco Studio工具自動(dòng)會(huì)生成一個(gè)pack.info文件。pack.info文件描述了App Pack中每個(gè)HAP和HSP的屬性,包含APP中的bundleName和versionCode信息、以及Module中的name、type和abilities等信息。
說(shuō)明:
- App Pack是發(fā)布上架到應(yīng)用市場(chǎng)的基本單元,但是不能在設(shè)備上直接安裝和運(yùn)行。
- 在應(yīng)用簽名、云端分發(fā)、端側(cè)安裝時(shí),都是以HAP/HSP為單位進(jìn)行簽名、分發(fā)和安裝的。
圖3 編譯發(fā)布與上架部署流程圖
選擇合適的包類型
HAP、HAR、HSP三者的功能和使用場(chǎng)景總結(jié)對(duì)比如下:
Module類型 | 包類型 | 說(shuō)明 |
---|---|---|
Ability | [HAP] | 應(yīng)用的功能模塊,可以獨(dú)立安裝和運(yùn)行,必須包含一個(gè)entry類型的HAP,可選包含一個(gè)或多個(gè)feature類型的HAP。 |
Static Liary | [HAR] | 靜態(tài)共享包,編譯態(tài)復(fù)用。 - 支持應(yīng)用內(nèi)共享,也可以發(fā)布后供其他應(yīng)用使用。 - 作為二方庫(kù),發(fā)布到[OHPM]私倉(cāng),供公司內(nèi)部其他應(yīng)用使用。 - 作為三方庫(kù),發(fā)布到[OHPM]中心倉(cāng),供其他應(yīng)用使用。 - 多包(HAP/HSP)引用相同的HAR時(shí),會(huì)造成多包間代碼和資源的重復(fù)拷貝,從而導(dǎo)致應(yīng)用包膨大。 |
Shared Liary | [HSP] | 動(dòng)態(tài)共享包,運(yùn)行時(shí)復(fù)用。 - 當(dāng)前僅支持應(yīng)用內(nèi)共享。 - 當(dāng)多包(HAP/HSP)同時(shí)引用同一個(gè)共享包時(shí),采用HSP替代HAR,可以避免HAR造成的多包間代碼和資源的重復(fù)拷貝,從而減小應(yīng)用包大小。 |
HAP、HSP、HAR支持的規(guī)格對(duì)比如下,其中“√”表示是,“×”表示否。
開發(fā)者可以根據(jù)實(shí)際場(chǎng)景所需的能力,選擇相應(yīng)類型的包進(jìn)行開發(fā)。在后續(xù)的章節(jié)中還會(huì)針對(duì)如何使用[HAP]、[HAR]、[HSP]分別展開詳細(xì)介紹。
規(guī)格 | HAP | HAR | HSP |
---|---|---|---|
支持在配置文件中聲明[UIAbility]組件與[ExtensionAbility]組件 | √ | × | × |
支持在配置文件中聲明[pages]頁(yè)面 | √ | × | √ |
支持包含資源文件與.so文件 | √ | √ | √ |
支持依賴其他HAR文件 | √ | √ | √ |
支持依賴其他HSP文件 | √ | √ | √ |
支持在設(shè)備上獨(dú)立安裝運(yùn)行 | √ | × | × |
說(shuō)明:
HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿
- HAR雖然不支持在配置文件中聲明pages頁(yè)面,但是可以包含pages頁(yè)面,并通過(guò)[命名路由]的方式進(jìn)行跳轉(zhuǎn)。
- 由于HSP僅支持應(yīng)用內(nèi)共享,如果HAR依賴了HSP,則該HAR文件僅支持應(yīng)用內(nèi)共享,不支持發(fā)布到二方倉(cāng)或三方倉(cāng)供其他應(yīng)用使用,否則會(huì)導(dǎo)致編譯失敗。
- HAR和HSP均不支持循環(huán)依賴,也不支持依賴傳遞。
審核編輯 黃宇
-
開發(fā)
+關(guān)注
關(guān)注
0文章
370瀏覽量
40872 -
模型
+關(guān)注
關(guān)注
1文章
3267瀏覽量
48924 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2370瀏覽量
42905 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
189瀏覽量
4459
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論