国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    4026

    瀏覽量

    133978
  • HarmonyOS
    +關注

    關注

    80

    文章

    2153

    瀏覽量

    36045
  • 鴻蒙OS
    +關注

    關注

    0

    文章

    193

    瀏覽量

    5482
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【匯思博SEEK100開發板試用體驗】在開發鴻蒙OS搭建QT開發環境

    功能或者網絡通信失敗等,檢查代碼中對相關功能的實現邏輯,是否正確調用了鴻蒙系統提供的 API 以及 Qt 的相關模塊。例如,在調用開發板攝像頭功能時,檢查是否獲取到了正確的攝像頭設備實例,并且是否按照規范進行了設備的初始
    發表于 08-24 18:34

    基于開源鴻蒙的視頻播放開發樣例

    在開源鴻蒙生態建設中,多媒體能力是構建豐富用戶體驗的核心要素。本開發樣例針對視頻播放場景,聚焦開源鴻蒙原生媒體框架,通過Video組件實現視頻資源加載、播放狀態控制及多樣
    的頭像 發表于 08-19 10:41 ?1606次閱讀
    基于開源<b class='flag-5'>鴻蒙</b>的視頻播放<b class='flag-5'>開發</b>樣例

    【HarmonyOS 5】鴻蒙頁面和組件生命周期函數

    【HarmonyOS 5】鴻蒙頁面和組件生命周期函數 ##鴻蒙開發能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財
    的頭像 發表于 07-11 18:24 ?1086次閱讀

    【HarmonyOS 5】金融應用開發鴻蒙組件實踐

    【HarmonyOS 5】金融應用開發鴻蒙組件實踐 ##鴻蒙開發能力 ##HarmonyOS SDK應用服務##
    的頭像 發表于 07-11 18:20 ?959次閱讀
    【HarmonyOS 5】金融應用<b class='flag-5'>開發</b><b class='flag-5'>鴻蒙</b><b class='flag-5'>組件</b>實踐

    鴻蒙5開發寶藏案例分享---一多開發實例(音樂)

    各位開發者小伙伴們好呀!今天咱們來點硬核干貨!最近在鴻蒙文檔中心挖到一座“金礦”——官方竟然暗藏了100+實戰案例,從分布式架構到交互動效優化應有盡有!這些案例不僅藏著華為工程師的私房技巧,還直接
    的頭像 發表于 06-30 11:54 ?769次閱讀

    鴻蒙5開發寶藏案例分享---Swiper組件性能優化實戰

    鴻蒙寶藏:Swiper組件性能優化實戰,告別卡頓丟幀! 大家好!最近在鴻蒙開發時,偶然發現了官方文檔里埋藏的 性能優化寶藏案例 ,尤其是<span class=\"
    發表于 06-12 17:53

    HarmonyOS實戰:組件項目搭建

    前言 鴻蒙應用開發已經成為互聯網新的風口,開發鴻蒙軟件已經成為今年工作的核心目標。在軟件開發過程中,對于復雜度較大,功能較多的軟件都會采用
    的頭像 發表于 06-09 14:58 ?672次閱讀
    HarmonyOS實戰:<b class='flag-5'>組件</b><b class='flag-5'>化</b>項目搭建

    鴻蒙5開發案例分享揭秘---一多開發實例(商務辦公)

    ?【鴻蒙開發寶藏案例大揭秘】原來官方文檔里藏了這么多好東西! 大家好呀~最近在肝鴻蒙項目時意外扒出了官方文檔里的\"藏寶庫\"!原來那些讓人頭禿的跨端適配難題,官方早就準備好
    發表于 06-03 16:24

    鴻蒙5開發寶藏案例分享---一多開發實例(地圖導航)

    案例!最近在肝鴻蒙項目時意外發現了這個地圖導航的\"一多\"開發實例,簡直像發現新大陸!這就帶大家沉浸式體驗這個超實用的開發模板~ ? 先劃重點:這個案例完美演示了如何用一套代碼搞定
    發表于 06-03 16:17

    鴻蒙5開發寶藏案例分享---一多開發實例(旅行訂票)

    ? 鴻蒙開發寶藏大發現!一多開發實戰案例解析(旅行訂票篇) 大家好!今天在翻鴻蒙開發者文檔時,意外發現了官方藏著一整片\"案例綠洲\"!尤其
    發表于 06-03 16:16

    鴻蒙5開發寶藏案例分享---一多開發實例(即時通訊)

    ?鴻蒙\"一多\"開發寶藏指南:原來官方案例還能這么玩!? 大家好呀!我是剛在鴻蒙開發路上踩完坑的某不知名碼農,今天要給大家分享一個重大發現——原來HarmonyOS官方早就給我
    發表于 06-03 16:01

    鴻蒙5開發寶藏案例分享---一多開發實例(長視頻)

    ;) 看完是不是覺得鴻蒙的\"一多開發\"也沒那么玄乎?其實只要掌握自適應布局+模塊設計,一套代碼征服多設備真的可以輕松實現!大家在開發中還遇到過哪些頭禿的適配問題?歡迎在評論區開聊
    發表于 06-03 15:58

    UIAbility組件啟動模式實例在啟動時的不同呈現狀態

    UIAbility組件啟動模式 UIAbility的啟動模式是指UIAbility實例在啟動時的不同呈現狀態。針對不同的業務場景,系統提供了三種啟動
    發表于 05-16 06:10

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

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

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

    的地方請大家高抬貴手,寬容一下,謝謝。 這次主要是給大家帶來一個重磅消息,就是我自己使用鴻蒙ArkTS語法開發的圖表組件今日正式開源了。為什么?原因有兩點吧! 鴻蒙是國產的操作系統,
    發表于 03-15 15:21