鴻蒙Flutter實戰:22-混合開發詳解-2-Har包模式引入

以 Har 包的方式加載到 HarmonyOS 工程

創建工作

創建一個根目錄

mkdir ohos_flutter_module_demo

這個目錄用于存放 flutter 項目和鴻蒙項目。

創建 Flutter 模塊

首先創建一個 Flutter 模塊,我們選擇與 ohos_app 項目同級目錄

flutter create --template=module my_flutter_module

如果使用了 fvm,首先確定當前目錄使用的 flutter 版本為鴻蒙的 SDK 版本,如可以使用 fvm use custom_3.22.0設置,然后在 flutter 命令前加上 fvm,上面的命令也就變成了 fvm flutter create --template=module my_flutter_module

命令行出現以下輸出:

Creating project my_flutter_module...
Resolving dependencies in `my_flutter_module`...
Downloading packages...
Got dependencies in `my_flutter_module`.
Wrote 12 files.All done!
Your module code is in my_flutter_module/lib/main.dart.

創建 Flutter 模塊成功之后,目錄結構如下:

創建 DevEco 工程

使用 DevEco 在 ohos_flutter_module_demo 目錄下,新建一個名為 ohos_app 的工程。

注意保存的目錄為 xxxx/ohos_flutter_module_demo/ohos_app

創建成功后,整個目錄結構如下:

可以看到,我們將 Flutter 模塊放在了與 ohos_app 項目同級。my_flutter_module 中自動創建了 .ohos 目錄, 這也是一個簡單的鴻蒙項目,不過會包含一個名為 flutter_module 的模塊。

將 Flutter 模塊打包成 Har 包

接下來,我們使用 flutter build har 命令將 Flutter 模塊打包成 Har 包。

打包前首先配置簽名,用 DevEco 打開 .ohos 目錄,然后對項目簽名,操作如下:

DevEco Studio 打開 my_flutter_module/.ohos 工程后配置調試簽名(File -> Project Structure -> Signing Configs 勾選 Automatically generate signature)
flutter build har --debug

命令行出現以下輸出:

Running Hvigor task assembleHar...                                 47.5sConsuming the Module1. Open <host project>/oh-package.json52. Add flutter_module to the dependencies list:"dependencies": {"@ohos/flutter_module": "file:path/to/har/flutter_module.har"}3. Override flutter and plugins dependencies:"overrides" {"@ohos/flutter_ohos": "file:path/to/har/flutter.har",}

觀察目錄 my_flutter_module/.ohos/har 目錄,可以看到 Flutter 模塊的 Har 包已經生成了, 里面生成了兩個文件,分別是 flutter_module.har 和 flutter.har。

注意,生成的 flutter_module.har 是默認名稱,與項目名無關。如何想要修改生成的名稱,可在 my_flutter_module/.ohos/flutter_module/oh-package.json5 文件中修改包名。

引入 Har 包到 ohos 項目中

接下來,我們將生成的 har 包復制到宿主項目 ohos 中,然后回到 ohos 項目工程,將上面生成的 Har 包添依賴配置中。

  1. 復制 Har 包
