鴻蒙Flutter實戰:21-混合開發詳解-1-概述

引言

在前面的系列文章中,我們從搭建開發環境開始,講到如何使用、集成第三方插件,如何將現有項目進行鴻蒙化改造,以及上架審核等內容;還以高德地圖的 HarmonyOS SDK 的使用為例,
講解了如何將高德地圖集成至項目當中。

混合開發

除了使用 Flutter 工程做為主項目開發以外,還有一種常見的開發方式,即混合開發,主項目工程為 HarmonyOS 工程, Flutter 工程以模塊形式存在,,以依賴方式加載到主項目工程中,最終實現混合開發 。

想必混合開發也不會陌生,因為我們也簡要介紹過,鴻蒙 Flutter 項目混合開發的兩種形式。

從本章開始,我們將進一步深入,從原理出發、以工程實戰為主線,探索這兩種混合開發方式。

混合開發的兩種方式

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

HAR(Harmony Archive)是靜態共享包,可以包含代碼、C++庫、資源和配置文件。通過HAR可以實現多個模塊或多個工程共享ArkUI組件、資源等相關代碼。

在這里插入圖片描述

這種開發方式,就是將 Flutter 模塊編譯打包成 HAR 包,在原生鴻蒙項目中,以 Har 包的方式引入這個模塊包,從而實現混合開發。

  1. 以源碼的方式加載到 HarmonyOS 工程

從方式 1 的介紹中,可以發現,每次 Flutter 模塊的更新都需要重新編譯成 Har 包,并且需要重新打包到原生鴻蒙工程中,非常麻煩。于是就有了源碼依賴的方式,也就是說,

讓原生鴻蒙工程依賴 Flutter 模塊的源碼,這樣 Flutter 代碼變更時,不需要重新打包成 Har 包,而且可以在開發過程中,實現熱更新,實時刷新界面。

開發流程

  1. 總目錄

為了方便管理/演示,本示例的目錄名為 ohos_flutter_module_demo, 我們將原生鴻蒙工程和 Flutter 模塊都在這個目錄下創建。

  1. 創建原生鴻蒙工程

這個也就是宿主工程,這里我們使用 DevEco Studio,在 ohos_flutter_module_demo 目錄下面, 創建一個原生鴻蒙工程,本文中工程名命名為 ohos_app。

  1. 創建 Flutter 模塊

這個流程都一樣,我們可以使用命令以下命令創建一個 Flutter 模塊:

flutter create --template=module my_flutter_module

最終項目目錄結構如下:

ohos_flutter_module_demo
├── my_flutter_module
├── ohos_app

這樣,為了方便維護,Flutter 模塊在宿主項目外部創建,與宿主項目同級目錄。本文中,上級目錄為 ohos_flutter_module_demo, 其下有兩個子目錄,分別是 ohos_app (宿主項目),和 my_flutter_module (Flutter 模塊)。

  1. 編譯 Flutter 模塊

如何使用 Har 包模式,需要先將 Flutter 模塊編譯成 Har 包;如何使用源碼依賴的方式,則不需要這一步。

使用以下命令將 Flutter 模塊編譯成 Har 包:

flutter build har --debug
  1. 配置原生鴻蒙工程

如果是通過 Har 包模式,則可將 Har 包添加至依賴文件中:

首先先構建出的 Har 包復制到 ohos 鴻蒙工程中:

