<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙開發ArkUI-X基礎知識:【ArkUI跨平臺設計總體說明】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-24 15:41 ? 次閱讀

ArkUI跨平臺設計總體說明

簡介

本文檔描述ArkUI開發框架跨平臺運行能力相關的總體技術方案。

范圍

ArkUI是面向全設備的UI開發框架,已通過OpenHarmony代碼倉開源,其關鍵組成包括:

  • 開發模型;
  • 應用界面&交互;
  • 擴展機制-使能三方組件&平臺API擴展機制。
  • 開發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

ArkUI-X旨在將ArkUI開發框架擴展至其他OS平臺(Android/iOS/Windows等),使開發者能夠基于ArkUI開發框架,復用絕大部分的應用代碼(UI以及主要應用邏輯),即可部署到不同OS平臺上。

假設和約束

本文提到的跨平臺是指UI部分的跨平臺,其UI代碼可以重用,其它應用對平臺依賴的能力,需要應用層面進行適配,或通過JS API封裝機制(NAPI),進行實現暴露到JS層。

涉及平臺能力的JS API(比如網絡、存儲等)請參考OpenHarmony中的定義,需要通過在不同平臺的封裝實現達到復用的目的。

本文主要是通用方案設計說明,并以Android平臺做為示例說明,其他平臺的基本設計思路類似,但相關設計需進一步細化補充。

總體視圖

從設計之初,跨平臺就作為ArkUI最基本的設計目標之一,當前已支持基礎的跨平臺架構。相關的設計思路如下:

  1. 采用 C++ 編寫整體后端引擎代碼,保持在多平臺的可移植性,最小化平臺依賴,降低平臺移植成本。
  2. 整體繪制采用自渲染機制,降低平臺依賴,同時進一步提升繪制效果的一致性。
  3. 抽象出平臺適配層以及平臺橋接層,以便不同平臺的適配。

模塊功能介紹

ArkUI主要包括以下幾個模塊:

  1. 研發模型,兼容OpenHarmony應用的Stage開發模型,支持基于ArkTS的聲明式開發范式,可跨平臺。
  2. 聲明式UI后端引擎,包括布局,渲染,C++ UI組件,事件機制等,可跨平臺。
  3. API擴展機制,基于NAPI機制,可跨平臺。 不同平臺需要各自擴展具體的API實現。
  4. 工具鏈/SDK, 工具鏈可跨平臺,SDK需基于不同平臺構建。

另外,ArkUI依賴的ArkTS引擎以及圖形引擎,也可跨平臺。

ArkUI聲明式UI后端引擎,主要完成整體pipeline流程控制、視圖更新、布局系統、多頁面管理、事件分發和回調、焦點管理、動畫機制、主題機制、資源管理/緩存/provider等。 其中的UI組件,主要通過顯示相關組件細粒度化,動畫、事件、焦點等機制組件化,滿足適配不同前端所需要的靈活性。

整體的跨平臺需求,就是擴展ArkUI開發框架到其他OS平臺,幫助開發者降低多平臺應用開發成本。

通過ACE Tools命令行工具創建跨平臺應用工程,開發者基于一套主代碼,就可以構建支持多平臺的精美、高性能應用。

方案設計

跨平臺應用包結構設計

跨平臺應用目錄結構,包含一套為ArkUI-X開發者提供的應用工程模板,提供構建OpenHarmony應用、Android應用、iOS應用的能力。應用工程包結構設計如下:

ArkUI-X應用工程
  ├── .arkui-x
  │   ├── android                 // Android平臺相關代碼
  │   └── ios                     // iOS平臺相關代碼
  ├── .hvigor
  ├── .idea
  ├── AppScope
  ├── entry
  ├── hvigor
  ├── oh_modules
  ├── build-profile.json5
  ├── hvigorfile.ts
  ├── local.properties
  └── oh-package.json5

ArkUI-X應用目錄結構設計思想是從OpenHarmony應用工程原生支持跨平臺角度出發,在OpenHarmony應用工程之上疊加Android和iOS應用工程,ArkTS代碼和resources資源編輯仍在OpenHarmony側完成,Native代碼在各自平臺應用工程中完成。

跨平臺框架構建系統

ArkUI-X編譯構建提供了一套基于GN和Ninja的編譯構建框架,基礎構建基于OpenHarmony的build倉,并在OpenHarmony構建基礎上新增Android和iOS編譯工具鏈,以支持ArkUI跨平臺SDK編譯輸出。

