鴻蒙崛起:探索新一代技術(shù) 課件 第4章-鴻蒙應(yīng)用程序開發(fā)基礎(chǔ)_第1頁
鴻蒙崛起:探索新一代技術(shù) 課件 第4章-鴻蒙應(yīng)用程序開發(fā)基礎(chǔ)_第2頁
鴻蒙崛起:探索新一代技術(shù) 課件 第4章-鴻蒙應(yīng)用程序開發(fā)基礎(chǔ)_第3頁
鴻蒙崛起:探索新一代技術(shù) 課件 第4章-鴻蒙應(yīng)用程序開發(fā)基礎(chǔ)_第4頁
鴻蒙崛起:探索新一代技術(shù) 課件 第4章-鴻蒙應(yīng)用程序開發(fā)基礎(chǔ)_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

鴻蒙崛起第4章:鴻蒙應(yīng)用程序開發(fā)基礎(chǔ)延遲符目錄Contents4.14.2項(xiàng)目中的文件包概述DevEcoStudio及工程文件4.3章末知識概覽導(dǎo)圖延遲符4.1項(xiàng)目中的文件包概述PART延遲符01前面介紹了如何創(chuàng)建鴻蒙的第一個應(yīng)用程序,但是在程序中所包含的文件包、代碼含義等細(xì)節(jié)還沒有更為清晰的認(rèn)識。本小節(jié)將給讀者介紹鴻蒙開發(fā)快速入門的一些相關(guān)基礎(chǔ)知識,掌握這些基礎(chǔ)知識可以為學(xué)習(xí)其他中級知識奠定良好的基礎(chǔ)。4.1.1使用場景和設(shè)計意義

在設(shè)備的操作系統(tǒng)之上安裝著各種應(yīng)用軟件,這些應(yīng)用軟件對應(yīng)的文件包就可以稱之為應(yīng)用程序包。鴻蒙系統(tǒng)提供了程序包的開發(fā)、安裝、查詢、更新、卸載的管理機(jī)制。同時,鴻蒙系統(tǒng)還屏蔽了不同芯片平臺的差異,所有的應(yīng)用程序都可以在不同的芯片上安裝和運(yùn)行,這種設(shè)計可以讓鴻蒙開發(fā)人員將自己的開發(fā)任務(wù)聚焦于開發(fā)本身,而不是芯片和程序之間的兼容問題。

鴻蒙中的一個應(yīng)用會有多個功能,在鴻蒙的設(shè)計中這些功能將按照不同的特性進(jìn)行模塊劃分,這些被劃分的模塊稱為Module,而在Module中其文件構(gòu)成主要包括源代碼、資源文件、第三方庫、配置文件等等,每一個Module都可以進(jìn)行獨(dú)立編譯來實(shí)現(xiàn)特定的功能。這種模塊化開發(fā)思想可以使整個程序本身有用松耦合的特性,易于程序的開發(fā)、維護(hù)和擴(kuò)展。

