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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

//先執(zhí)行hdcshell才能使用bm工具h(yuǎn)dcshell//安裝、更新,多HAP可以指定多個(gè)文件路徑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)用包含一個(gè)entryHAP和兩個(gè)featureHAP,兩個(gè)featureHAP分別提供了音頻和視頻播放組件,entry中使用了音頻和視頻播放組件。三個(gè)模塊需要安裝三個(gè)hap包,最終會(huì)在設(shè)備上安裝一個(gè)主entry的hap包。本例子中使用到了兩個(gè)接口: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)建三個(gè)模塊的hap包。2.

使用IDE安裝多Hap包。(a)點(diǎn)擊entry->EditConfigurations,如圖編輯頁(yè)面所示。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播放頁(yè)面,可點(diǎn)擊PlayAudio按鈕,播放音頻。(d)點(diǎn)擊video,進(jìn)入video播放頁(yè)面,可點(diǎn)擊播放按鈕播放視頻。以下是工程目錄的說(shuō)明: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)頁(yè)面│└──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)頁(yè)面│└──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)含首頁(yè)組件以及發(fā)起hap跳轉(zhuǎn)邏輯│└──util│└──Logger.ts//日志工具├──entry/src/main/module.json5//entry模塊配置hap類型:"type":"entry"這個(gè)例子中的三個(gè)模塊分別是1個(gè)entry和兩個(gè)feature。其中entry是應(yīng)用程序的主模塊,也可以理解為入口模塊,也就是程序在運(yùn)行的初期需要加載的第一個(gè)模塊,此外這個(gè)模塊必須存在,有且只有一個(gè)。然后通過(guò)entry模塊進(jìn)入到其他兩個(gè)feature模塊,它們其中一個(gè)為名字為videoFeature,另一個(gè)名字為audioFeature,這就是在工程中的多HAP使用場(chǎng)景。4.1.2應(yīng)用包HAP的使用——多HAP開發(fā)示例之設(shè)計(jì)思路此示例的設(shè)計(jì)思路如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

src>main>pages:應(yīng)用/服務(wù)包含的頁(yè)面。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:用于存儲(chǔ)任意格式的原始資源文件。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:用于存放三方庫(kù)依賴信息,包含應(yīng)用/服務(wù)所依賴的第三方庫(kù)文件?!?/p>

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

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

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

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

perties:存儲(chǔ)本地屬性的文件。·

oh-package.json5:描述三方包的包名、版本、入口文件(類型聲明文件)和依賴項(xiàng)等信息。4.2.2ArkTS工程目錄結(jié)構(gòu)(Stage模型)當(dāng)開發(fā)人員需要聲明式UI和狀態(tài)管理時(shí),則使用基于ArkUI框架的TypeScript開發(fā)模式,它適用于構(gòu)建具有現(xiàn)代化前端體驗(yàn)的應(yīng)用。TypeScript提供了強(qiáng)類型檢查,可以幫助開發(fā)者在開發(fā)過(guò)程中捕捉到更多錯(cuò)誤。同時(shí),ArkTS支持聲明式UI,可以簡(jiǎn)化UI代碼的編寫和維護(hù)。更為重要的是,華為官方推薦使用ArkTS語(yǔ)言作為后續(xù)的開發(fā)語(yǔ)言,所以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)用版本號(hào)等;模塊包名下的src/main/module.json5,用于聲明Module基本信息、支持的設(shè)備類型、所含的組件信息、運(yùn)行所需申請(qǐng)的權(quán)限等。2.

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

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

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

build-profile.json5:

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論