跨平臺SDK結構設計

跨平臺SDK主要用于支持ACE Tools命令行跨平臺應用構建和DevEco StudioAndroid StudioXcode集成跨平臺應用開發。內容范圍主要包括:

  1. 提供ArkUI跨平臺開發框架基礎引擎動態庫,API插件動態庫。
  2. 提供ArkUI跨平臺應用構建命令行工具。
  3. 提供ArkUI組件渲染一致性系統資源包,應用資源編譯工具。

ArkUI-X SDK組成結構如下:

arkui-x
  ├── engine                   // ArkUI-X的引擎庫
  │   ├── lib                  // ArkUI-X的引擎庫:包括Android平臺及架構的動態庫
  │   ├── framework            // ArkUI-X的引擎庫:包括iOS平臺及架構的Framework庫
  │   ├── xcframework          // ArkUI-X的引擎庫:包括iOS平臺及架構的XCFramework庫
  │   ├── ets                  // ArkUI-X增量接口,比如:@arkui-x.bridge
  │   ├── apiConfig.json       // engine庫配置文件,用于IDE和ACE Tools解析,以支持應用構建按需打包。
  │   └── systemres            // ArkUI-X框架自帶的資源
  ├── plugins                  // ArkUI-X官方提供的插件庫
  │   ├── component            // ArkUI組件插件庫,apiConfig.json
  │   └── api                  // @ohos接口插件庫,apiConfig.json
  ├── toolchains               // ArkUI-X應用開發工具,比如:ACE Tools。
  ├── sdkConfig.json           // 增量d.ts路徑和接口前綴配置
  ├── arkui-x.json             // SDK管理配置,流水線自動生成
  └── NOTICE.txt

操作系統抽象層

基于C++實現的OS Abstract Layer (下文縮寫為OSAL),屏蔽不同平臺的OS相關的實現,主要包含功能列表:

  • 日志、Trace抽象層
  • 網絡接口抽象層
  • 文件/資源讀寫抽象層
  • 基礎線程抽象層
  • 系統資源管理抽象及實現
  • 系統Prop配置讀取抽象層
  • 打點能力抽象層

以Log調用流程為例,整體交互流程如下:

如上述流程,Core模塊直接使用Base提供的接口,Base模塊對接口進行定義,對于依賴平臺的能力,在編譯期就選擇了對應OS的平臺抽象層OSAL。運行時,直接通過OSAL的實現,調用到具體平臺相關的庫中。

跨平臺啟動入口

開發框架對應平臺語言實現的Entrance,提供不同平臺的基礎入口環境,跨平臺啟動入口功能列表:

  • 提供多個平臺的加載入口,如OpenHarmony側為一個Ability,Android側為一個Activity。
  • 對接不同平臺的生命周期、事件輸入、Vsync。
  • 對接不同平臺的窗口系統、硬件渲染加速。
  • 對接不同平臺的應用信息。
  • 不同平臺的原生語言轉換到統一的C++后端,公共代碼復用。

以Android的啟動流程為例,整體交互流程如下:

Stage模型下,Ability聲明周期的入口為StageAbility,生命周期一直會通知到JsAbility,執行用戶的生命周期回調方法,UI的頁面是在onWindowStageCreated的生命周期中,調用Window的loadContent接口進行加載,創建ArkUI的實例并初始化渲染管線,將頁面進行渲染顯示。

跨平臺能力橋接

跨平臺能力橋接包含框架內部需要用到的不同的平臺能力模塊,如:剪切板、輸入法、視頻等,提供基礎能力模塊的定義,不同平臺按照定義實現對應的功能模塊。功能列表:

  • 剪切板抽象接口,及不同平臺的實現。
  • 輸入法抽象接口,及不同平臺的實現。
  • 視頻媒體等抽象接口,及不同平臺的實現。
  • 其它框架內部需要用到的不同的平臺能力模塊。

以剪切板ClipBoard為例,整體交互流程如下:

如上圖,例如在框架核心層的TextField組件中,需要用到剪切板的能力,通過Proxy創建具體的ClipBoard實現,返回抽象的ClipBoard接口。在組件實現層即可實現平臺無關的調用。以Android平臺為例,GetData的調用會通過JNI調用到平臺實現的Plugin中,然后Plugin通過訪問剪切板服務實現對應的功能。

