一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙OS開發(fā)實例:【組件化模式】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-07 17:44 ? 次閱讀

組件化一直是移動端比較流行的開發(fā)方式,有著編譯運行快,業(yè)務(wù)邏輯分明,任務(wù)劃分清晰等優(yōu)點,針對Android端的組件化;與Android端的組件化相比,HarmonyOS的組件化可以說實現(xiàn)起來就頗費一番周折,因為HarmonyOS經(jīng)過更新迭代之后,最新的開發(fā)方式已經(jīng)和之前兼容AOSP階段有著很大的區(qū)別,基于最新的Api9,以及采用全新的ArkTs語言的開發(fā)方式,想實現(xiàn)組件化,就需要另謀途徑。

在以往的Android組件化實現(xiàn)中,我們直接可以在gradle里進行自定義配置相關(guān)參數(shù),執(zhí)行application和library,以及其他的參數(shù)信息,來實現(xiàn)一個可運行模塊和依賴模塊的動態(tài)轉(zhuǎn)換,這是非常方便的,但是,在HarmonyOS中,構(gòu)建文件中,除了使用系統(tǒng)配置的之外,是不支持自定義的,起碼當(dāng)前是不支持的,也就是說,我們無法通過在構(gòu)建里來實現(xiàn)組件化運行的切換。

image.png

這就在一定程度上阻礙了組件化的配置,雖然我們可以按照動態(tài)包的模式,拆分出獨立的業(yè)務(wù)模塊,形成模塊化開發(fā),但是在業(yè)務(wù)邏輯復(fù)雜的項目,很多的模塊,同時編譯運行,無疑來說是耗時的,遠(yuǎn)遠(yuǎn)比不上組件化方式的開發(fā)效率,基于此,能夠探索出組件化的可行性,確實是很有必要的。

本文的大致如下:

1、模塊化的拆分與設(shè)計

2、模塊化向組件化切換

3、鴻蒙項目如何實現(xiàn)組件化

4、使用腳本快速實現(xiàn)組件化運行

5、腳本地址和相關(guān)總結(jié)

一、模塊化的拆分與設(shè)計

模塊化,簡而言之,就是把項目中獨立的業(yè)務(wù)模塊抽取出來,單獨創(chuàng)建一個模塊。

原始的開發(fā)方式,我們都會把所有的代碼,所有的業(yè)務(wù),放在一個模塊下,以至于導(dǎo)致,此模塊,代碼越來越多,業(yè)務(wù)越來越繁雜,不利于人員的維護,也不利于項目的可移植和健壯,最大的不便在于,后續(xù)一旦有同樣功能的項目,不能第一時間拿來復(fù)用,為解決以上的問題,便有了模塊化。

具體在項目中,需要把哪些功能抽取成一個單獨的模塊,需要具體問題具體分析,但有一個潛在的宗旨,那就是,必須業(yè)務(wù)獨立,比如項目中的用戶信息模塊,商城模塊,再比如底層的網(wǎng)絡(luò)請求模塊,數(shù)據(jù)庫操作模塊等等,只有業(yè)務(wù)獨立,才能方便后續(xù)的復(fù)用。

當(dāng)然了,有一個前提,大家必須明確,那就是后續(xù)的組件化是在模塊化的基礎(chǔ)上,只是增加了單模塊可以運行的能力。

如下圖所示,是基于API9和ArkTs語言,設(shè)計的模塊化。

image.png

以上只是一個通用的場景,在實際的開發(fā)中,大家可以按照實際的業(yè)務(wù)進行修改,比如省略聚合層,直接讓中間層依賴基礎(chǔ)庫層,又或者,中間層直接依賴底層的sdk等等,靈活多變即可。

entry,作為我們的主模塊,是單獨可以運行的,除了這個模塊之外,其他的所有模塊均不可運行,只能被作為依賴項使用。