cp -r my_flutter_module/.ohos/har/* ohos/har/
  1. 編輯 ohos_app/oh-package.json5 文件:
  "dependencies": {"@ohos/flutter_module": "file:har/my_flutter_module.har","@ohos/flutter_ohos": "file:har/my_flutter.har"},"overrides" {"@ohos/flutter_ohos": "file:har/flutter.har",}

注意:如何不想使用復制Har包的方式,也可以通過相對路徑直接引入原Har的位置,可使用以下方式引入:

  "dependencies": {"@ohos/flutter_module": "file:../my_flutter_module/.ohos/har/flutter_module.har","@ohos/flutter_ohos": "file:../my_flutter_module/.ohos/har/flutter.har"},"overrides": {"@ohos/flutter_ohos": "file:../my_flutter_module/.ohos/har/flutter.har"},

這里需要配置 overrides ,為了解決依賴沖突問題,因為 @ohos/flutter_module依賴了 @ohos/flutter_ohos, 但因為使用的是相對目錄,會導致加載失敗,故這里通過 overrides 來重新指定 @ohos/flutter_ohos 的路徑。

另外,與上文提示或者官方文檔中不同的是,我們在 dependencies 也添加了 @ohos/flutter_ohos ,這是為了 IDE 提示的問題,不加的話會出現以下錯誤信息

Cannot find module '@ohos/flutter_ohos' or its corresponding type declarations. <ArkTSCheck>

最后, 再次對 ohos 項目簽名,并運行 DevEco 項目。

接下來

現在我們只是將 Har 包引入到 ohos 項目中,在接下來的文章 跳轉Flutter頁面中,我們將介紹如何在 ohos 原生項目中,初始化 Flutter 引擎,并在合適的地方跳轉打開 Flutter 頁面。

總結

  1. 這種模式適合較大的項目團隊,常見的場景是,負責 Flutter 開發的同事開發好指定的模塊,以 Har 包的形式交付給鴻蒙原生的開發團隊。

  2. 在這種模式下,鴻蒙原生的開發團隊,不需要太多關注 Flutter 部分的內容,甚至不需要安裝 Flutter 開發環境,可以更好的職責分離。

  3. 缺點,由于 Flutter 模塊打包成了 Har 包,以 so 文件存在,故 Flutter 無法熱重載。

參考資料

  • flutter_page_sample1
  • flutter_page_sample2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906835.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go核心特性與并發編程

Go核心特性與并發編程 1. 結構體與方法&#xff08;擴展&#xff09; 高級結構體特性 // 嵌套結構體與匿名字段 type Employee struct {Person // 匿名嵌入Department stringsalary float64 // 私有字段 }// 構造函數模式 func NewPerson(name string, age int) *Pe…

Java 函數式接口(Functional Interface)

一、理論說明 1. 函數式接口的定義 Java 函數式接口是一種特殊的接口&#xff0c;它只包含一個抽象方法&#xff08;Single Abstract Method, SAM&#xff09;&#xff0c;但可以包含多個默認方法或靜態方法。函數式接口是 Java 8 引入 Lambda 表達式的基礎&#xff0c;通過函…

【python代碼】一些小實驗

目錄 1. 測試Resnet50 ONNX模型的推理速度 1. 測試Resnet50 ONNX模型的推理速度 ############################### # 導出resnet50 模型 # 測試onnx模型推理 cpu 和 GPU 的對比 ###############################import time import numpy as np import onnxruntime as ort im…

5.Java 面向對象編程入門:類與對象的創建和使用?

在現實生活中&#xff0c;我們常常會接觸到各種各樣的對象&#xff0c;比如一輛汽車、一個學生、一部手機等。這些對象都具有各自的屬性和行為。例如&#xff0c;汽車有顏色、品牌、型號等屬性&#xff0c;還有啟動、加速、剎車等行為&#xff1b;學生有姓名、年齡、學號等屬性…

從開發者角度看數據庫架構進化史:JDBC - 中間件 - TiDB

作者&#xff1a; Lucien-盧西恩 原文來源&#xff1a; https://tidb.net/blog/e7034d1b Java 應用開發技術發展歷程 在業務開發早期&#xff0c;用 Java 借助 JDBC 進行數據庫操作&#xff0c;雖能實現基本交互&#xff0c;但需手動管理連接、編寫大量 SQL 及處理結果集&a…

工業智能網關建立烤漆設備故障預警及遠程診斷系統

一、項目背景 烤漆房是汽車、機械、家具等工業領域廣泛應用的設備&#xff0c;主要用于產品的表面涂裝。傳統的烤漆房控制柜采用本地控制方式&#xff0c;操作人員需在現場進行參數設置和設備控制&#xff0c;且存在設備智能化程度低、數據孤島、設備維護成本高以及依靠傳統人…

故障率預測:基于LSTM的GPU集群硬件健康監測系統(附Prometheus監控模板)

一、GPU集群健康監測的挑戰與價值 在大規模深度學習訓練場景下&#xff0c;GPU集群的硬件故障率顯著高于傳統計算設備。根據2023年MLCommons統計&#xff0c;配備8卡A100的服務器平均故障間隔時間&#xff08;MTBF&#xff09;僅為1426小時&#xff0c;其中顯存故障占比達38%&…

Vue 樣式不一致問題全面分析與解決方案

文章目錄 1. 問題概述1.1 問題表現1.2 問題影響 2. 根本原因分析2.1 Vue 的渲染機制與樣式加載時機2.2 Scoped CSS 的工作原理2.3 CSS 模塊化與作用域隔離2.4 樣式加載順序問題2.5 熱重載(HMR)與樣式更新 3. 解決方案3.1 確保樣式加載順序3.1.1 預加載關鍵 CSS3.1.2 控制全局樣…

[免費]微信小程序寵物醫院管理系統(uni-app+SpringBoot后端+Vue管理端)【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的微信小程序寵物醫院管理系統(uni-appSpringBoot后端Vue管理端)&#xff0c;分享下哈。 項目視頻演示 【免費】微信小程序寵物醫院管理系統(uni-appSpringBoot后端Vue管理端) Java畢業設計_嗶哩嗶哩_bilibi…

測試總結(一)

一、測試流程 參與需求評審-制定測試計劃-編寫測試用例-用例評審-冒煙測試-測試執行-缺陷管理-預發驗收測試-發布線上-線上回歸-線上觀察-項目總結 二、測試用例設計方法 等價類劃分&#xff08;處理有效/無效輸入&#xff09; 邊界值分析&#xff08;臨界值測試&#xff09…

SAP-ABAP:ABAP異常處理與SAP現代技術融合—— 面向云原生、微服務與低代碼場景的創新實踐

專題三&#xff1a;ABAP異常處理與SAP現代技術融合 —— 面向云原生、微服務與低代碼場景的創新實踐 一、SAP技術演進與異常處理的挑戰 隨著SAP技術棧向云端、微服務化和低代碼方向演進&#xff0c;異常處理面臨新場景&#xff1a; Fiori UX敏感度&#xff1a;用戶期望前端友…

DC-DC電路的自舉電容電路原理

在以往的電子產品設計中&#xff0c;我們經常會選型 DCDC 芯片&#xff0c;在選型過程中經常遇到有些DC-DC電路中需要用到自舉電容&#xff0c;本文主要分析自舉電容在DC-DC電路中的原理。 無論同步或者異步整流&#xff0c;經常會看到一個自舉電容&#xff0c;常并聯在DC-DC的…

android studio 開啟無線調試

1、在工具的模擬器點擊下后&#xff0c;會出現下面菜單&#xff1a; 選擇Pair Devices Using Wi-Fi 發現一直在轉圈&#xff0c;并不會連接上&#xff0c;之前在android12的時候&#xff0c;發現一連就上了&#xff0c;現在換成了android14&#xff0c;連不上了。 2、選擇用命令…

Go基礎語法與控制結構

Go基礎語法與控制結構 1. 環境配置與Hello World&#xff08;擴展&#xff09; 安裝指南 # 驗證安裝成功 $ go version # 設置模塊代理&#xff08;中國用戶推薦&#xff09; $ go env -w GOPROXYhttps://goproxy.cn,direct程序解剖 package main // 程序入口包聲明import…

QGIS新手教程:兩種方法創建點圖層(手動添加 + 表格導入),支持經緯度定位與查找

&#x1f30d;QGIS新手教程&#xff1a;兩種方法創建點圖層&#xff08;手動添加 表格導入&#xff09;&#xff0c;支持經緯度定位與查找 本文將手把手教你在 QGIS 中通過兩種方法創建點圖層&#xff0c;并結合經緯度定位、拾取坐標、查找屬性等功能&#xff0c;快速掌握從地…

Doris ClickHouse Greenplum 對比

1. 核心架構對比 Doris &#xff08;https://doris.apache.org/&#xff09; MPP架構 列式存儲支持實時更新&#xff08;Unique Key模型&#xff09;向量化執行引擎兼容MySQL協議 ClickHouse &#xff08;https://clickhouse.com/&#xff09; 分布式列式存儲MergeTree存儲引…

基于python,html,echart,php,mysql,在線實時監控入侵檢測系統

詳細視頻:【基于python,html,echart,php,mysql,在線實時監控入侵檢測系統&#xff0c;需要的可聯系介紹都在所有圖片中。包遠程部署安裝。-嗶哩嗶哩】 https://b23.tv/KHxmE8k

基于51單片機智能垃圾桶—紅外感應自動開關

基于51單片機智能垃圾桶 &#xff08;仿真&#xff0b;程序&#xff0b;原理圖&#xff0b;PCB&#xff0b;設計報告&#xff09; 功能介紹 具體功能&#xff1a; 1.ULN2003驅動步進電機控制打開關閉垃圾桶&#xff1b; 2.一個紅外對管檢測有沒有人&#xff0c;一個紅外對管…

自動涂膠機設計及其在工業生產中的應用研究

摘要 本文詳細探討了自動涂膠機的設計原理、關鍵技術和應用前景。隨著工業自動化水平的不斷提高&#xff0c;自動涂膠機在制造業中的應用日益廣泛。文章首先分析了自動涂膠機的基本工作原理&#xff0c;然后深入研究了其機械結構設計、控制系統設計和視覺定位系統等關鍵技術。…

SQL 語言

SQL概述與數據庫定義 SQL的基本組成 1、數據定義語言。SQL DDL提供定義關系模式和視圖、刪除關系和視圖、修改關系模式的命令。 2、交互式數據操縱語言。SQL DML提供查詢、插入、刪除和修改的命令。 3、事務控制。SQL提供定義事務開始和結束的命令。 4、嵌入式SQL和動態SQL。用…