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