從上圖中,大家可以發(fā)現(xiàn),存在基礎(chǔ)庫一層,此層的作用,主要封裝了基礎(chǔ)能力,比如網(wǎng)絡(luò),數(shù)據(jù)操作,日志工具類,列表加載等等,目的是顯而易見的,就是為了便于拓展和后續(xù)的復(fù)用,因為這些能力是統(tǒng)一的,是每個項目都或多或少都是需要的,前期封裝好之后,無論后續(xù)多少個項目,我們都可以直接拿來用。

聚合層,它的作用,是把多個基礎(chǔ)庫,包裝成一個整體的庫,更方便上層的調(diào)用,但缺點也是很明顯的,有些可能上層用不到的基礎(chǔ)庫也被添加進來了,造成包體積的增大,還有就是,基礎(chǔ)庫某個更新之后,聚合層也需要更新;所以基于此,在實際的開發(fā)中,大家也可以省略這一層,直接讓中間層和基礎(chǔ)庫層進行對接。

中間層(common),一些公用的資源或者類的存放地,也作為各模塊數(shù)據(jù)傳遞的一個紐帶,它做為一個樞紐,是業(yè)務(wù)各模塊的必依賴項。

業(yè)務(wù)模塊,沒什么好說的,是業(yè)務(wù)層各個單獨的業(yè)務(wù)組件。

相關(guān)的模塊化拆分如下的項目所示:

image.png

二、模塊化向組件化切換

在上述的模塊化中,我們知道組件化和模塊化是類似的,只不過多了一個獨立運行的功能,別小看這個獨立運行的能力,在實際的開發(fā)中,能大大減少我們的編譯時間,提高我們的開發(fā)效率,畢竟全部編譯和局部編譯,還是有著很大的差距。

在模塊化中,只有entry主模塊是能夠獨立運行的,如果向組件化進行切換,意味著業(yè)務(wù)中每個獨立的模塊都可以運行,如下結(jié)構(gòu)圖:

image.png

也就是把業(yè)務(wù)模塊,需要做成動態(tài)設(shè)置,組件化時,類型是entry可運行狀態(tài),非組件化時,類型是shared,也就是動態(tài)包方式,不可運行。

三、鴻蒙項目如何實現(xiàn)組件化

經(jīng)過上一節(jié)的概述,實現(xiàn)組件化就非常的簡單了,無非就是業(yè)務(wù)模塊的類型entry和shared切換即可,可是實際操作之后,缺發(fā)現(xiàn),不是僅僅修改一個類型便可以搞定的。

由于可運行組件和動態(tài)包有著很大的區(qū)別,如果想要把動態(tài)包改為可運行,那么所有的配置信息都要和運行組件保持一致,經(jīng)過仔細(xì)地比對之后,發(fā)現(xiàn)有三處不同,分別如下:

開發(fā)環(huán)境

鴻蒙開發(fā)指南[docs.qq.com/doc/DUmN4VVhBd3NxdExK]

搜狗高速瀏覽器截圖20240326151547.png

或者+mau123789是v可直接添加拿
DevEco Studio 4.0 Beta2,Build Version: 4.0.0.400
Api版本:9
hvigorVersion:3.0.2

如果你的開發(fā)環(huán)境和以上不一致,那么幾處文件的不同之處也會不一樣,只需要改為你環(huán)境下的可運行模塊也就是entry下的即可。

1、hvigorfile.ts不同

主模塊(entry,可運行)

import { hapTasks } from '@ohos/hvigor-ohos-plugin';

export default {
system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
}

普通模塊(動態(tài)包,不可運行)

import { hspTasks } from@ohos/hvigor-ohos-plugin’;

export default {  
system: hspTasks, /* Built-in plugin of Hvigor. It cannot be modified.  */  
plugins:[] /*  Custom plugin to extend the functionality of Hvigor. */  
}

2、module.json5不同

主模塊(entry,可運行)

{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone",
      "tablet"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ts",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:icon",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:icon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ]
      }
    ]
  }
}

普通模塊(動態(tài)包,不可運行)

