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