一個應(yīng)用需要適配多種設(shè)備類型,而在基于Module的方式中,每個Module都會標(biāo)注所支持的設(shè)備類型,其中的一些Module支持所有設(shè)備,而有些Module則只支持部分設(shè)備,這種方式使得程序在應(yīng)用市場中的分發(fā)可以針對設(shè)備類型而做出快速而精準(zhǔn)的匹配和篩選,從而將不同的Module進(jìn)行組合和部署到用戶的目標(biāo)設(shè)備上。4.1.1使用場景和設(shè)計意義這里需要明確HAP、Module和Ability三個概念,了解其設(shè)計用意和使用場景,以下是針對這三個概念的一些解釋:(1)Ability:能力的意思,Ability是應(yīng)用程序功能的基本單元。它定義了應(yīng)用程序能夠提供的服務(wù)或功能。Ability主要分為兩種類型:FeatureAbility(FA)和ParticleAbility(PA)。FeatureAbility主要用于提供與用戶交互的功能,而ParticleAbility主要用于提供后臺任務(wù)和數(shù)據(jù)訪問功能。(2)Module:模塊的意思,Module是應(yīng)用程序的組成部分,它包含了多個Ability。一個Module可以包含一個或多個Ability,這些Ability共同實(shí)現(xiàn)一個特定的功能或服務(wù)。Module是應(yīng)用程序的構(gòu)建塊,它使得應(yīng)用程序的開發(fā)更加模塊化,便于管理和維護(hù)。(3)HAP:HAP是HarmonyOS應(yīng)用包,一個HAP文件可以包含一個或多個Ability,這些Ability共同實(shí)現(xiàn)應(yīng)用的功能,HAP包是Ability的部署包,也是應(yīng)用安裝和運(yùn)行的基本單元。在理想的情況下,一個應(yīng)用程序應(yīng)該被拆分為多個獨(dú)立模塊,每個獨(dú)立模塊就是所謂的Module,每一個Module又由一個或多個Ability組成。一個或多個Ability以及相關(guān)的資源、配置等文件被打包成一個HAP文件,作為應(yīng)用安裝和運(yùn)行的基本單元??偨Y(jié)來說,Ability是應(yīng)用功能的基本單元,Module是應(yīng)用功能模塊的組織方式,而HAP是應(yīng)用安裝和運(yùn)行的基本單元,包含了代碼、資源和配置文件。4.1.1使用場景和設(shè)計意義那么應(yīng)用程序中的module數(shù)量和轉(zhuǎn)換之后的hap數(shù)量是什么關(guān)系呢?一個應(yīng)用程序通常由多個模塊(module)組成,每個模塊在部署時都會轉(zhuǎn)換為一個HAP文件。因此,如果程序中有四個模塊,理論上在部署時它會轉(zhuǎn)換成四個HAP文件,而實(shí)際情況可能會根據(jù)應(yīng)用程序的設(shè)計和部署策略有所不同。例如,如果某些模塊是相互依賴的,或者開發(fā)者希望將某些模塊打包在一起以提高性能或簡化部署過程,那么這些模塊可能會被合并成一個HAP文件。另外,開發(fā)者也可能選擇將某些模塊作為獨(dú)立的應(yīng)用程序發(fā)布,每個模塊對應(yīng)一個HAP文件??傊?,一個程序中的模塊數(shù)量與最終生成的HAP文件數(shù)量之間的關(guān)系取決于應(yīng)用程序的設(shè)計和開發(fā)者的決策。在大多數(shù)情況下,每個模塊都會轉(zhuǎn)換為一個HAP文件,但也可以根據(jù)需要進(jìn)行調(diào)整。如圖Module與HAP的轉(zhuǎn)換關(guān)系所示。4.1.2應(yīng)用包HAP的使用此處添加詳細(xì)文本描述,建議與標(biāo)題相關(guān)并符合整體語言風(fēng)格,語言描述盡量簡潔生動此處添加詳細(xì)文本描述,建議與標(biāo)題相關(guān)并符合整體語言風(fēng)格,語言描述盡量簡潔生動此處添加詳細(xì)文本描述,建議與標(biāo)題相關(guān)并符合整體語言風(fēng)格,語言描述盡量簡潔生動HAP(HarmonyOSAbilityPackage)是鴻蒙操作系統(tǒng)(HarmonyOS)中的一種應(yīng)用包格式,它是鴻蒙應(yīng)用開發(fā)的基礎(chǔ)單元。HAP文件包含了應(yīng)用的所有代碼、資源、第三方庫以及應(yīng)用所需的配置信息。一個HAP通常包含內(nèi)容如下表所示。包含內(nèi)容舉例代碼資源包括應(yīng)用的Java/Kotlin代碼、C/C++原生代碼以及HarmonyOS特有的ArkTS(ArkUI)代碼。配置文件如config.json,這是HAP的核心配置文件,定義了應(yīng)用的Ability、權(quán)限、模塊信息等。資源文件如圖片、布局文件、字符串資源等,這些資源用于支持應(yīng)用的界面展示和國際化。第三方庫應(yīng)用可能依賴的第三方代碼庫。HAP也分為兩種類型:EntryHAP和FeatureHAP。EntryHAP,也叫主HAP,它是應(yīng)用的入口模塊,用戶可以直接安裝和運(yùn)行EntryHAP,并且一個鴻蒙應(yīng)用至少包含一個EntryHAP;FeatureHAP,也叫特征HAP,它是應(yīng)用的可選功能模塊,可以按需下載和安裝。FeatureHAP允許應(yīng)用實(shí)現(xiàn)模塊化,減少初始安裝包的大小,一個應(yīng)用通常包含0個或者多個FeatureHAP;4.1.2應(yīng)用包HAP的使用——開發(fā)步驟在鴻蒙中,應(yīng)用程序包可以只包含一個基礎(chǔ)的entry包,也可以包含一個基礎(chǔ)的entry包和多個功能性的feature包。HAP作為鴻蒙操作系統(tǒng)的核心應(yīng)用包格式,其設(shè)計充分體現(xiàn)了現(xiàn)代操作系統(tǒng)對應(yīng)用開發(fā)的高效、靈活和跨設(shè)備支持的需求。HAP的特點(diǎn)主要體現(xiàn)在其模塊化的結(jié)構(gòu)設(shè)計,支持應(yīng)用的原子化服務(wù)和跨設(shè)備無縫流轉(zhuǎn),確保了應(yīng)用的可擴(kuò)展性和用戶體驗(yàn)的一致性。模塊化使得開發(fā)者能夠?qū)?yīng)用拆分成多個獨(dú)立的功能單元,不僅便于管理和維護(hù),還能實(shí)現(xiàn)按需下載和動態(tài)更新,顯著減少了應(yīng)用的初始安裝包大小,優(yōu)化了用戶的下載和安裝體驗(yàn)。此外,HAP的跨設(shè)備能力是其一大亮點(diǎn),它允許應(yīng)用在不同的硬件和軟件平臺上運(yùn)行,利用HarmonyOS的分布式技術(shù),實(shí)現(xiàn)了一套代碼多端運(yùn)行,大大提升了開發(fā)效率和應(yīng)用的可訪問性。同時,HAP還注重兼容性和安全性,確保應(yīng)用能夠在多樣化的設(shè)備上穩(wěn)定運(yùn)行,同時保護(hù)用戶的數(shù)據(jù)安全,為開發(fā)者提供了一個強(qiáng)大而可靠的應(yīng)用開發(fā)平臺。HAP的開發(fā)步驟見圖所示。4.1.2應(yīng)用包HAP的使用——設(shè)計理念作為鴻蒙系統(tǒng)的開發(fā)者,在設(shè)計HAP時需要進(jìn)行模塊化的理念設(shè)計,主要基于以下幾方面的重要原因:靈活與擴(kuò)展性:模塊化設(shè)計使得應(yīng)用結(jié)構(gòu)更加靈活和可擴(kuò)展。每個HAP模塊都是獨(dú)立的功能單元,可以單獨(dú)開發(fā)、測試和部署。這種設(shè)計可以使得整個應(yīng)用中其他功能不受到任何影響的情況下,輕松地添加、更新或刪除特定功能,從而快速響應(yīng)市場和用戶需求的變化??缭O(shè)備兼容性:鴻蒙系統(tǒng)致力于實(shí)現(xiàn)全場景智慧生態(tài),支持多種設(shè)備的互聯(lián)互通。通過HAP模塊化,以針對不同設(shè)備的特性,如屏幕大小、處理器能力等,提供定制化的功能模塊。這樣不僅保證了應(yīng)用在多種設(shè)備上的良好兼容性,還能為用戶提供更加個性化的體驗(yàn)。高效資源管理:模塊化設(shè)計有助于優(yōu)化資源管理。在用戶實(shí)際使用過程中,按需加載和卸載HAP模塊,可以顯著減少應(yīng)用的內(nèi)存和存儲占用,提高運(yùn)行效率。此外,這種按需加載的方式還能加快應(yīng)用的啟動速度,提升用戶體驗(yàn)。簡化分布式開發(fā):鴻蒙系統(tǒng)的分布式特性要求應(yīng)用能夠在多個設(shè)備上協(xié)同工作。HAP模塊化使得分布式開發(fā)變得更加簡單,可以專注于特定模塊在不同設(shè)備間的交互邏輯,從而實(shí)現(xiàn)無縫的跨設(shè)備協(xié)同。易于維護(hù)與升級:模塊化降低了應(yīng)用的整體復(fù)雜度,使得代碼更易于理解和維護(hù)。在應(yīng)用迭代過程中,可以針對性地更新某個模塊,而無需重新部署整個應(yīng)用,這不僅提高了維護(hù)效率,還減少了用戶因更新帶來的不便。促進(jìn)代碼復(fù)用:通過模塊化,可以將通用功能抽象成獨(dú)立的HAP模塊,這些模塊可以在不同的應(yīng)用或項(xiàng)目中復(fù)用,大大提高了開發(fā)效率,減少了重復(fù)工作。4.1.2應(yīng)用包HAP的使用——HAP、APP、設(shè)備的關(guān)系鴻蒙系統(tǒng)中的APP概念和安卓一樣,也指應(yīng)用軟件,它由一個或多個HAP包組成,HAP是鴻蒙應(yīng)用的基本組成單元,包含了應(yīng)用的具體功能模塊,多個HAP共同構(gòu)成了一個完整的鴻蒙APP,實(shí)現(xiàn)跨設(shè)備流轉(zhuǎn)和分布式能力。而跨設(shè)備流轉(zhuǎn)的體現(xiàn)則是不同的設(shè)備對有不同的Entry。從Entry與設(shè)備的關(guān)系來說,同一個鴻蒙應(yīng)用可以在多個設(shè)備上運(yùn)行,而每個設(shè)備上的應(yīng)用實(shí)例都需要通過Entry來啟動和運(yùn)行。此外,Entry還負(fù)責(zé)根據(jù)不同設(shè)備的特性(如屏幕大小、輸入方式等)來適配應(yīng)用界面和功能,確保應(yīng)用在不同設(shè)備上提供一致的用戶體驗(yàn)。也就是說,Entry是鴻蒙應(yīng)用在特定設(shè)備上的啟動點(diǎn)和交互界面,它使得應(yīng)用能夠跨設(shè)備運(yùn)行和協(xié)同。4.1.2應(yīng)用包HAP的使用——HAP的創(chuàng)建那么如何創(chuàng)建一個HAP模塊呢?只要按照如下步驟進(jìn)行設(shè)計即可:l創(chuàng)建工程,構(gòu)建第一個ArkTS應(yīng)用。l在工程目錄上單擊右鍵,選擇New——Module。l在彈出的對話框中選擇EmptyAbility模板,單擊Next。l在Module配置界面,配置Modulename,選擇ModuleType和DeviceType,然后單擊Next。l在Ability配置界面,配置Abilityname,然后單擊Finish完成創(chuàng)建。l通過DevEcoStudio編譯打包,生成單個或者多個HAP,即可對其進(jìn)行調(diào)試。4.1.2應(yīng)用包HAP的使用——HAP、APP、設(shè)備的關(guān)系從HAP的使用場景來說,分為:單HAP場景:單HAP場景下,應(yīng)用的所有功能都封裝在一個HAP包中。這意味著應(yīng)用的代碼、資源和配置文件都包含在一個HAP文件中,單HAP場景適用于小型應(yīng)用或功能單一的應(yīng)用。由于所有功能都在一個HAP包中,這種場景下的應(yīng)用部署和管理相對簡單。多HAP場景:在多HAP場景中,應(yīng)用的功能被拆分到多個HAP包中。每個HAP包可以包含應(yīng)用的一個或多個特性,或者一個主模塊和多個特性模塊,在多HAP場景中,應(yīng)用的功能被拆分到多個HAP包中。每個HAP包可以包含應(yīng)用的一個或多個特性(Feature),或者一個主模塊(Entry)和多個特性模塊。 在多HAP場景中,應(yīng)用的入口模塊(Entry)通常包含應(yīng)用的啟動邏輯和核心功能,而特性模塊(Feature)則包含應(yīng)用的附加功能或可選特性。這種設(shè)計使得應(yīng)用可以根據(jù)用戶的需求和設(shè)備的能力動態(tài)地加載和卸載特性模塊,從而實(shí)現(xiàn)應(yīng)用的靈活性和個性化。 單HAP場景和多HAP場景的選擇取決于應(yīng)用的大小、復(fù)雜性和功能需求。單HAP場景適用于簡單、輕量級的應(yīng)用,而多HAP場景則適用于需要模塊化開發(fā)和動態(tài)特性支持的大型應(yīng)用。4.1.2應(yīng)用包HAP的使用——HAP的安裝和調(diào)試完成HAP安裝或更新后,即可參考相關(guān)調(diào)試命令進(jìn)行調(diào)試,具體可參考官方文檔的調(diào)測調(diào)優(yōu)部分。接下來看一個多HAP的示例演示,雖然至此還沒有進(jìn)行深入的技術(shù)學(xué)習(xí),但是可以先大致對多HAP的場景設(shè)計有一個初步的認(rèn)識。開發(fā)者可以使用DevEcoStudio進(jìn)行調(diào)試,或者使用hdc工具進(jìn)行調(diào)試。在調(diào)試前,需要安裝HAP,可以直接使用hdc安裝,這里以Windows開發(fā)平臺為例,參考命令如下://安裝、更新,多HAP可以指定多個文件路徑hdcinstallentry.hapfeature.hap//執(zhí)行結(jié)果installbundlesuccessfully.//卸載hdcuninstallcom.example.myapplication//執(zhí)行結(jié)果uninstallbundlesuccessfully.