API擴展機制

1、JS API擴展機制,用于Native接口能力暴露到JS層,該機制直接復用OpenHarmony上的統一封裝機制,擴展API (C++實現),并實現部分內置API,NAPI的整體結構如下圖。

對于不同平臺, JS API需要遵循OpenHarmony的API定義 ,在不同平臺上通過API擴展機制進行擴展。

跨平臺命令行工具ACE Tools

ACE Tools命令行工具作為ArkUI-X跨平臺應用構建工具,具有創建/編譯/安裝/運行調試OpenHarmony、Android和iOS應用的能力。

搜狗高速瀏覽器截圖20240326151450.png

`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

ACE Tools代碼結構
 cli
  ├─node_modules
  ├─src
  │  ├─ace-build                 // 構建跨平臺應用安裝包
  │  │  ├─ace-compiler
  │  │  └─ace-packager
  │  ├─ace-check                 // 查驗ArkUI跨平臺應用開發依賴的的庫和工具鏈是否完整
  │  ├─ace-clean                 // 清理跨平臺應用編譯結果
  │  ├─ace-config                // 配置ArkUI跨平臺應用開發環境
  │  ├─ace-create                // 創建ArkUI跨平臺應用工程
  │  │  ├─aar
  │  │  ├─ability
  │  │  ├─component
  │  │  ├─framework
  │  │  ├─module
  │  │  └─project
  │  ├─ace-devices               // 列出當前PC所鏈接的各平臺設備
  │  ├─ace-install               // 將跨平臺應用安裝到連接的設備上
  │  ├─ace-launch                // 在設備上運行跨平臺應用
  │  ├─ace-log                   // 滾動展示正在運行的跨平臺應用的日志
  │  ├─ace-run                   // 運行跨平臺應用包
  │  ├─ace-test                  // 執行測試代碼
  │  ├─ace-uninstall             // 將跨平臺應用從設備上卸載
  │  ├─bin                       // 命令行入口腳本
  │  └─util
  └─templates                    // 跨平臺應用工程模板

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ui
    ui
    +關注

    關注

    0

    文章

    201

    瀏覽量

    21228
  • 鴻蒙
    +關注

    關注

    55

    文章

    1966

    瀏覽量

    42222
  • OpenHarmony
    +關注

    關注

    24

    文章

    3443

    瀏覽量

    15331
收藏 人收藏

    評論

    相關推薦

    鴻蒙開發學習:初探【ArkUI-X

    **簡單來說,ArkTS + ArkUI-X 對標的框架為 flutter,一次代碼,編譯為 native 全平臺運行**
    的頭像 發表于 05-13 15:58 ?466次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>學習:初探【<b class='flag-5'>ArkUI-X</b>】

    鴻蒙ArkUI-X平臺開發:【SDK目錄結構介紹】

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發框架擴展到不同的OS平臺,比如Android和iOS平臺,讓
    的頭像 發表于 05-20 16:28 ?495次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>跨<b class='flag-5'>平臺</b><b class='flag-5'>開發</b>:【SDK目錄結構介紹】

    鴻蒙ArkUI-X平臺開發:【bility開發說明(Android平臺)】

    本文介紹將ArkUI框架擴展到Android平臺所需要的必要的類及其使用說明,開發者基于OpenHarmony,可復用大部分的應用代碼(生命周期等)并可以部署到Android
    的頭像 發表于 05-21 10:54 ?498次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>跨<b class='flag-5'>平臺</b><b class='flag-5'>開發</b>:【bility<b class='flag-5'>開發</b><b class='flag-5'>說明</b>(Android<b class='flag-5'>平臺</b>)】

    鴻蒙ArkUI-X平臺開發:【bility開發說明(iOS端)】

    本文介紹將ArkUI框架擴展到iOS平臺所需要的必要類及其使用說明,開發者基于OpenHarmony,可復用大部分的應用代碼(生命周期等)并可以部署到iOS
    的頭像 發表于 05-21 14:35 ?417次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>跨<b class='flag-5'>平臺</b><b class='flag-5'>開發</b>:【bility<b class='flag-5'>開發</b><b class='flag-5'>說明</b>(iOS端)】

    鴻蒙開發ArkUI-X基礎知識:【ArkUI代碼工程及構建介紹】

    ArkUI作為OpenHarmony的默認開發框架,在本項目(ArkUI-X)中需要做到一套代碼同時支持多平臺構建,所以會采取共倉開發的方式
    的頭像 發表于 05-25 16:45 ?1653次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>基礎知識</b>:【<b class='flag-5'>ArkUI</b>代碼工程及構建介紹】

    ArkUI-X開發指南:【SDK配置和構建說明

    ArkUI-X SDK是ArkUI-X開源項目的編譯產物,可將ArkUI-X SDK集成到現有Android和iOS應用工程中,使開發者基于一套ArkTS主代碼,就可以構建支持多
    的頭像 發表于 05-25 16:48 ?1844次閱讀
    <b class='flag-5'>ArkUI-X</b><b class='flag-5'>開發</b>指南:【SDK配置和構建<b class='flag-5'>說明</b>】

    資訊速遞 | ArkUI-X 預覽版已正式開源!

    OpenHarmony項目群技術指導委員會(以下簡稱“TSC”)-平臺應用開發框架TSG所孵化項目 —— ArkUI-X,近期已正式開源 ,開發
    發表于 08-11 16:10

    資訊速遞 | ArkUI-X 預覽版已正式開源!

    OpenHarmony項目群技術指導委員會(以下簡稱“TSC”)-跨平臺應用開發框架TSG所孵化項目 —— ArkUI-X,近期已正式開源 ,開發者基于一套主代碼,就可以將在OpenH
    的頭像 發表于 08-22 22:19 ?575次閱讀
    資訊速遞 | <b class='flag-5'>ArkUI-X</b> 預覽版已正式開源!

    鴻蒙平臺框架:【ArkUi-X】創建工程

    鴻蒙推出了鴻ArkUi-X 框架所以就寫個文章分享一下
    的頭像 發表于 05-13 17:48 ?285次閱讀
    <b class='flag-5'>鴻蒙</b>跨<b class='flag-5'>平臺</b>框架:【<b class='flag-5'>ArkUi-X</b>】創建工程

    鴻蒙ArkUI-X平臺技術:【開發準備】

    本文檔適用于ArkUI平臺應用開發的初學者。通過開發環境搭建、應用工程創建、編譯和運行,熟悉ArkUI
    的頭像 發表于 05-24 10:40 ?160次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>跨<b class='flag-5'>平臺</b>技術:【<b class='flag-5'>開發</b>準備】

    鴻蒙ArkUI-X平臺技術:【開發初體驗】

    在DevEco Studio中導入ArkUI-X Sample,快速創建跨平臺工程。
    的頭像 發表于 05-17 15:54 ?194次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>跨<b class='flag-5'>平臺</b>技術:【<b class='flag-5'>開發</b>初體驗】

    鴻蒙ArkUI-X平臺開發:【 編寫第一個ArkUI-X應用】

    通過構建一個簡單的ArkUI頁面跳轉示例,快速了解資源創建引用,路由代碼編寫和UI布局編寫等應用開發流程。
    的頭像 發表于 05-21 17:36 ?215次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>跨<b class='flag-5'>平臺</b><b class='flag-5'>開發</b>:【 編寫第一個<b class='flag-5'>ArkUI-X</b>應用】

    鴻蒙ArkUI-X平臺開發:【 應用工程結構說明

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發框架擴展到不同的OS平臺,比如Android和iOS平臺,讓
    的頭像 發表于 05-19 21:05 ?136次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>跨<b class='flag-5'>平臺</b><b class='flag-5'>開發</b>:【 應用工程結構<b class='flag-5'>說明</b>】

    鴻蒙ArkUI-X跨語言調用說明:【平臺橋接(@arkui-x.bridge)】

    平臺橋接用于客戶端(ArkUI)和平臺(Android或iOS)之間傳遞消息,即用于ArkUI平臺雙向數據傳遞、
    的頭像 發表于 05-21 15:09 ?152次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>跨語言調用<b class='flag-5'>說明</b>:【<b class='flag-5'>平臺</b>橋接(@<b class='flag-5'>arkui</b>-x.bridge)】

    鴻蒙ArkUI-X框架開發:【開發準備】

    本文檔適用于ArkUI-X框架開發的初學者。通過環境搭建、代碼下載、代碼編譯、API擴展和使用,快速了解跨平臺項目開發流程。
    的頭像 發表于 05-23 21:02 ?131次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>框架<b class='flag-5'>開發</b>:【<b class='flag-5'>開發</b>準備】
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>