色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙OS開發實例:【組件化模式】

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

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

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

image.png

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

本文的大致如下:

1、模塊化的拆分與設計

2、模塊化向組件化切換

3、鴻蒙項目如何實現組件化

4、使用腳本快速實現組件化運行

5、腳本地址和相關總結

一、模塊化的拆分與設計

模塊化,簡而言之,就是把項目中獨立的業務模塊抽取出來,單獨創建一個模塊。

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

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

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

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

image.png

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

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

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

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

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

業務模塊,沒什么好說的,是業務層各個單獨的業務組件。

相關的模塊化拆分如下的項目所示:

image.png

二、模塊化向組件化切換

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

在模塊化中,只有entry主模塊是能夠獨立運行的,如果向組件化進行切換,意味著業務中每個獨立的模塊都可以運行,如下結構圖:

image.png

也就是把業務模塊,需要做成動態設置,組件化時,類型是entry可運行狀態,非組件化時,類型是shared,也就是動態包方式,不可運行。

三、鴻蒙項目如何實現組件化

經過上一節的概述,實現組件化就非常的簡單了,無非就是業務模塊的類型entry和shared切換即可,可是實際操作之后,缺發現,不是僅僅修改一個類型便可以搞定的。

由于可運行組件和動態包有著很大的區別,如果想要把動態包改為可運行,那么所有的配置信息都要和運行組件保持一致,經過仔細地比對之后,發現有三處不同,分別如下:

開發環境

鴻蒙開發指南[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

如果你的開發環境和以上不一致,那么幾處文件的不同之處也會不一樣,只需要改為你環境下的可運行模塊也就是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. */
}

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

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"
            ]
          }
        ]
      }
    ]
  }
}

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

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

3、缺少入口ability

普通的動態包是沒有Ability,這就導致的,無入口配置。

主模塊(entry,可運行)

image.png

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

image.png

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

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

四、使用腳本快速實現組件化運行

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

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

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

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

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

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

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

module.harmony文件介紹

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

module.harmony文件里最重要的就兩個參數,一個是startModule,一個是startModuleName;startModule用于是否開啟組件化,startModuleName是負責開啟哪個組件,兩個是結合使用的。當startModule為true,自動就會把startModuleName的值對應的組件,改為可運行狀態,當startModule為false,就只保留entry模塊為可運行狀態,其他均為不可運行。

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

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

loadPage參數,默認配置的是Index.ets,沒有會自動創建,如果你有默認的頁面,可以配置這里,運行組件后,會展示你配置的頁面。

腳本運行

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

npm run module

五、腳本地址和相關總結

腳本開發環境:

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

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

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3943

    瀏覽量

    127738
  • HarmonyOS
    +關注

    關注

    79

    文章

    1982

    瀏覽量

    30419
  • 鴻蒙OS
    +關注

    關注

    0

    文章

    190

    瀏覽量

    4491
