鴻蒙Flutter實戰(zhàn):14-現(xiàn)有Flutter 項目支持鴻蒙 II

引言

在之前的文章鴻蒙Flutter實戰(zhàn):09-現(xiàn)有Flutter項目支持鴻蒙中勒葱,介紹了如何改造項目寒瓦,適配鴻蒙平臺。

文中講述了整體的理念和思路甩苛,本文更進(jìn)一步,結(jié)合可實操的項目代碼到踏,詳細(xì)說明如何實施撬讽。

通過模塊化族展、鴻蒙殼工程,結(jié)合 FVM 管理多版本 Flutter SDK深滚,最終奕谭,保持原 Flutter 代碼純凈,最小化修改痴荐,完成了鴻蒙化的適配示例血柳。

本項目代碼地址: https://gitee.com/zacks/flutter-ohos-demo

準(zhǔn)備工作

1.安裝 FVM

dart pub global activate melos

2.使用 FVM 安裝 Flutter SDK

分別安裝官方的3.22版本,以及鴻蒙社區(qū)的 3.22.0 版本

3.搭建 Flutter鴻蒙開發(fā)環(huán)境

參考文章《鴻蒙Flutter實戰(zhàn):01-搭建開發(fā)環(huán)境》

搭建項目架構(gòu)

創(chuàng)建目錄

# 創(chuàng)建項目目錄
mkdir flutter-ohos-demo

設(shè)置使用的 Flutter SDK 版本
推薦在 VsCode 的命令行中執(zhí)行以下命令生兆,這將創(chuàng)建 .fvm 目錄, .vscode/setting.json 文件, 和.fvmrc 文件

fvm use 3.22.0

初始化工作區(qū)間

創(chuàng)建目錄难捌,項目結(jié)構(gòu)如下所示:

.
├──  packages
│   ├── apps  #該目錄用于存放各端應(yīng)用殼工程
│   ├── common #該目錄用于存放公共庫,均為純 dart 代碼鸦难,不依賴于 ios/android 等原生實現(xiàn)
│   │   ├── domains #領(lǐng)域?qū)ο蟾酰娣鸥黝悓嶓w文件,如枚舉/模型/vo/事件等
│   │   ├── extensions #存放擴展類文件合蔽,對于類的擴展方法/屬性
│   │   ├── services #服務(wù)類:如請求服務(wù)/授權(quán)服務(wù)/緩存服務(wù)/平臺調(diào)用服務(wù)/路由服務(wù)/工具類等
│   │   └── widgets #通用小型 widgets, 純dart編寫的 Flutter UI 組件
│   ├── components #封裝組件庫击敌,可以依賴于第三方庫/第三方插件,或依賴于 plugins中的插件
│   │   ├── image_uploader
│   │   └── player
│   ├── modules
│   │   ├── address
│   │   ├── home
│   │   ├── me
│   │   ├── message
│   │   ├── order
│   │   ├── shop
│   │   └── support
│   └── plugins #插件庫拴事,自行封裝的插件庫沃斤,依賴于原生平臺(ios/android)的代碼
│       └── printer
├── README.md
├── melos.yaml
└── pubspec.yaml

運行 melos bootstrap

melos bootstrap

開始編寫代碼

在各個 package 初始化代碼圣蝎,如在 packages/common/domains 目錄運行

fvm flutter create --template package .

創(chuàng)建殼工程

新建兩個殼工程,一個為 app衡瓶,另外一個為 ohos_app

App 殼工程

進(jìn)入 package/apps/app 目錄, 創(chuàng)建 app 項目捅彻,該項目為一個 App 項目,用于各平臺(ios/android/mac 等鞍陨, 不包含鴻蒙)打包

fvm flutter create --template app --org com.moguyun.flutter app

增加依賴項

修改 pubspec.yaml步淹,添加以下內(nèi)容

 services:
   path: '../../common/services'
 domains:
   path:  '../../common/domains'
 widgets:
   path: '../../common/widgets'

 home:
   path: '../../modules/home'
 me:
   path: '../../modules/me'
 support:
   path: '../../modules/support'

安裝依賴

運行以下命令,安裝依賴

fvm flutter pub get

鴻蒙殼工程

切換鴻蒙 Flutter SDK

首先在 flutter-ohos-demo 項目根目錄诚撵,將 Flutter 版本切換到鴻蒙化的版本

fvm use custom_3.22.0

SDK 變更以后缭裆,需要重啟 IDE (或者 Dart:Restart Analysis Server),以便讓 Flutter 插件重啟

創(chuàng)建 ohos_app 項目

進(jìn)入 packages/apps 目錄寿烟,創(chuàng)建 ohos_app 項目

fvm flutter create --template app --platforms ohos --org com.moguyun.flutter ohos_app

增加依賴項