cp -r my_flutter_module/.ohos/har/* ohos_app/har/
  "dependencies": {"@ohos/flutter_module": "file:har/flutter_module.har","@ohos/flutter_ohos":  "file:har/flutter.har"},"overrides" {"@ohos/flutter_ohos": "file:har/flutter.har",}

如果是通過源碼模式,則需將 Flutter 模塊的源碼添加至依賴文件中:

  "dependencies": {"@ohos/flutter_module": "../flutter_module"}
  1. 修改入口文件(可選)
    修改入口文件, 將 Flutter 模塊生成的 .ohos目錄中的 EntryAbility.ets 和 Index.ets 文件復制到宿主工程中進行替換
cp my_flutter_module/.ohos/entry/src/main/ets/entryability/EntryAbility.ets ohos_app/entry/src/main/ets/entryability/EntryAbility.ets
cp my_flutter_module/.ohos/entry/src/main/ets/pages/Index.ets ohos_app/entry/src/main/ets/pages/Index.ets

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

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

相關文章

Vmware ubuntu22.04 虛擬機 連接Windows主機虛擬串口

1. Windows虛擬串口配置 虛擬串口下載:教程網址 虛擬串口使用:教程網址 2. Ubuntu 虛擬串口配置 Vmware ubuntu22.04 虛擬機 連接windows主機虛擬串口_vmware中ttys0連接的是哪個端口-CSDN博客 注意:虛擬添加串口的時候,一直…

編譯rk3568的buildroot不起作用

一、環境: 使用kickpi k1開發板,芯片為rk3568。 vmware ubuntu22.04 kickpi給的sdk包,應該不同友商是通用的。 使用的根文件為buildroot 二、問題: 由于 1、wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 …

【動態規劃】簡單多狀態(二)

📝前言說明: 本專欄主要記錄本人的基礎算法學習以及LeetCode刷題記錄,按專題劃分每題主要記錄:(1)本人解法 本人屎山代碼;(2)優質解法 優質代碼;&#xff…

如何選擇支持AI接入的開發語言與框架

選擇支持AI接入的開發語言與框架 在AI系統開發中,語言和框架的選擇不僅決定了代碼實現方式,更深刻影響模型服務的接入效率、調用方式、性能表現和未來的可維護性。相比傳統后端系統的語言選擇只需關注并發性能或生態成熟度,AI架構下的開發語言必須同時滿足以下幾類能力: 具…

計算機視覺與深度學習 | Python實現CEEMDAN-ABC-VMD-DBO-CNN-LSTM時間序列預測(完整源碼和數據)

以下是一個結合CEEMDAN、ABC優化VMD、DBO優化CNN-LSTM的完整時間序列預測實現方案。該方案包含完整的數據生成、算法實現和模型構建代碼。 完整實現代碼 import numpy as np import pandas as pd from PyEMD import CEEMDAN from vmdpy import VMD from sklearn.preprocessing…

React19源碼系列之渲染階段performUnitOfWork

在 React 內部實現中,將 render 函數分為兩個階段: 渲染階段提交階段 其中渲染階段可以分為 beginWork 和 completeWork 兩個階段,而提交階段對應著 commitWork。 在之前的root.render過程中,渲染過程無論是并發模式執行還是同…

c# 解碼 encodeURIComponent

在C#中,如果你需要解碼由encodeURIComponent方法編碼的URL,你可以使用System.Web命名空間中的HttpUtility.UrlDecode方法。這個方法可以處理由JavaScript的encodeURIComponent方法編碼的字符串。 首先,確保你的項目中引用了System.Web命名空…

Python學習心得:代碼森林的冒險

第一章:迷霧中的第一步 林然從未想過自己會與代碼結緣。那是一個平淡的周六清晨,陽光穿過窗簾,灑在她那臺老舊的筆記本電腦上。屏幕上,Python的安裝界面靜靜地等待著她的決定。她是一個文科生,大學主修社會學&#xf…

展示了一個三軸(X, Y, Z)坐標系!

等軸測投影”(isometric projection)風格的手繪風格三維圖,即三條坐標軸(x?, x?, x?)看起來彼此垂直、等角分布(通常是 120 夾角),它是常見于教材和數學書籍的 “假三維”表示法。…

計算機網絡 - 2.基礎協議

1.TCP協議 1.TCP(Transmission Control Protocol):傳輸控制協議2.TCP協議是一種面向連接的、可靠的、 基于字節流的傳輸層通信協議 1.面向連接:兩個使用TCP協議的應用(通常一個客戶和一個服務器)在彼此交換數據包之前必須先建立一個TCP連接2.可靠的 1.數據傳輸之前都要建立…

前端之vue3創建基本工程,基本登錄、注冊等功能的完整過程

此文也是為了做一個基本學習用的vue3創建項目的過程,包含基本的登錄頁面、登出頁面、基本的router跳轉、axios調用、登錄驗證等內容。與項目: https://gitee.com/rainpet/java-web-demo/tree/master/spring-security01 可以配套使用。 如下為主要過程。 …

如果有三個服務實例部署在三臺不同的服務器上,這三個服務實例的本地緩存,是存儲一模一樣的數據?還是各自只存一部分?

? 答案是:通常每個服務實例都會獨立地緩存它自己訪問過的數據,這些數據可能是相同的,也可能是不同的,取決于請求的內容。 📌 舉個例子說明 假設你有一個商品詳情頁的服務,部署了 3 個服務實例&#xff08…

九州未來十三載:開源賦能 智啟未來

2012年,九州未來以“開源賦能云邊變革”為使命,開啟中國開放云邊基礎架構服務的探索之路。十三載堅守深耕,我們始終以開源為翼,以算力為基,在科技浪潮中砥礪前行,見證并推動著AI時代的算力變革。 堅守初心丨…

Axure項目實戰:智慧運輸平臺后臺管理端-訂單管理1(多級交互)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝!如有幫助請訂閱專欄! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:訂單管理 主要內容:條件組合、中繼器篩選、表單跟隨菜單拖動、審批數據互通等 應用場景…

WebAssembly:開啟跨平臺高性能編程的新時代

在當今的互聯網時代,Web 應用的復雜性和性能要求越來越高。從簡單的網頁瀏覽到復雜的在線游戲、實時數據處理和圖形渲染,開發者需要一種能夠兼顧性能和兼容性的技術。WebAssembly(簡稱 Wasm)應運而生,它作為一種新興的…

大數據治理:理論、實踐與未來展望(二)

書接上文 文章目錄 七、大數據治理的未來發展趨勢(一)智能化與自動化(二)數據隱私與安全的強化(三)數據治理的云化(四)數據治理的跨行業合作(五)數據治理的生…

計算機視覺與深度學習 | Matlab實現EMD-GWO-SVR、EMD-SVR、GWO-SVR、SVR時間序列預測(完整源碼和數據)

以下是一個完整的Matlab時間序列預測實現方案,包含EMD-GWO-SVR、EMD-SVR、GWO-SVR和SVR四種方法的對比。代碼包含數據生成、信號分解、優化算法和預測模型實現。 %% 主程序:時間序列預測對比實驗 clc; clear; clearvars; close all;% 生成模擬時間序列數據 rng(1); % 固定隨…

RabbitMQ核心特性——重試、TTL、死信隊列

一、重試機制 在消息傳輸過程中,可能遇到各種問題,如網絡故障,服務器不可用等,這些問題可能導致消息處理失敗,因此RabbitMQ提供了重試機制,允許消息處理失敗后重新發送,但是,如果是因…

MVCC實現原理

MVCC的基本概念 MVCC,一個數據的多個版本,使得讀寫操作沒有沖突。 在多個事務并發的情況下,確定到底要訪問哪個版本。 MVCC實現原理 MVCC實現依賴于隱式字段,undo log日志,readView 隱式字段 在mysql用戶自定義的…

湖北理元理律師事務所債務優化方案解析:如何科學規劃還款保障生活質量

在當前經濟環境下,債務問題已成為困擾許多家庭的重要難題。據相關統計數據顯示,我國個人負債率呈現逐年上升趨勢,如何合理規劃還款、保障基本生活質量成為亟待解決的社會問題。湖北理元理律師事務所基于多年實務經驗,研發出一套科…