除了使用hdc來安裝,還可以先執(zhí)行hdcshell,再使用bm工具(包管理器)安裝。以真機(jī)上的HAP文件路徑為例:

//先執(zhí)行hdcshell才能使用bm工具h(yuǎn)dcshell//安裝、更新,多HAP可以指定多個文件路徑bminstall-p/data/app/entry.hap/data/app/feature.hap//執(zhí)行結(jié)果installbundlesuccessfully.//卸載bmuninstall-ncom.example.myapplication//執(zhí)行結(jié)果uninstallbundlesuccessfully.4.1.2應(yīng)用包HAP的使用——多HAP開發(fā)示例在本實(shí)例中展示的是多HAP開發(fā),其中應(yīng)用包含一個entryHAP和兩個featureHAP,兩個featureHAP分別提供了音頻和視頻播放組件,entry中使用了音頻和視頻播放組件。三個模塊需要安裝三個hap包,最終會在設(shè)備上安裝一個主entry的hap包。本例子中使用到了兩個接口:l應(yīng)用上下文Context接口@monl媒體服務(wù)接口@ohos.multimedia.media安裝步驟如下:4.1.2應(yīng)用包HAP的使用——多HAP開發(fā)示例1.

點(diǎn)擊Build->BuildHap(s)/APP(s)->BuildHap(s),構(gòu)建三個模塊的hap包。2.

使用IDE安裝多Hap包。(a)點(diǎn)擊entry->EditConfigurations,如圖編輯頁面所示。4.1.2應(yīng)用包HAP的使用——多HAP開發(fā)示例(b)選擇

DeployMultiHap勾選DeployMultiHapPackages后勾選audioFeature和videoFeature,點(diǎn)擊Apply后運(yùn)行項(xiàng)目,如圖多HAP部署界面:(c)點(diǎn)擊audio,進(jìn)入audio播放頁面,可點(diǎn)擊PlayAudio按鈕,播放音頻。(d)點(diǎn)擊video,進(jìn)入video播放頁面,可點(diǎn)擊播放按鈕播放視頻。以下是工程目錄的說明:4.1.2應(yīng)用包HAP的使用——多HAP開發(fā)示例├──videoFeature/src/main/ets/│├──application││└──MyAbilityStage.ets│├──videoability││└──VideoAbility.ets│├──pages││└──index.ets//video組件的實(shí)現(xiàn)頁面│└──util│└──Logger.ts//日志工具└──videoFeature/src/main/module.json5//video模塊配置hap類型:"type":"feature"├──audioFeature/src/main/ets/│├──application││└──MyAbilityStage.ets│├──audioAbility││└──AudioAbility.ets│├──pages││└──index.ets//audio組件的實(shí)現(xiàn)頁面│└──util│└──Logger.ts//日志工具├──audioFeature/src/main/module.json5//audio模塊配置hap類型:"type":"feature"│├──entry/src/main/ets/│├──application││└──MyAbilityStage.ets│├──mainability││└──MainAbility.ets│├──pages││└──index.ets//entry主應(yīng)用入口,內(nèi)含首頁組件以及發(fā)起hap跳轉(zhuǎn)邏輯│└──util│└──Logger.ts//日志工具├──entry/src/main/module.json5//entry模塊配置hap類型:"type":"entry"這個例子中的三個模塊分別是1個entry和兩個feature。其中entry是應(yīng)用程序的主模塊,也可以理解為入口模塊,也就是程序在運(yùn)行的初期需要加載的第一個模塊,此外這個模塊必須存在,有且只有一個。然后通過entry模塊進(jìn)入到其他兩個feature模塊,它們其中一個為名字為videoFeature,另一個名字為audioFeature,這就是在工程中的多HAP使用場景。4.1.2應(yīng)用包HAP的使用——多HAP開發(fā)示例之設(shè)計思路此示例的設(shè)計思路如下:

新創(chuàng)建兩個Module作為將被跳轉(zhuǎn)的HAP,分別命名為videoFeature,audioFeature。

配置每個HAP的type(類型),具體做法是:

把entry文件夾下的module.json5中type屬性配置改為entry。

