使用 Taro 開發鴻蒙原生應用 —— 當 Taro 遇到純血鴻蒙

来源:https://www.cnblogs.com/Jcloud/archive/2023/12/13/17898628.html
-Advertisement-
Play Games

在今年 8 月的「2023年華為開發者大會(HDC.Together)」上,華為正式官宣「鴻蒙Next」,這個更新的版本將移除所有的 AOSP 代碼,徹底與 Android 切割,使其成為一個完全自主研發的操作系統,這將去掉 40%左右多餘的代碼,使系統變得更加簡潔、流暢。同時,會上也預告了將在明年... ...


純血鴻蒙即將到來

在今年 8 月的「2023年華為開發者大會(HDC.Together)」上,華為正式官宣「鴻蒙Next」,這個更新的版本將移除所有的 AOSP 代碼,徹底與 Android 切割,使其成為一個完全自主研發的操作系統,這將去掉 40%左右多餘的代碼,使系統變得更加簡潔、流暢。同時,會上也預告了將在明年 1 月份發佈面向所有開發者的預覽版,意味著還有一個多月純血的鴻蒙就要與所有開發者見面了,這不禁令人熱血沸騰,分外期待。

圖一·鴻蒙 Next 計劃

而近期關於鴻蒙的消息不斷,各大互聯網廠商,如阿裡、美團、去哪兒、小紅書等等,都已經官宣開展了開發 ArkUI 版原生鴻蒙應用的消息,同時也都在各個招聘渠道公開高薪招聘鴻蒙工程師和專家,仿佛偌大的鴻蒙生態即將全面鋪開,這對於對鴻蒙適配呈觀望態度的開發者來說無疑是巨大的強心劑,鴻蒙應用開發,似乎真的行了。

圖二·業界多家互聯網公司渲染開發鴻蒙原生應用

鴻蒙 ArkUI 是怎麼個事兒

好了,吹了一波鴻蒙的彩虹屁,讓我們來看看,鴻蒙應用開發是個怎麼個事兒。

從鴻蒙官網我們可以瞭解到,鴻蒙應用開發使用方舟框架,即 ArkUI 框架,它支持兩種方式,一種是使用 ArkTS,也就是聲明式的開發範式,另一種是使用 JS,即類 Web 的開發範式,讓我們來看看這兩種開發範式的區別。

  • 聲明式開發範式:採用基於 TypeScript 聲明式UI語法擴展而來的 ArkTS 語言,從組件、動畫和狀態管理三個維度提供 UI 繪製能力。
  • 類Web開發範式:採用經典的 HML、CSS、JavaScript 三段式開發方式,即使用 HML 標簽文件搭建佈局、使用 CSS 文件描述樣式、使用 JavaScript 文件處理邏輯。該範式更符合於 Web 前端開發者的使用習慣,便於快速將已有的 Web 應用改造成方舟開發框架應用。

圖三·ArkUI 兩種開發範式區別

可以看出,顯然,Web式的開發範式較貼近Web前端開發者的習慣,不過,它更適用於開發簡單的卡片應用,Taro框架已經提供了對這種開發範式的支持,可以查看 Taro && 鴻蒙、OpenHarmony開發文檔,然而,對於大型應用的開發,聲明式開發範式可能更為合適。

你會在下文的語法介紹中發現,聲明式開發範式類似於 Flutter 和 Compose 的開發方式,它對 Web前端開發者來說可能需要一定的學習成本。但鑒於其適用於構建更高複雜度的應用,並且理論上的性能優於Web 式開發範式,鴻蒙將主要推廣這種開發範式。

因此,對於我們這些有志於前端開發的青年來說,更應該關註鴻蒙的ArkTS——即聲明式開發範式。

圖四·ArkTS 架構

從聲明式範式的架構圖中可以看出,該架構主要採用了前後端分離的形式。在這個體系中,前端主要負責處理語法基礎規範和 UI 組件等內容,這部分主要體現在 DSL 層。另一方面,後端則使用 C++ 進行開發,主要負責支持前端的語法範式、組件以及渲染管線。

此外,語言運行時則使用了華為自研的方舟編譯器,支持 JS、ArkTS 和 C++ 的混寫。值得註意的是,方舟編譯器具備 AOT(Ahead-Of-Time,即預編譯)處理能力,這使得它能夠將應用代碼轉化為統一的位元組碼,然後再通過 AOT 轉化為機器碼,從而提升應用的性能。

在架構的下一層,系統會對接基於 Skia 的自繪渲染引擎。在這個過程中,終端的所有渲染需求都會統一提交給渲染引擎,從而使得渲染效果得到提升,這種設計理念不僅使系統在處理渲染任務時更加高效,同時也保證了渲染結果的高質量。

前面提到,聲明式範式與類 Web 的開發範式大有不同,我們可以從下麵這段代碼感受一下。

圖五· ArkTS 基礎語法

熟悉 Flutter 和 Compose 的朋友們可以發現,聲明式範式的 ArkTS 在 UI 描述上的寫法與他們非常相似,而這段 ArkTS 代碼也體現出與 Web 前端熟悉的 JS/TS 語言的不同,如定義自定義組件的 struct 關鍵字等等,在官方的解釋中,ArkTS 是基於 TS 進行擴展的超集,所以這不就是最熟悉的陌生人麽,這不禁讓我們前端覺得”我又行了“。

Taro 與 ArkTS 的聯動