進(jìn)入 packages/apps/ohos_app 目錄中的 pubspec.yaml, 同樣增加依賴項

 services:
   path: '../../common/services'
 domains:
   path:  '../../common/domains'
 widgets:
   path: '../../common/widgets'

 home:
   path: '../../modules/home'
 me:
   path: '../../modules/me'
 support:
   path: '../../modules/support'

三方庫鴻蒙化適配

編輯 pubspec.yaml文件澈驼,增加以下配置,通過 dependency_overrides 來替換鴻蒙化的三方庫筛武,注意鴻蒙化的庫與原庫缝其,保持版本統(tǒng)一

# 鴻蒙適配
dependency_overrides:
  flutter_inappwebview:
    git:
      url: https://gitee.com/openharmony-sig/flutter_inappwebview.git
      path: "flutter_inappwebview"

每次修改完 pubspec.yaml,使用 fvm flutter pub get 更新下依賴安裝徘六。

運行調(diào)試

用 Deveco 打開apps/ohos_app/ohos 目錄内边。

在 Deveco 左上角 打開 File -> Project Structure..., 點擊 Siging Configs, 勾選 Automatically generate signature, 對鴻蒙項目簽名。

在 ohos_app 目錄下待锈,使用 fvm flutter run漠其,或者點擊運行按鈕,運行flutter項目竿音。

注意事項

  1. melos.yaml 文件中的 sdkPath: .fvm/flutter_sdk 配置了 melos 使用的 flutter SDK 版本和屎,即由FVM 配置的當(dāng)前項目版本

  2. 每次切換 Flutter SDK 時,都會修改文件 .fvm/, vscode/settings.json 文件

  3. ohos_app/pubsec.yaml 中的 dependency_overrides, 僅添加需要鴻蒙化的三方庫

  4. ohos-3.22 在 build 時春瞬,有的 har 包可能確實柴信,建議保持 ohos-Flutter 版本最新,如果還是不行宽气,可以考慮手動復(fù)制 har 包(使用 3.7 構(gòu)建出來)

如何判斷三方庫是否需要鴻蒙化随常,簡而言之,如果三方庫由純 Dart 實現(xiàn)抹竹,則不需要單獨適配线罕,直接使用;如果三方庫依賴系統(tǒng)底層實現(xiàn)窃判,則需要鴻蒙化適配钞楼。

三方庫的適配情況,可以查詢 Gitee/Github袄琳,或者查閱表格 Flutter三方庫適配計劃

  1. 已知插件刪除問題询件,如果刪除插件燃乍,可能需要在ohos里面手動修改代碼,移除相關(guān)依賴

ohos/oh-package.json5

應(yīng)用截圖

1.jpeg
2.jpeg
7264a7557d17483686b9e6d29e692617b1666.jpeg

總結(jié)

  1. 通過 FVM 管理多個 Flutter SDK 版本宛琅,僅在鴻蒙調(diào)測打包時刻蟹,切換到 ohos-flutter SDK
  2. 通過 apps 殼工程,將鴻蒙化適配的代碼嘿辟,盡量在 ohos_app 項目中完成舆瘪。通過 pub 包管理的 dependency_overrides 配置,逐個替換鴻蒙化的三方庫
  3. 通過 melos 管理多包項目红伦,F(xiàn)lutter 項目進(jìn)行模塊化英古、組件化、插件化拆分昙读,職責(zé)分離召调,平臺抽象,不同平臺組合打包蛮浑,有效解決平臺不一致問題

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唠叛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沮稚,更是在濱河造成了極大的恐慌艺沼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壮虫,死亡現(xiàn)場離奇詭異澳厢,居然都是意外死亡,警方通過查閱死者的電腦和手機囚似,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來线得,“玉大人饶唤,你說我怎么就攤上這事」峁常” “怎么了募狂?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長角雷。 經(jīng)常有香客問我祸穷,道長,這世上最難降的妖魔是什么勺三? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任雷滚,我火速辦了婚禮,結(jié)果婚禮上吗坚,老公的妹妹穿的比我還像新娘祈远。我一直安慰自己呆万,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布车份。 她就那樣靜靜地躺著谋减,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扫沼。 梳的紋絲不亂的頭發(fā)上出爹,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音缎除,去河邊找鬼严就。 笑死,一個胖子當(dāng)著我的面吹牛伴找,可吹牛的內(nèi)容都是我干的盈蛮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼技矮,長吁一口氣:“原來是場噩夢啊……” “哼抖誉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衰倦,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤袒炉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后樊零,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體我磁,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年驻襟,在試婚紗的時候發(fā)現(xiàn)自己被綠了夺艰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡沉衣,死狀恐怖郁副,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豌习,我是刑警寧澤存谎,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站肥隆,受9級特大地震影響既荚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜栋艳,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一恰聘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦憨琳、人聲如沸诫钓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽菌湃。三九已至,卻和暖如春遍略,著一層夾襖步出監(jiān)牢的瞬間惧所,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工绪杏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留下愈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓蕾久,卻偏偏與公主長得像势似,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子僧著,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容