收藏 人收藏

    評論

    相關推薦

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

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

    鴻蒙開發:PageAbility的啟動模式

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

    HarmonyOS實戰開發-深度探索與打造個性自定義組件

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

    鴻蒙OS崛起,鴻蒙應用開發工程師成市場新寵

    應用的形態也在發生著翻天覆地的變化。作為全球領先的移動操作系統和智能終端制造商,華為公司自主研發的鴻蒙OS應運而生,致力于構建一個統一的分布式操作系統,為各行各業的應用開發帶來全新的可能性。 一、
    發表于 04-29 17:32

    OpenHarmony開發實例:【鴻蒙.bin文件燒錄】

    如何使用HiBurn工具燒錄鴻蒙的.bin文件到Hi3861開發板。
    的頭像 發表于 04-14 09:54 ?454次閱讀
    OpenHarmony<b class='flag-5'>開發</b><b class='flag-5'>實例</b>:【<b class='flag-5'>鴻蒙</b>.bin文件燒錄】

    鴻蒙OS開發實例:【HarmonyHttpClient】網絡框架

    鴻蒙上使用的Http網絡框架,里面包含純Java實現的HttpNet,類似okhttp使用,支持同步和異步兩種請求方式;還有鴻蒙版retrofit,和Android版Retrofit相似的使用,解放雙手般優雅使用注解、自動解析json
    的頭像 發表于 04-12 16:58 ?879次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b><b class='flag-5'>實例</b>:【HarmonyHttpClient】網絡框架

    鴻蒙OS開發學習:【尺寸適配實現】

    鴻蒙開發中,尺寸適配是一個重要的概念,它可以幫助我們在不同屏幕尺寸的設備上正確顯示和布局我們的應用程序。本文將介紹如何在鴻蒙開發中實現尺寸適配的方法。
    的頭像 發表于 04-10 16:05 ?1837次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>學習:【尺寸適配實現】

    鴻蒙ArkUI實例:【自定義組件

    組件是 OpenHarmony 頁面最小顯示單元,一個頁面可由多個組件組合而成,也可只由一個組件組合而成,這些組件可以是ArkUI開發框架自
    的頭像 發表于 04-08 10:17 ?683次閱讀

    鴻蒙OS開發實例:【應用狀態變量共享】

    平時在開發的過程中,我們會在應用中共享數據,在不同的頁面間共享信息。雖然常用的共享信息,也可以通過不同頁面中組件間信息共享的方式,但有時使用應用級別的狀態管理會讓開發工作變得簡單。
    的頭像 發表于 04-03 15:09 ?1425次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b><b class='flag-5'>實例</b>:【應用狀態變量共享】

    鴻蒙OS開發實例:【頁面傳值跳轉】

    本篇主要介紹如何在HarmonyOS中,在頁面跳轉之間如何傳值 HarmonyOS 的頁面指的是帶有@Entry裝飾器的文件,其不能獨自存在,必須依賴UIAbility這樣的組件容器 如下是官方關于State模型開發模式
    的頭像 發表于 03-29 20:16 ?2324次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b><b class='flag-5'>實例</b>:【頁面傳值跳轉】

    鴻蒙OS開發實例:【手擼服務卡片】

    服務卡片指導文檔位于“**開發/應用模型/Stage模型開發指導/Stage模型應用組件**”路徑下,說明其極其重要。本篇文章將分享實現服務卡片的過程和代碼
    的頭像 發表于 03-28 22:11 ?1235次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b><b class='flag-5'>實例</b>:【手擼服務卡片】

    鴻蒙OS開發實例:【工具類封裝-emitter組件間通信】

    `MyEmitterUtil` 是一個針對 HarmonyOS 的事件驅動編程封裝類,主要用于組件間的通信和數據傳遞。
    的頭像 發表于 03-27 22:13 ?724次閱讀

    鴻蒙OS和開源鴻蒙什么關系?

    內核,其他功能都以模塊的形式存在。 ? ? 華為用的是鴻蒙OS 我們都知道,華為手機的鴻蒙OS是可以運行安卓軟件的,是因為系統中有安卓兼容層,所以可以簡單這么理解:
    的頭像 發表于 01-30 15:44 ?1205次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b>和開源<b class='flag-5'>鴻蒙</b>什么關系?

    鴻蒙OS 分布式任務調度

    鴻蒙OS 分布式任務調度概述 在 HarmonyO S中,分布式任務調度平臺對搭載 HarmonyOS 的多設備構筑的“超級虛擬終端”提供統一的組件管理能力,為應用定義統一的能力基線、接口
    的頭像 發表于 01-29 16:50 ?545次閱讀

    了解鴻蒙OS Text組件

    文本(Text)是用來顯示字符串的組件,在界面上顯示為一塊文本區域。Text 作為一個基本組件,有很多擴展,常見的有按鈕組件 Button,文本編輯組件 TextField。 使用 T
    的頭像 發表于 01-29 15:24 ?1266次閱讀
    了解<b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b> Text<b class='flag-5'>組件</b>
    主站蜘蛛池模板: 久久久久国产精品美女毛片 | 美美哒高清在线播放8 | 小草影院免费 | 欧美丰满白嫩bbxx | 国偷自产AV一区二区三区健身房 | 海角国精产品一区一区三区糖心 | 九九久久久2 | 国内精品免费久久影院 | 亚洲欧美成人无码久久久 | 亚洲中文字幕AV在天堂 | 久久一本综合 | 色综合久久天天影视网 | 亚洲国产果果在线播放在线 | 青柠在线观看免费高清电视剧荣耀 | 骚妇BB双飞插 | 欧美成a人片免费看久久 | 久久成人免费观看全部免费 | 国产成人久久精品激情 | 中文字幕精品视频在线 | 最近中文字幕免费高清MV视频6 | 亚洲高清在线精品一区 | 一个人在线观看免费高清视频在线观看 | 国产喷水1区2区3区咪咪爱AV | 99久久全国免费久久爱 | 野花日本手机观看大全免费3 | 国产精品久久久久久人妻香蕉 | 久久久久国产一级毛片高清片 | 国产极品美女视频福利 | 免费国产足恋网站 | 青青草原影视 | 成人永久免费视频网站在线观看 | 国产骚妇BB网 | 一日本道伊人久久综合影 | 99视频全部看免费观 | 99精产国品一二产区在线 | 精品国产在线手机在线 | 免费观看高清黄页网址大全 | 麻豆精品传媒一二三区 | 亚洲人成伊人成综合网久久久 | 欧美三级黄色大片 | 色戒在线完整观看在线播放版 |