由於聲明式範式與類 Web 範式天然的不同,對 Web 前端來說學習成本還是有的,而且,相應的研發生態也得從零開始建設,之前我們沉澱的大量 Web 生態肯定是沒法直接使用了,這對於前端轉型 ArkTS 開發來說還是存在挑戰的,那麼有沒有辦法可以使用 Web 的開發範式,來開發 ArkTS 應用呢?這似乎就進入了 Taro 最熟悉的領域了,以 Web 的開發範式來統一各端開發。

圖六·Taro 支持的平臺

前文提到,當前 Taro 已經支持了ArkUI 類 Web 的開發範式,這為我們沉澱了很多的經驗,當然,ArkTS 是一種全新的語法,為了實現對它的適配,我還是有不少的工作需要去做。

經過對 ArkTS 語法的分析,其 UI 描述結構讓人聯想到 Flutter 三棵樹中的 Widget Tree,那麼我們首先想到的解決方案就是,將 React/Vue 運行時產生的虛擬 DOM,以某種形式遞歸映射為 ArkTS 的自定義組件樹。基於 Taro 3.0 中適配小程式的經驗,我們想到可以在 ArkTS 環境中模擬 DOM/BOM API,將虛擬 DOM 基於 DOM/BOM API 構建為 Taro DOM 樹,然後再遞歸映射為自定義組件樹,接著再走鴻蒙渲染。

圖七·Taro 適配小程式/鴻蒙原理

在今年 8 月的「2023年華為開發者大會(HDC.Together)」上,Taro 團隊受邀分享了 Taro 適配鴻蒙 ArkUI 的技術方案,整體技術路線是受到認可的,同時在後續的適配過程中也得到了來自華為的技術支持,讓我們的適配工作得以順利進行。

圖八·Taro 在 HDC 上技術分享

目前,基於上述思路,Taro React 適配鴻蒙 ArkTS 的工作已經進入收尾階段,預計將在 12 月下旬發佈可用版本,想要瞭解進展的朋友可以查看這篇文檔,根據相應分支來 follow 我們的進展,有條件的朋友也可以自行嘗試調試。

圖九·使用 Taro 開發的應用 DEMO 編譯後的代碼

總結與展望

是不是有種突然結束,戛然而止的感覺?哈哈哈,本文是 「Taro 適配鴻蒙 ArkTS」系列文章的第一篇,算是先導預告片,在後續我們會陸續釋出其他文章,例如詳解 Taro 適配鴻蒙 ArkTS 原理、Taro 開發 ArkTS 應用最佳實踐、Taro 性能優化利器-半編譯技術介紹等等,向社區介紹 Taro 的最新成果。

鴻蒙 ArkUI 的整體設計筆者覺得是超前的,聲明式範式、自繪渲染等等,吸收了近幾年業界移動端技術的優點,如果開發調試、研發生態等配套設施能夠跟上業界領先的移動端開發解決方案,還是大有可為的,期待鴻蒙 Next 為國產操作系統書寫新的篇章。

作者:京東零售 李偉濤

來源:京東雲開發者社區 轉載請註明來源


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.背景概述 目前需要搭建一個從庫,由於單表數據量較大,時間比較有限,考慮到導入導出的時間,並且GreatSQL支持並行load data的功能,能夠加速數據的導入,因此決定使用 select into outfile 和 load data 的方式進行數據的遷移; 在數據導入完成後進行數據同步,從 ...
  • 原文地址:https://www.soughttech.com/front/article/7159/viewArticle 今天我偶然看到了參數slave_exec_mode。從手冊中的描述可以看出,該參數與MySQL複製有關。它是一個可以動態修改的變數。預設為STRICT mode(嚴格模式), ...
  • 1、首先安裝Android studio(跳過) Android Studio是由Google推出的官方集成開發環境(IDE),專門用於Android應用程式的開發。它是基於JetBrains的IntelliJ IDEA IDE構建的,提供了豐富的功能和工具,方便開發者創建、測試、調試和發佈Andr ...
  • 原文地址: Android MaterialButtonToggleGroup使用 - Stars-One的雜貨小窩 覺得單選框不好看,發現了一個Material里的單選按鈕組,感覺UI還不錯,記下使用 使用 效果: 使用前,得看看是否有material的依賴,如 implementation 'c ...
  • Chrome 在全球瀏覽器市場份額獨占 6 成,無論是對普通用戶還是開發者,都是電腦里的必備利器。Chrome 無論是在性能還是 UI 交互方面都非常出色,而 Chrome 擴展則為開發者提供了介面,讓開發者有能力自己編寫代碼使自己的 Chrome 更強大,更加定製化。 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 7個Js async/await高級用法 JavaScript的非同步編程已經從回調(Callback)演進到Promise,再到如今廣泛使用的async/await語法。後者不僅讓非同步代碼更加簡潔,而且更貼近同步代碼的邏輯與結構,大大增強 ...
  • 下述代碼為組件實現代碼複製即可食用,預設只展示 一屏數據加兩條 全選存在些許問題, 使用row-key時,如果行過多滾動時會不會很流暢 特別需要註意的是 行高必須要保持一致 <template> <div class="t-table" :id="TTableId"> <el-table ref=" ...
  • 我們是袋鼠雲數棧 UED 團隊,致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。 本文作者:貝兒 前言 本文中會提到很多目前數棧中使用的特定名詞,統一做下解釋描述 dt-common:每個子產品都會引入的公共包(類似 NPM 包) AppMenus: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...