把videoFeature和audioFeature文件夾下的module.json5中type屬性配置改為feature;

使用Want跳轉(zhuǎn)到其他的Ability。

通過Want的配置中指定bundleName和abilityName來唯一確定一個Ability。在entry模塊index.ets首頁中,在按鈕.onclick()事件內(nèi),通過Want配置顯式拉起一個新的指定的Ability。語法如下(可以先不用注重語法細(xì)節(jié)):以配置videoFeature模塊Want配置為例,在觸發(fā)按鈕事件中加入配置的Want:btn.onClick(()=>{this.context.startAbility({bundleName:BUNDLE_NAME,abilityName:AUDIO_ABILITY_NAME}} 在這里例子中,bundleName和abilityName的含義分別是:bundleName為appscope文件夾下app.json5中"bundleName":"com.samples.multihap"

abilityName為videoFeature模塊src/main/module.json5中abilities:["name":"VideoAbility"]。4.1.3靜態(tài)共享包HAR的使用HAR(HarmonyArchive)是靜態(tài)共享包,可以包含代碼、C++庫、資源和配置文件。通過HAR可以實(shí)現(xiàn)多個模塊或多個工程共享ArkUI組件、資源等相關(guān)代碼。一般將它發(fā)布到OHPM私倉,供公司內(nèi)部其他應(yīng)用使用,或者發(fā)布到OHPM中心倉庫,供其他應(yīng)用使用。但是HAR包不能像應(yīng)用模塊那樣單獨(dú)在設(shè)備上安裝和運(yùn)行,其只能為應(yīng)用模塊的依賴項(xiàng)而被引用,同時,HAR可以依賴其他HAR,但是不支持循環(huán)依賴,也不支持傳遞依賴。4.1.3靜態(tài)共享包HAR的使用接下來展示的是如何創(chuàng)建一個HAR模塊:(1)將鼠標(biāo)放在工程目錄上,然后選擇New>Module,在工程中添加模塊。(2)在ChooseYourAbilityTemplate界面中,選擇StaticLibrary,并單擊Next,如圖4-5

staticlibrary的創(chuàng)建。(3)在ConfigureNewModule界面中,設(shè)置新添加的模塊信息,設(shè)置完成后,單擊Finish完成創(chuàng)建。其中Modulename指的是模塊的名字,Devicetype指的是支持的設(shè)備類型,Enablenative指的是是否創(chuàng)建一個用于調(diào)用C++代碼的模塊。如圖4-6創(chuàng)建HAP模塊的界面。4.1.3靜態(tài)共享包HAR的使用(4)創(chuàng)建完成后,會在工程項(xiàng)目目錄中生成庫模塊及相關(guān)文件,如圖HAR模塊的創(chuàng)建。(5)接下來進(jìn)行模塊編譯,選中模塊名,然后通過DevEcoStudio菜單欄的Build>MakeModule${libraryName}進(jìn)行編譯構(gòu)建,生成HAR。這個生成的HAR就可以用于工程中其他模塊的引用,亦或是將其上傳到ohpm倉庫,供其他開發(fā)人員下載使用,部分源碼文件不需要打包到HAR時,可以使用ohpmignore文件,其作用是在打包時會自動忽略掉不需要的文件和文件夾,見圖4-8模塊打包操作??梢圆榭吹骄幾g好后生成的.har文件,見下圖。4.1.3靜態(tài)共享包HAR的使用在編譯構(gòu)建HAR時,請注意以下事項(xiàng):(1)編譯構(gòu)建HAR的過程中,不會將模塊中的C++代碼直接打包進(jìn).har文件中,而是將C++代碼編譯成動態(tài)依賴庫.so文件放置在.har文件中的libs目錄下。(2)在編譯構(gòu)建HAR的過程中,會生成資源文件ResourceTable.txt,以便編輯器可以對HAR中的資源文件進(jìn)行聯(lián)想。因此,如果不使用DevEcoStudio對HAR進(jìn)行構(gòu)建,則DevEcoStudio的編輯器會無法聯(lián)想HAR中的資源。(3)如果使用的自動化構(gòu)建工具Hvigor為2.5.0-s及以上版本,在編譯構(gòu)建HAR的過程中,會將dependencies內(nèi)處于本模塊路徑下的本地依賴也打包進(jìn).har文件中,在進(jìn)行打包的操作后,發(fā)現(xiàn)部分的本地依賴,可參考官方網(wǎng)站給予的解決方案。4.1.4動態(tài)共享包HSP的使用鴻蒙操作系統(tǒng)中的HSP(HarmonySharedPackage)是一種動態(tài)共享庫,它可以包含代碼、C++庫、資源和配置文件,實(shí)現(xiàn)代碼和資源的共享。HSP不支持獨(dú)立發(fā)布,而是跟隨其宿主應(yīng)用的APP包一起發(fā)布,與宿主應(yīng)用同進(jìn)程,具有相同的包名和生命周期。HSP的主要特點(diǎn)和使用場景如下:l代碼和資源共享:HSP允許多個HAP(HarmonyAbilityPackage)或HSP共用代碼和資源,提高碼、資源的可重用性和可維護(hù)性,同時編譯打包時只保留一份HSP代碼和資源,有效控制應(yīng)用包大小。l運(yùn)行時按需加載:HSP在運(yùn)行時可以按需加載,有助于提升應(yīng)用性能。l組織內(nèi)部代碼共享:同一個組織內(nèi)部的多個應(yīng)用之間,可以使用集成態(tài)HSP實(shí)現(xiàn)代碼和資源的共享。l解決HAR問題:HSP旨在解決HAR(HarmonyArchive)存在的一些問題,如多個HAP引用相同的HAR導(dǎo)致的APP包大小膨脹問題,以及HAR中的一些狀態(tài)變量無法共享的問題。l分布式應(yīng)用場景:HSP文件用于打包和分發(fā)服務(wù)(如元服務(wù)或分布式能力服務(wù)),主要服務(wù)于分布式應(yīng)用場景,支持多設(shè)備間的協(xié)同工作和數(shù)據(jù)共享。l服務(wù)管理:HSP文件主要用于分布式應(yīng)用的服務(wù)管理,在HarmonyOS生態(tài)中,設(shè)備間的協(xié)同工作是其核心亮點(diǎn)之一。通過HSP文件,開發(fā)者可以將某個服務(wù)的能力在多個設(shè)備之間共享,比如跨設(shè)備文件共享、分布式任務(wù)處理等。4.1.4動態(tài)共享包HSP的使用可以使用DevEcoStudio來開發(fā)動態(tài)共享包HSP,在應(yīng)用/服務(wù)開發(fā)過程中部分功能按需動態(tài)下載,或開發(fā)元服務(wù)場景時需要分包加載,可使用HSP實(shí)現(xiàn)相應(yīng)功能。當(dāng)有多個安裝包需要資源共享時,也可利用HSP減少公共資源和代碼重復(fù)打包。HSP中有兩種使用方式:應(yīng)用內(nèi)HSP:在編譯過程中與應(yīng)用包名(bundleName)強(qiáng)耦合,只能給某個特定的應(yīng)用使用。集成態(tài)HSP:構(gòu)建、發(fā)布過程中,不與特定的應(yīng)用包名耦合;使用時,工具鏈支持自動將集成態(tài)HSP的包名替換成宿主應(yīng)用包名。4.1.4動態(tài)共享包HSP的使用下表是兩種HSP形態(tài)的對比圖形態(tài)應(yīng)用內(nèi)集成態(tài)定義應(yīng)用內(nèi)HSP是專門為某一應(yīng)用開發(fā)的動態(tài)共享包,只能在編譯過程中與該應(yīng)用的包名(bundleName)強(qiáng)耦合,只能被該特定應(yīng)用使用。集成態(tài)HSP在構(gòu)建和發(fā)布過程中不與特定的應(yīng)用包名耦合;使用時,工具鏈支持自動將集成態(tài)HSP的包名替換成宿主應(yīng)用的包名。使用范圍僅限于內(nèi)部其他HAP/HSP使用,用于應(yīng)用內(nèi)部代碼和資源的共享??梢员欢鄠€應(yīng)用共享使用,只要這些應(yīng)用的簽名相同。它是解決使用方的bundleName和簽名之間強(qiáng)耦合問題的工具。發(fā)布方式隨宿主應(yīng)用的APP包一起發(fā)布,與宿主應(yīng)用具有相同的包名和生命周期。同樣隨宿主應(yīng)用一起發(fā)布,但可以在不同的應(yīng)用間共享,提供更大的靈活性。優(yōu)點(diǎn)專為單一應(yīng)用設(shè)計,確保了應(yīng)用內(nèi)部的高效代碼和資源共享,適用于需要嚴(yán)格內(nèi)部管理和隔離的場景。提供了跨應(yīng)用的代碼和資源共享能力,增加了應(yīng)用的靈活性和可重用性。特別適用于多個應(yīng)用間需要共享相同功能或資源的場景。局限性由于與特定應(yīng)用包名強(qiáng)耦合,靈活性較差,不能跨應(yīng)用共享。需要處理不同應(yīng)用間的包名和簽名問題,可能增加構(gòu)建和發(fā)布的復(fù)雜性。4.1.4動態(tài)共享包HSP的使用從上表可以看出,應(yīng)用內(nèi)HSP和集成態(tài)HSP在耦合性、使用范圍、靈活性、復(fù)雜性和適用場景等方面存在顯著差異。應(yīng)用內(nèi)HSP與特定應(yīng)用包名強(qiáng)耦合,僅限于內(nèi)部使用,適用于需要嚴(yán)格內(nèi)部管理和隔離的場景;集成態(tài)HSP在構(gòu)建和發(fā)布過程中不與特定應(yīng)用包名耦合,可以跨應(yīng)用共享,提供了更大的靈活性,特別適用于多個應(yīng)用間需要共享相同功能或資源的場景。然而,集成態(tài)HSP在構(gòu)建和發(fā)布過程中可能涉及更多的復(fù)雜性,需要處理包名和簽名問題。因此,在選擇應(yīng)用內(nèi)HSP還是集成態(tài)HSP時,需要根據(jù)具體的項(xiàng)目需求和應(yīng)用架構(gòu)來決定。

注意,HSP及其使用方都必須是API10及以上版本Stage模型,并且HSP及其使用方都必須使用模塊化編譯模式,這里的模塊化編譯是在API10及以上版本的Stage工程默認(rèn)開啟的,它有助于縮短增量編譯時間、減小編譯后的包體積。4.1.4動態(tài)共享包HSP的使用首先先來創(chuàng)建HSP模塊,在DevEcoStudio中,新建一個模塊,然后在選擇模板模板類型的界面,選擇SharedLibrary,如圖創(chuàng)建HSP模塊。4.1.4動態(tài)共享包HSP的使用

點(diǎn)擊“next”之后,然后設(shè)置新添加的模塊信息,在該界面中:l“Modulename”代表模塊的名字l“Devicetype”代表支持的設(shè)備類型l“Enablenative”代表是否創(chuàng)建一個用于調(diào)用C++代碼的模塊。設(shè)置完成后點(diǎn)擊“finish”完成創(chuàng)建,這樣就會在工程目錄中生成庫模塊及相關(guān)文件,如圖創(chuàng)建HSP模塊時的項(xiàng)目目錄結(jié)構(gòu)。4.1.4動態(tài)共享包HSP的使用如果該模塊開發(fā)完畢之后,對該模塊進(jìn)行編譯:選中模塊名,然后通過DevEcoStudio菜單欄的Build>MakeModule${libraryName}進(jìn)行編譯構(gòu)建,生成HSP。在打包HSP時,會同時默認(rèn)打包出HAR,在模塊下的build目錄下可以看到HAR文件和HSP文件,如圖4-13編譯之后生成的HAR和HSP文件。

如果需要在應(yīng)用內(nèi)共享HSP,則可以將HSP共享包上傳至私倉,在這之前需要先通過編譯生成*.tgz包。這里需要先在DevEcoStudio中點(diǎn)擊produce按鈕,如圖

release模式切換按鈕。4.1.4動態(tài)共享包HSP的使用將編譯模式切換為release模式,如圖4-15模式切換界面。切換完模式,按照之前的編譯操作,將該模塊進(jìn)行編譯,會得編譯后生成的tgz文件如圖所示。上圖中看到的.tgz文件就是用來上傳到私倉的文件,這個文件可以在應(yīng)用中被共享使用。4.1.5模塊化單位Module——Ability類型的Module在鴻蒙系統(tǒng)中,Module(模塊)是應(yīng)用程序的基本組成部分,它們負(fù)責(zé)實(shí)現(xiàn)應(yīng)用程序的功能。鴻蒙系統(tǒng)中的Module主要分為兩種類型:(1)Ability類型的Module:entry類型的Module和feature類型的Module。它的作用定位是應(yīng)用程序的功能和特性,每一個Ability類型的Module編譯后,會生成一個.hap文件,通常稱之為HAP包(HarmonyAbilityPackage)。HAP包可以獨(dú)立的安裝和運(yùn)行,它是應(yīng)用安裝的基本單位,一個應(yīng)用中可以包含一個或多個HAP包。而在Ability類型的Module中又包含如下兩種類型:entry類型的Module:它是應(yīng)用的主模塊部分,包含應(yīng)用的入口界面、入口圖標(biāo)和主功能特性,編譯后生成entry類型的HAP。需要特別強(qiáng)調(diào)的是,每一個應(yīng)用分發(fā)到同一類型的設(shè)備上的應(yīng)用程序包,只能包含唯一一個entry類型的HAP。feature類型的Module:應(yīng)用的動態(tài)特性模塊,編譯后生成feature類型的HAP。一個應(yīng)用中可以包含一個或多個feature類型的HAP,也可以不包含。由此可知一個程序中由多個AbilityModule組成,而每一個AbilityModule在通過編譯后要么是一個entry類型的HAP,要么是一個feature類型的HAP,程序編譯后HAP文件類型的組成,如圖所示。(2)Library類型的Module:StaticLibrary和SharedLibrary。(見下頁)4.1.5模塊化單位Module——Library類型的ModuleLibrary類型的Module:它的作用定位是模塊之間的資源共享。同一個Library類型的Module可以被其他的Module多次引用,Library類型的Module充分體現(xiàn)了軟件的模塊復(fù)用設(shè)計思想,這種開發(fā)模式能夠降低開發(fā)和維護(hù)成本。同時Library類型的Module分為Static和Shared兩種類型,他們編譯后都會生成共享包。針對Static和Shared兩種類型的LibraryModule解釋如下:l

StaticLibrary:靜態(tài)共享庫。編譯后會生成一個以.har為后綴的文件,即靜態(tài)共享包HAR。l

SharedLibrary:動態(tài)共享庫。編譯后會生成一個以.hsp為后綴的文件,即動態(tài)共享包HSP,值得注意的是,SharedLibrary在編譯后也會生成一個.har文件,該文件用于記錄HSP對外部的導(dǎo)出接口,應(yīng)用中的其他模塊需要通過.har文件來引用HSP的功能。下圖展示的是Module編譯過程。4.1.5模塊化單位Module——HAR與HSP兩種共享包的主要區(qū)別共享包類型編譯和運(yùn)行方式發(fā)布和引用方式HARHAR中的代碼和資源會跟隨著HAP包一起編譯,如果有多個HAP包同時使用HAR,則這個HAR會有多個相同的拷貝。也因?yàn)檫@樣,在遇到這種情況的時候,建議把代碼加入混淆,保護(hù)代碼資產(chǎn)。HAR文件除了可以被引用,還可以獨(dú)立打包發(fā)布,供給其他應(yīng)用來使用。HSPHSP中的代碼和資源可以獨(dú)立編譯,在一個進(jìn)程中運(yùn)行時只會存在一份。HSP通常會和應(yīng)用一起打包,用于在不同的應(yīng)用之間共享,當(dāng)前支持應(yīng)用內(nèi)和集成態(tài)HSP:l應(yīng)用態(tài)HSP:這種HSP只能在當(dāng)前應(yīng)用內(nèi)使用,不能被其他應(yīng)用引用。l集成態(tài)HSP:這種HSP可以被發(fā)布到ohpm私倉(ohpm是鴻蒙系統(tǒng)的包管理器),并且可以被其他應(yīng)用引用。4.1.5模塊化單位Module——HAR與HSP被模塊引用的情況上圖可以看出Ability類型的Module是鴻蒙系統(tǒng)中的核心組件,負(fù)責(zé)定義應(yīng)用的各項(xiàng)能力,包括用戶界面、數(shù)據(jù)管理、通信功能等。這些Module可以獨(dú)立運(yùn)行,也可以與其他Module協(xié)同工作,以提供豐富的應(yīng)用功能。Library類型的Module則是鴻蒙系統(tǒng)中的庫文件,包含可重用的代碼和資源,可以被多個Ability類型的Module共享,以提高開發(fā)效率和代碼復(fù)用性。通過詳細(xì)學(xué)習(xí)Ability和Library的概念、類型、生命周期、通信機(jī)制、依賴管理以及開發(fā)實(shí)踐,可以系統(tǒng)地了解這兩種Module類型,掌握它們在鴻蒙系統(tǒng)中的應(yīng)用和開發(fā)方法。這將有助于鴻蒙開發(fā)人員更好地理解和運(yùn)用鴻蒙系統(tǒng)的開發(fā)框架,提高開發(fā)技能和項(xiàng)目實(shí)踐能力。4.1.6基礎(chǔ)能力單元Ability“Ability”一次譯為“能力”,正如它的含義,在鴻蒙中其表示程序所具備的能力。它其實(shí)是鴻蒙中的一個基礎(chǔ)組件(名為Ability的Java類),是應(yīng)用程序的基本功能單位,主要是用于實(shí)現(xiàn)特定的業(yè)務(wù)功能,而實(shí)現(xiàn)的方式就是通過對Ability類進(jìn)行繼承和擴(kuò)展??傮w來說(在FA模型下),Ability分為兩種類型,一個是FeatureAbility(簡稱為FA),另一個是ParticleAbility(將成為PA)。FeatureAbility是面向用戶的界面功能,它更偏向于前端,用于與用戶進(jìn)行交互??梢园阉惐葹锳ndroid中的Activity,是應(yīng)用程序與用戶交互的主要入口點(diǎn)。FeatureAbility可以提供以下特性:lFeatureAbility通常以頁面的形式展現(xiàn),用于展示信息和響應(yīng)用戶操作。一個應(yīng)用程序可以有多個頁面,每個頁面都是FeatureAbility的一個實(shí)例。lFeatureAbility擁有完整的生命周期管理,包括創(chuàng)建、顯示、隱藏、銷毀等狀態(tài)。l用戶可以在FeatureAbility中使用多種交互方式,如觸摸、語音、手勢等。ParticleAbility是面向其他Ability的服務(wù)功能,用于提供后臺運(yùn)行任務(wù)和數(shù)據(jù)處理能力。它類似于Android中的Service。ParticleAbility可以提供以下特性:lParticleAbility通常以服務(wù)的形式運(yùn)行,可以在后臺執(zhí)行任務(wù),如數(shù)據(jù)處理、文件下載等,而不需要與用戶交互。lParticleAbility還可以作為數(shù)據(jù)提供者,允許其他Ability訪問其提供的數(shù)據(jù)。4.1.6基礎(chǔ)能力單元Ability無論是FeatureAbility還是ParticleAbility,它們都有以下共同點(diǎn):l分布式能力:HarmonyOS的一個核心特性是其分布式能力,Ability可以在不同的設(shè)備上無縫遷移和協(xié)同,為用戶提供連貫的體驗(yàn)。lFA模型:FeatureAbility使用FA(FeatureAbility)模型,它定義了Ability的界面和用戶交互邏輯,它也被成為元程序。lPA模型:ParticleAbility使用PA(ParticleAbility)模型,它定義了Ability的服務(wù)和數(shù)據(jù)提供邏輯,它也被成為元服務(wù)。l生命周期管理:HarmonyOS為Ability提供了詳細(xì)的生命周期管理,確保Ability能夠正確地響應(yīng)系統(tǒng)事件和用戶操作。4.1.6基礎(chǔ)能力單元Ability(注意這里是FA模型下的ability分類)在開發(fā)HarmonyOS應(yīng)用程序時,開發(fā)者需要根據(jù)應(yīng)用的具體需求來設(shè)計FeatureAbility和ParticleAbility,以提供豐富和流暢的用戶體驗(yàn)。HarmonyOS提供的開發(fā)框架和工具可以幫助開發(fā)者更容易地創(chuàng)建和管理這些Ability。綜合來看,鴻蒙系統(tǒng)主要有三種Ability:lPageAbility:PageAbility是應(yīng)用中表示單個頁面的組件,用于提供與用戶交互的界面。它是HarmonyOS應(yīng)用中用戶可見的界面元素,類似于Android中的Activity。lServiceAbility:ServiceAbility是用于后臺運(yùn)行任務(wù)的組件,通常用于執(zhí)行不需要用戶交互的長時間運(yùn)行操作。ServiceAbility類似于Android中的Service。lDataAbility:主要用于管理數(shù)據(jù),提供數(shù)據(jù)的增、刪、改、查等操作。它類似于其他操作系統(tǒng)中的內(nèi)容提供者(ContentProvider)或數(shù)據(jù)服務(wù)。FA模型下的ability分類stage模型下的ability分類由以上可以看出,鴻蒙操作系統(tǒng)通過其核心組件Ability,為開發(fā)者提供了一套靈活的應(yīng)用開發(fā)框架。其中,PageAbility模板負(fù)責(zé)用戶界面的展示與交互,ServiceAbility模板處理后臺運(yùn)行的任務(wù),而DataAbility模板則統(tǒng)一管理數(shù)據(jù)訪問,確保了應(yīng)用功能的豐富性和高效性。這三種Ability類型的協(xié)同工作,不僅滿足了多樣化的應(yīng)用場景需求,還助力鴻蒙系統(tǒng)實(shí)現(xiàn)了全場景、多設(shè)備的應(yīng)用生態(tài)。延遲符4.2DevEcoStudio及工程文件PART延遲符02

本章將介紹DevEcoStudio的各個界面,以及使用DevEcoStudio創(chuàng)建的各種工程的文件結(jié)構(gòu)介紹。在DevEcoStudio中,可以創(chuàng)建三種不同的工程目錄結(jié)構(gòu),它們分別是:l

ArkTS工程目錄結(jié)構(gòu)(Stage模型)l

C++工程目錄結(jié)構(gòu)(Stage模型)l

JS工程目錄結(jié)構(gòu)(FA模型)可以看出不同的目錄結(jié)構(gòu)取決于使用的是什么開發(fā)模型,那么這兩個開發(fā)模型的區(qū)別是什么呢?FA是一個具有用戶界面的功能單元,它代表了一個獨(dú)立的功能模塊,可以在分布式系統(tǒng)中被其他設(shè)備上的應(yīng)用調(diào)用。FA強(qiáng)調(diào)的是功能的獨(dú)立性和可分布式能力,它可以是整個應(yīng)用的一部分,也可以是獨(dú)立的功能模塊;Stage是鴻蒙操作系統(tǒng)中的一種新的應(yīng)用開發(fā)模型,它基于ArkUI框架,提供了聲明式UI和狀態(tài)管理的能力。Stage模型更注重于組件化和聲明式編程,旨在提高開發(fā)效率和應(yīng)用的性能??偨Y(jié)來說,Stage和FA在鴻蒙操作系統(tǒng)中是并行存在的兩種開發(fā)模型,它們各自有不同的應(yīng)用場景和優(yōu)勢。同時從鴻蒙的發(fā)展趨勢來說,從HarmonyOS3.0以后,官方已經(jīng)不建議使用Java語言了,更加推薦使用ArkTS來進(jìn)行應(yīng)用開發(fā),因此后續(xù)的學(xué)習(xí)重點(diǎn)放到ArkTS會有更好的效果。4.2.1DevEcoStudio的界面介紹在DevEcoStudio中,右側(cè)為代碼編輯區(qū),如圖所示。下方為IDE的控制臺,項(xiàng)目在編譯、運(yùn)行、日志打印、終端信息展示、服務(wù)信息展示等都可以在此控制臺進(jìn)行查看,如圖4-22所展示的控制臺區(qū)域。4.2.1DevEcoStudio的界面介紹在IDE的上方是菜單欄區(qū)域,在這里可以對IDE進(jìn)行一些基礎(chǔ)的配置和對項(xiàng)目開發(fā)的一些選項(xiàng)操作,如圖所示菜單欄。在IDE的右側(cè)邊欄中還有Notifications和預(yù)覽器的標(biāo)簽,其中Notifications會展示各種IDE中的動作提示,比如工程同步動作、運(yùn)行端口信息等等。而預(yù)覽器標(biāo)簽的作用是對某些視圖文件進(jìn)行預(yù)覽,包括.ets文件、js文件、css文件、html文件、servicewidgets的json文件、AbilitySlice.java和Ability.java等。在使用DevEcoStudio時,剛開始不需要記住所有的菜單功能,很多菜單項(xiàng)都是隨著開發(fā)工具的使用而慢慢熟知的,因此只要掌握關(guān)鍵的幾個常用菜單項(xiàng)來進(jìn)行基礎(chǔ)配置和項(xiàng)目的開發(fā)就已經(jīng)可以滿足日常的開發(fā)需求了,當(dāng)然如果讀者有相關(guān)的IDE使用經(jīng)驗(yàn)也是非常好上手的,因?yàn)镮DE之間具有相通性,因此如果讀者之前使用過類似于Vscode、IDEA的開發(fā)工具,那么使用DevEcoStudio的上手速速將會非???。4.2.2ArkTS工程目錄結(jié)構(gòu)(Stage模型)——開發(fā)態(tài)包結(jié)構(gòu)在DevEcoStudio中可以創(chuàng)建基于ArkTS的工程目錄結(jié)構(gòu),它支持APIVersion10以上版本。只需在創(chuàng)建時選擇Stage模型,并且選擇ArkTS語言即可創(chuàng)建該工程目錄結(jié)構(gòu)?!?/p>