{
  "module": {
    "name": "mine",
    "type": "shared",
    "description": "$string:shared_desc",
    "deviceTypes": [
      "phone",
      "tablet"
    ],
    "deliveryWithInstall": true,
    "pages": "$profile:main_pages"
  }
}

3、缺少入口ability

普通的動態(tài)包是沒有Ability,這就導(dǎo)致的,無入口配置。

主模塊(entry,可運行)

image.png

普通模塊(動態(tài)包,不可運行)

image.png

只需要把以上的三處不同更改之后,便可以達(dá)到組件的單獨運行,需要注意的是,更改完之后,一定記得清除緩存,清除之前的配置信息,方可運行成功。

雖然手動更改能達(dá)到組件的運行目標(biāo),但會有一個潛在的問題,那就很影響開發(fā)效率,你需要在可運行和不可運行兩種狀態(tài)下不停的進行切換,那么就需要不斷地進行更改這三處文件,是非常繁瑣的,不過,后續(xù)經(jīng)過自己的摸索,開發(fā)了一個動態(tài)修改配置信息的腳本,使用腳本,便可很簡單的進行切換。

四、使用腳本快速實現(xiàn)組件化運行

鴻蒙的項目不像Android端,可以在gradle進行腳本的編寫,所以無法很方便的進行組件化的實現(xiàn),雖然不能配置腳本文件,但是能否借助外部的腳本來動態(tài)的進行組件化的切換呢?顯然是可以的,在HarmonyOS開始階段,環(huán)境配置我們使用到了NodeJs,那么我們就可以通過NodeJs來開發(fā)相關(guān)腳本。

腳本沒什么難的,只解決一個問題,那就是把手動需要改的文件,改為程序去改,減少錯誤率和提高開發(fā)效率。

下載腳本之后,有三個文件,如下圖所示,把文件復(fù)制到根項目下即可。
image.png

module.harmony:主要配置文件,所有的配置都在這里,以后的使用,也只要更改這一個文件即可。

#組件化配置文件
#是否開啟組件化
startModule=true
#開啟的組件名字,開啟后,當(dāng)前的組件可以獨立運行
startModuleName=
#上述組件開啟后,其他非必要組件是否改為動態(tài)包模式,默認(rèn)不改變
startOtherShared=false
#過濾組件名字,永遠(yuǎn)不會獨立運行,以應(yīng)為逗號作為分割
filterModuleName=
#當(dāng)前腳本默認(rèn)加載的頁面,默認(rèn)不填是Index.ets
loadPage=

module.js:腳本邏輯文件,主要進行組件化的內(nèi)容之間的切換。

package.json:一些配置信息,用于執(zhí)行。

module.harmony文件介紹

三個文件復(fù)制到根項目下之后,當(dāng)然了你也可以復(fù)制到其他地方,只關(guān)注module.harmony這一個文件即可,以后所有的操作都在這里進行配置。

module.harmony文件里最重要的就兩個參數(shù),一個是startModule,一個是startModuleName;startModule用于是否開啟組件化,startModuleName是負(fù)責(zé)開啟哪個組件,兩個是結(jié)合使用的。當(dāng)startModule為true,自動就會把startModuleName的值對應(yīng)的組件,改為可運行狀態(tài),當(dāng)startModule為false,就只保留entry模塊為可運行狀態(tài),其他均為不可運行。

startOtherShared這個參數(shù),主要用于是否要把startModuleName對應(yīng)的組件之外的所有組件(不包含entry和過濾組件),改為動態(tài)包模式,比如A模塊改為可運行組件之后,又想把B模塊改為可運行組件,這時,是否要把A改回去,也就是動態(tài)包不可運行狀態(tài)。

filterModuleName參數(shù)沒啥好說的,如果項目中有固定狀態(tài)的模塊,就可以配置其中。

loadPage參數(shù),默認(rèn)配置的是Index.ets,沒有會自動創(chuàng)建,如果你有默認(rèn)的頁面,可以配置這里,運行組件后,會展示你配置的頁面。

腳本運行

每次更改完配置文件module.harmony后,在當(dāng)前項目的根目錄下執(zhí)行如下的命令即可。