.hvigor:存儲構(gòu)建配置文件信息?!?/p>

.idea:存儲項(xiàng)目的配置信息?!?/p>

AppScope>app.json5:應(yīng)用的全局配置信息。(由DevEcoStudio自動生成,不可更改)·

entry:應(yīng)用/服務(wù)模塊,編譯構(gòu)建生成一個HAP。o

src>main>ets:用于存放ArkTS源碼。o

src>main>entryability:應(yīng)用/服務(wù)的入口。o

src>main>pages:應(yīng)用/服務(wù)包含的頁面。o

src>main>resources:用于存放應(yīng)用/服務(wù)模塊所用到的資源文件,如圖形、多媒體、字符串、布局文件等。o

src>main>resources>base>element:包括字符串、整型數(shù)、顏色、樣式等資源的json文件。o

src>main>resources>base>media:多媒體文件,如圖形、視頻、音頻等文件。o

src>main>resources>rawfile:用于存儲任意格式的原始資源文件。o

src>main>module.json5:Stage模型模塊配置文件,主要包含HAP的配置信息、應(yīng)用在具體設(shè)備上的配置信息以及應(yīng)用的全局配置信息?!?/p>

hvigor:前端構(gòu)建配置文件信息,和基于Node.js的構(gòu)建系統(tǒng)相關(guān)的文件夾·

oh_modules:用于存放三方庫依賴信息,包含應(yīng)用/服務(wù)所依賴的第三方庫文件?!?/p>

.gitignore:Git版本控制中忽略的文件或目錄列表?!?/p>

build-profile.json5:當(dāng)前的模塊信息、編譯信息配置項(xiàng),包括buildOption、targets配置等?!?/p>

hvigorfile.ts:模塊級編譯構(gòu)建任務(wù)腳本?!?/p>

hvigorw和hvigorw.bat運(yùn)行在不同操作系統(tǒng)中的(針對ohpm的)編譯構(gòu)建工具?!?/p>

perties:存儲本地屬性的文件。·

oh-package.json5:描述三方包的包名、版本、入口文件(類型聲明文件)和依賴項(xiàng)等信息。4.2.2ArkTS工程目錄結(jié)構(gòu)(Stage模型)當(dāng)開發(fā)人員需要聲明式UI和狀態(tài)管理時,則使用基于ArkUI框架的TypeScript開發(fā)模式,它適用于構(gòu)建具有現(xiàn)代化前端體驗(yàn)的應(yīng)用。TypeScript提供了強(qiáng)類型檢查,可以幫助開發(fā)者在開發(fā)過程中捕捉到更多錯誤。同時,ArkTS支持聲明式UI,可以簡化UI代碼的編寫和維護(hù)。更為重要的是,華為官方推薦使用ArkTS語言作為后續(xù)的開發(fā)語言,所以ArkTS結(jié)構(gòu)的項(xiàng)目應(yīng)該更值得讀者去學(xué)習(xí)和探究。雖然ArkTS工程項(xiàng)目比較復(fù)雜,但是可以大致分類為以下幾種文件類型及用途,方便初學(xué)者記憶:1.