npm run module

五、腳本地址和相關(guān)總結(jié)

腳本開發(fā)環(huán)境:

DevEco Studio 4.0 Beta2,Build Version: 4.0.0.400
Api版本:9
hvigorVersion3.0.2

目前的組件化方式,和Android端的組件化有些類似,如果你的項目很龐大,比如,項目里也有很多獨立的小功能,類似美團App中的,外賣,騎車等,那么我們就可以采取多hap的結(jié)構(gòu)開發(fā),目前鴻蒙是支持的,這種應(yīng)用是獨立的,隔離的;如果所有的模塊都有著一定的耦合,關(guān)聯(lián),一個主模塊和多個動態(tài)模塊的形式,建議還是以文中組件化的方式開發(fā),可以大大提高你的編譯速度。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3959

    瀏覽量

    129224
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    2005

    瀏覽量

    31802
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    190

    瀏覽量

    4837
收藏 人收藏

    評論

    相關(guān)推薦

    【McCharts】基于鴻蒙ArkTS語法開發(fā)的圖表組件--折線圖

    : 項目功能結(jié)構(gòu) 整體開發(fā)流程 這次開發(fā)我使用了鴻蒙的端云一體開發(fā)模式進行整個項目的構(gòu)建
    發(fā)表于 03-15 15:27

    開源啦?。?!基于鴻蒙ArkTS封裝的圖表組件《McCharts》,大家快來一起共創(chuàng)

    的地方請大家高抬貴手,寬容一下,謝謝。 這次主要是給大家?guī)硪粋€重磅消息,就是我自己使用鴻蒙ArkTS語法開發(fā)的圖表組件今日正式開源了。為什么?原因有兩點吧! 鴻蒙是國產(chǎn)的操作系統(tǒng),
    發(fā)表于 03-15 15:21

    HarmonyOS 應(yīng)用開發(fā)賦能套件:鴻蒙原生應(yīng)用開發(fā)的 “神助攻”

    熟悉鴻蒙開發(fā)過程,了解功能開發(fā)過程中使用的基礎(chǔ)組件,掌握應(yīng)用開發(fā)的必備技能。 開發(fā)上架階段:從設(shè)
    發(fā)表于 02-17 16:37

    鴻蒙原生開發(fā)手記:03-元服務(wù)開發(fā)全流程(開發(fā)元服務(wù),只需要看這一篇文章)

    @State表示組件中的狀態(tài)變量狀態(tài)變量變化會觸發(fā)UI刷新 aboutToAppear 為生命周期組件實例以后build() 之前 build() 為UI 描述方法 注意元服務(wù)與
    發(fā)表于 11-23 21:52

    如何在開源鴻蒙OpenHarmony開啟SELinux模式?RK3566鴻蒙開發(fā)板演示

    本文介紹開源鴻蒙OpenHarmony系統(tǒng)下,開啟/關(guān)閉SELinux權(quán)限的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,已適配全新OpenHarmony5.0 Release系統(tǒng)!
    的頭像 發(fā)表于 11-18 19:03 ?632次閱讀
    如何在開源<b class='flag-5'>鴻蒙</b>OpenHarmony開啟SELinux<b class='flag-5'>模式</b>?RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>板演示

    鴻蒙原生開發(fā)手記:01-元服務(wù)開發(fā)

    簡介 元服務(wù)是鴻蒙中的一種輕量應(yīng)用形態(tài),無需下載,直接運行。類似于微信小程序,但與小程序不同的是,元服務(wù)更加輕量。 元服務(wù)使用原生開發(fā),是系統(tǒng)級提供的,無論從易用性、性能、體驗上,都要比小程序好
    發(fā)表于 11-14 17:28

    HDC2024華為發(fā)布鴻蒙原生智能:AI與OS深度融合,開啟全新的AI時代

    6月21日,華為開發(fā)者大會2024(HDC.2024)召開。 HarmonyOS NEXT將AI與OS深度融合,構(gòu)筑全新鴻蒙原生智能框架。大會現(xiàn)場,華為常務(wù)董事、終端BG董事長、智能汽車解決方案BU
    的頭像 發(fā)表于 06-24 09:28 ?969次閱讀
    HDC2024華為發(fā)布<b class='flag-5'>鴻蒙</b>原生智能:AI與<b class='flag-5'>OS</b>深度融合,開啟全新的AI時代

    鴻蒙開發(fā):PageAbility的啟動模式

    啟動模式對應(yīng)PageAbility被啟動時的行為,支持單實例模式、多實例模式兩種啟動模式。
    的頭像 發(fā)表于 06-17 14:35 ?567次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:PageAbility的啟動<b class='flag-5'>模式</b>

    鴻蒙開發(fā):任務(wù)(Mission)與啟動模式

    如前文所述,一個UIAbility實例對應(yīng)一個任務(wù)。UIAbility實例個數(shù)與UIAbility配置的啟動模式有關(guān)。在FA模型下,通過config.json配置文件中的“l(fā)aunchType”屬性
    的頭像 發(fā)表于 06-14 11:31 ?696次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:任務(wù)(Mission)與啟動<b class='flag-5'>模式</b>

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件啟動模式

    UIAbility的啟動模式是指UIAbility實例在啟動時的不同呈現(xiàn)狀態(tài)。針對不同的業(yè)務(wù)場景,系統(tǒng)提供了三種啟動模式
    的頭像 發(fā)表于 06-06 11:05 ?1140次閱讀
    <b class='flag-5'>鴻蒙</b>Ability Kit(程序框架服務(wù))【UIAbility<b class='flag-5'>組件</b>啟動<b class='flag-5'>模式</b>】

    鴻蒙Ability Kit(程序框架服務(wù))【AbilityStage組件容器】

    AbilityStage是一個[Module]級別的組件容器,應(yīng)用的HAP在首次加載時會創(chuàng)建一個AbilityStage實例,可以對該Module進行初始等操作。
    的頭像 發(fā)表于 06-05 14:15 ?629次閱讀
    <b class='flag-5'>鴻蒙</b>Ability Kit(程序框架服務(wù))【AbilityStage<b class='flag-5'>組件</b>容器】

    鴻蒙開發(fā)就業(yè)前景到底怎么樣?

    系統(tǒng)的不斷完善和發(fā)展,掌握這些技術(shù)將變得越來越有價值。 就業(yè)機會多樣: 除了華為自身需要大量的鴻蒙開發(fā)人才外, 許多其他企業(yè)也開始涉足鴻蒙系統(tǒng)
    發(fā)表于 05-09 17:37

    最新開源代碼證實!“鴻蒙原生版”微信正在積極開發(fā)

    立刻保存,不需要同步或刷新調(diào)用。共享內(nèi)存一般用于后臺開發(fā)。 HarmonyOS NEXT 也就是鴻蒙星河版——俗稱“純血鴻蒙”,其采用華為自研內(nèi)核,拋棄了傳統(tǒng)的 Linux 內(nèi)核以及 AOSP 安卓
    發(fā)表于 05-08 17:08

    HarmonyOS實戰(zhàn)開發(fā)-深度探索與打造個性自定義組件

    今天分享一下 什么是自定義組件?及其自定義組件的實戰(zhàn)。 做過前端或者android開發(fā)的都知道自定義組件鴻蒙中顯示在界面上的UI都稱為
    發(fā)表于 05-08 16:30

    HarmonyOS實戰(zhàn)開發(fā)-如何通過BlendMode屬性來實現(xiàn)掛件和圖片的混合

    ||---BlendModeView.ets // 視圖層-應(yīng)用主頁面 模塊依賴 本實例依賴common模塊來實現(xiàn)日志的打印、資源 的調(diào)用、依賴動態(tài)路由模塊來實現(xiàn)頁面的動態(tài)加載。 最后 如果大家覺得這篇內(nèi)容對學(xué)習(xí)鴻蒙開發(fā)有幫
    發(fā)表于 05-07 14:45