配置文件:AppScore下的app.json5是用于聲明應(yīng)用的全局配置信息,比如應(yīng)用Bundle名稱、應(yīng)用名稱、應(yīng)用圖標(biāo)、應(yīng)用版本號等;模塊包名下的src/main/module.json5,用于聲明Module基本信息、支持的設(shè)備類型、所含的組件信息、運(yùn)行所需申請的權(quán)限等。2.

ArkTS源碼文件:位置在模塊明下的/src/main/ets,用于存放Module的ArkTS源碼文件(.ets文件)。3.

資源文件:包括應(yīng)用級資源文件(AppScopre/resources)、以及Module級資源文件(模塊包/src/main/resources)。4.

其他配置文件:用于編譯構(gòu)建,包括構(gòu)建配置文件、編譯構(gòu)建任務(wù)腳本、混淆規(guī)則文件、依賴的共享包信息等。例如:a)

build-profile.json5:

工程級或Module級的構(gòu)建配置文件,包括應(yīng)用簽名、產(chǎn)品配置等相關(guān)信息。b)

hvigorfile.ts:應(yīng)用級或Module級的編譯構(gòu)建任務(wù)腳本,開發(fā)者可以自定義編譯構(gòu)建工具版本、控制構(gòu)建行為的配置參數(shù)。c)

obfuscation-rules.txt:混淆規(guī)則文件?;煜_啟后,在使用Release模式進(jìn)行編譯時,會對代碼進(jìn)行編譯、混淆及壓縮處理,保護(hù)代碼資產(chǎn)。d)

oh-package.json5:用于存放依賴庫的信息,包括所依賴的三方庫和共享包。4.2.2ArkTS工程目錄結(jié)構(gòu)(Stage模型)另外更重要的是,不同類型的Module編譯后會生成對應(yīng)的HAP、HAR、HSP等文件,開發(fā)態(tài)視圖與編譯態(tài)視圖的對照關(guān)系,如圖。編譯打包后每個模塊下的est目錄下的代碼都會轉(zhuǎn)化成abc文件,并且全局配置文件app.json5中的字段會與每個module.json5中的字段合并后放入編譯后的module.json中。上圖只標(biāo)注了其中一個模塊的合并情況,其他模塊合并情況類似。4.2.2ArkTS工程目錄結(jié)構(gòu)(Stage模型)在鴻蒙操作系統(tǒng)的開發(fā)環(huán)境中,應(yīng)用工程結(jié)構(gòu)分為開發(fā)態(tài)和編譯態(tài)兩種視圖。開發(fā)態(tài)展示了應(yīng)用在開發(fā)過程中的組織結(jié)構(gòu),而編譯態(tài)則展示了應(yīng)用在編譯后的結(jié)構(gòu)。這種結(jié)構(gòu)設(shè)計有助于開發(fā)者理解和管理應(yīng)用的各個組成部分。從上圖可以看出,在開發(fā)態(tài)下,應(yīng)用工程由多個模塊組成,包括AppScope、EntryModule、FeatureModule、SharedLibrary和StaticLibrary。每個模塊都有資源目錄和配置文件。例如,AppScope包含資源和app.json5配置文件,而各個模塊則包含src/main目錄、資源目錄、ets目錄和module.json5配置文件。這樣的結(jié)構(gòu)使得開發(fā)者可以清晰地組織代碼和資源,便于開發(fā)和維護(hù)。編譯態(tài)下,應(yīng)用被編譯成多個HAP(HarmonyOSAbilityPackage)包,每個包對應(yīng)一個模塊。例如,entry模塊被編譯成entry.hap,feature模塊被編譯成feature.hap,而libraryA和libraryB則分別被編譯成libraryA.hap和libraryB.hap。每個HAP包中包含了ets、資源、配置文件(module.json)以及編譯后的代碼(xxx.abc)。此外,AppScope中的資源和配置文件也會被合并到相應(yīng)的HAP包中。這種從開發(fā)態(tài)到編譯態(tài)的轉(zhuǎn)變,確保了應(yīng)用的各個模塊在編譯后能夠獨(dú)立運(yùn)行,同時保持了資源和配置的一致性。通過這種方式,鴻蒙操作系統(tǒng)支持了模塊化開發(fā),使得應(yīng)用的各個部分可以獨(dú)立開發(fā)、測試和部署,提高了開發(fā)效率和應(yīng)用的可維護(hù)性。在實(shí)際開發(fā)過程中,開發(fā)者需要熟悉這種工程結(jié)構(gòu),以便正確地組織代碼和資源,確保應(yīng)用能夠順利編譯和運(yùn)行。同時,理解開發(fā)態(tài)與編譯態(tài)之間的差異,也有助于開發(fā)者在遇到問題時快速定位和解決問題。這種結(jié)構(gòu)的設(shè)計,是鴻蒙操作系統(tǒng)支持高效開發(fā)和靈活部署的重要基礎(chǔ)。以上是Stage模型應(yīng)用程序的開發(fā)態(tài)包結(jié)構(gòu),接下來看下發(fā)布態(tài)包結(jié)構(gòu)4.2.2ArkTS工程目錄結(jié)構(gòu)(Stage模型)——發(fā)布態(tài)包結(jié)構(gòu)當(dāng)開發(fā)完一個應(yīng)用程序之后,需要進(jìn)行應(yīng)用的打包和發(fā)布,每個應(yīng)用中至少包含一個hap文件,也可能包含一些HSP文件,所有的hap和hap文件結(jié)合在一起稱為Bundle,它對應(yīng)的bundleName是應(yīng)用的唯一標(biāo)識,這個標(biāo)識是在app.json5配置文件中聲明的bundleName標(biāo)簽。當(dāng)應(yīng)用發(fā)布上架到應(yīng)用市場時,需要將Bundle打包為一個.app后綴的文件,這個文件稱為AppPack。通過DevEcoStudio工具自動生成一個文件,這個文件描述了app文件包中的每一個hap和hsp的屬性,同時也包含bundleName、versionCode以及module中的name、type、abilitites等信息。這里要說明的是,AppPack雖然是發(fā)布到應(yīng)用市場的基本單元,但是不能在設(shè)備上直接安裝和運(yùn)行,在應(yīng)用簽名、分發(fā)、安裝時,都是以hap/hsp為單位進(jìn)行簽名、分發(fā)和安裝。4.2.2ArkTS工程目錄結(jié)構(gòu)(Stage模型)——發(fā)布態(tài)包結(jié)構(gòu)在鴻蒙操作系統(tǒng)中,應(yīng)用的開發(fā)、編譯、發(fā)布和上架部署遵循一個嚴(yán)格的流程:1.首先,開發(fā)者利用鴻蒙OSSDK在集成開發(fā)環(huán)境(IDE)中編寫代碼。完成開發(fā)后,通過IDE進(jìn)行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論