ArkUI-X概覽
項(xiàng)目介紹
ArkUI是一套構(gòu)建分布式應(yīng)用的聲明式UI開發(fā)框架。它具備簡潔自然的UI信息語法、豐富的UI組件、多維的狀態(tài)管理,以及實(shí)時(shí)界面預(yù)覽等相關(guān)能力,幫助您提升應(yīng)用開發(fā)效率,并能在多種設(shè)備上實(shí)現(xiàn)生動而流暢的用戶體驗(yàn)。
ArkUI-X進(jìn)一步將ArkUI擴(kuò)展到了多個OS平臺:目前支持OpenHarmony、HarmonyOS、Android、 iOS,后續(xù)會逐步增加更多平臺支持。開發(fā)者基于一套主代碼,就可以構(gòu)建支持多平臺的精美、高性能應(yīng)用。
熟悉鴻蒙開發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
關(guān)鍵特征
ArKUI跨平臺框架關(guān)鍵特征如下:
- 簡潔自然的聲明式語法。
- 高效的渲染管線以及平臺一致性的渲染機(jī)制。
- 高效的方舟編譯器以及運(yùn)行時(shí)。
- 統(tǒng)一的跨平臺API能力集以及擴(kuò)展機(jī)制。
- 動態(tài)化特性
技術(shù)架構(gòu)
ArkUI跨平臺框架整體架構(gòu)如下圖所示。
簡介
本文檔描述ArkUI開發(fā)框架跨平臺運(yùn)行能力相關(guān)的總體技術(shù)方案。
范圍
ArkUI是面向全設(shè)備的UI開發(fā)框架,已通過OpenHarmony代碼倉開源,其關(guān)鍵組成包括:
- 開發(fā)模型;
- 應(yīng)用界面&交互;
- 擴(kuò)展機(jī)制-使能三方組件&平臺API擴(kuò)展機(jī)制。
ArkUI-X旨在將ArkUI開發(fā)框架擴(kuò)展至其他OS平臺(Android/iOS/Windows等),使開發(fā)者能夠基于ArkUI開發(fā)框架,復(fù)用絕大部分的應(yīng)用代碼(UI以及主要應(yīng)用邏輯),即可部署到不同OS平臺上。
假設(shè)和約束
本文提到的跨平臺是指UI部分的跨平臺,其UI代碼可以重用,其它應(yīng)用對平臺依賴的能力,需要應(yīng)用層面進(jìn)行適配,或通過JS API封裝機(jī)制(NAPI),進(jìn)行實(shí)現(xiàn)暴露到JS層。
涉及平臺能力的JS API(比如網(wǎng)絡(luò)、存儲等)請參考OpenHarmony中的定義,需要通過在不同平臺的封裝實(shí)現(xiàn)達(dá)到復(fù)用的目的。
本文主要是通用方案設(shè)計(jì)說明,并以Android平臺做為示例說明,其他平臺的基本設(shè)計(jì)思路類似,但相關(guān)設(shè)計(jì)需進(jìn)一步細(xì)化補(bǔ)充。
總體視圖
從設(shè)計(jì)之初,跨平臺就作為ArkUI最基本的設(shè)計(jì)目標(biāo)之一,當(dāng)前已支持基礎(chǔ)的跨平臺架構(gòu)。相關(guān)的設(shè)計(jì)思路如下:
- 采用 C++ 編寫整體后端引擎代碼,保持在多平臺的可移植性,最小化平臺依賴,降低平臺移植成本。
- 整體繪制采用自渲染機(jī)制,降低平臺依賴,同時(shí)進(jìn)一步提升繪制效果的一致性。
- 抽象出平臺適配層以及平臺橋接層,以便不同平臺的適配。
模塊功能介紹
ArkUI主要包括以下幾個模塊:
- 研發(fā)模型,兼容OpenHarmony應(yīng)用的Stage開發(fā)模型,支持基于ArkTS的聲明式開發(fā)范式,可跨平臺。
- 聲明式UI后端引擎,包括布局,渲染,C++ UI組件,事件機(jī)制等,可跨平臺。
- API擴(kuò)展機(jī)制,基于NAPI機(jī)制,可跨平臺。 不同平臺需要各自擴(kuò)展具體的API實(shí)現(xiàn)。
- 工具鏈/SDK, 工具鏈可跨平臺,SDK需基于不同平臺構(gòu)建。
另外,ArkUI依賴的ArkTS引擎以及圖形引擎,也可跨平臺。
ArkUI聲明式UI后端引擎,主要完成整體pipeline流程控制、視圖更新、布局系統(tǒng)、多頁面管理、事件分發(fā)和回調(diào)、焦點(diǎn)管理、動畫機(jī)制、主題機(jī)制、資源管理/緩存/provider等。 其中的UI組件,主要通過顯示相關(guān)組件細(xì)粒度化,動畫、事件、焦點(diǎn)等機(jī)制組件化,滿足適配不同前端所需要的靈活性。
整體的跨平臺需求,就是擴(kuò)展ArkUI開發(fā)框架到其他OS平臺,幫助開發(fā)者降低多平臺應(yīng)用開發(fā)成本。
通過ACE Tools命令行工具創(chuàng)建跨平臺應(yīng)用工程,開發(fā)者基于一套主代碼,就可以構(gòu)建支持多平臺的精美、高性能應(yīng)用。
方案設(shè)計(jì)
跨平臺應(yīng)用包結(jié)構(gòu)設(shè)計(jì)
跨平臺應(yīng)用目錄結(jié)構(gòu),包含一套為ArkUI-X開發(fā)者提供的應(yīng)用工程模板,提供構(gòu)建OpenHarmony應(yīng)用、Android應(yīng)用、iOS應(yīng)用的能力。應(yīng)用工程包結(jié)構(gòu)設(shè)計(jì)如下:
ArkUI-X應(yīng)用工程
├── .arkui-x
│ ├── android // Android平臺相關(guān)代碼
│ └── ios // iOS平臺相關(guān)代碼
├── .hvigor
├── .idea
├── AppScope
├── entry
├── hvigor
├── oh_modules
├── build-profile.json5
├── hvigorfile.ts
├── local.properties
└── oh-package.json5
ArkUI-X應(yīng)用目錄結(jié)構(gòu)設(shè)計(jì)思想是從OpenHarmony應(yīng)用工程原生支持跨平臺角度出發(fā),在OpenHarmony應(yīng)用工程之上疊加Android和iOS應(yīng)用工程,ArkTS代碼和resources資源編輯仍在OpenHarmony側(cè)完成,Native代碼在各自平臺應(yīng)用工程中完成。詳細(xì)包結(jié)構(gòu)設(shè)計(jì)。
ArkUI-X應(yīng)用工程結(jié)構(gòu)說明
簡介
本文檔配套ArkUI-X,將OpenHarmony ArkUI開發(fā)框架擴(kuò)展到不同的OS平臺,比如Android和iOS平臺,讓開發(fā)者基于ArkUI,可復(fù)用大部分的應(yīng)用代碼(UI以及主要應(yīng)用邏輯)并可以部署到相應(yīng)的OS平臺,降低跨平臺應(yīng)用開發(fā)成本。
應(yīng)用工程目錄結(jié)構(gòu)介紹
跨平臺應(yīng)用工程目錄結(jié)構(gòu),包含一套為ArkUI開發(fā)者提供的應(yīng)用工程模板,提供構(gòu)建OpenHarmony應(yīng)用,HarmonyOS應(yīng)用,Android應(yīng)用,iOS應(yīng)用的能力。
ArkUI-X應(yīng)用工程目錄結(jié)構(gòu)
├── .arkui-x
│ ├── android // Android平臺相關(guān)代碼
│ └── ios // iOS平臺相關(guān)代碼
├── AppScope
├── entry
├── hvigor
├── build-profile.json5
├── hvigorfile.ts
├── hvigorw
├── hvigorw.bat
├── local.properties
└── oh-package.json5
此應(yīng)用目錄結(jié)構(gòu)設(shè)計(jì)思想是從OpenHarmony應(yīng)用工程原生支持跨平臺角度出發(fā),在OpenHarmony應(yīng)用工程之上疊加Android和iOS應(yīng)用工程,ArkTS代碼和resources資源在OpenHarmony側(cè)完成編譯,Native代碼仍在各自平臺應(yīng)用工程中完成編譯。
編譯構(gòu)建說明
- ArkTS源碼
ArkTS源碼通過OpenHarmony SDK工具鏈生成abc(Ark Byte Code),并分別拷貝到Android和iOS應(yīng)用工程,作為平臺應(yīng)用資源進(jìn)行管理。
- ArkUI應(yīng)用資源
ArkUI Resources資源也通過OpenHarmony SDK工具鏈進(jìn)行編譯,編譯后的ArkUI資源分別拷貝到Android和iOS應(yīng)用工程,作為平臺應(yīng)用資源進(jìn)行管理。
- ArkUI框架資源
ArkUI框架資源隨ArkUI-X SDK進(jìn)行發(fā)布,應(yīng)用構(gòu)建時(shí)會自動打包到ArkUI-X應(yīng)用中,可保證ArkUI-X應(yīng)用在各平臺上UX渲染一致性。
綜上所述,Android平臺上通過assets管理ArkTS編譯產(chǎn)物、ArkUI應(yīng)用資源和ArkUI框架資源,iOS平臺上通過Bundle Resources管理ArkTS編譯產(chǎn)物、ArkUI應(yīng)用資源和ArkUI框架資源。
Android應(yīng)用工程結(jié)構(gòu)
ArkUI-X Android應(yīng)用工程
├── app
│ ├── libs
│ │ ├── arkui_android_adapter.jar // ArkUI-X跨平臺適配層,在SDK中發(fā)布
│ │ └── arm64-v8a
│ │ └── libarkui_android.so // ArkUI-X跨平臺引擎庫,在SDK中發(fā)布
│ │ └── libhilog.so // ArkUI-X日志庫,在SDK中發(fā)布
│ │ └── libresourcemanager.so // ArkUI-X資源管理庫,在SDK中發(fā)布
│ ├── src
│ │ ├── androidTest
│ │ ├── main
│ │ │ ├── assets
│ │ │ │ └── arkui-x // ArkUI應(yīng)用編譯后的字節(jié)碼文件和Resources,作為資源文件存放在assets/arkui-x中
│ │ │ │ ├── entry // ArkUI單個模塊的編譯結(jié)果
│ │ │ │ │ ├── ets // ArkUI單個模塊代碼的編譯結(jié)果:包括字節(jié)碼文件以及sourceMap文件
│ │ │ │ │ │ ├── sourceMaps.map
│ │ │ │ │ │ └── modules.abc
│ │ │ │ │ ├── resources.index // ArkUI單個模塊資源的編譯結(jié)果:resources資源的編譯結(jié)果
│ │ │ │ │ ├── resources // resources資源中的rawfile資源,不會進(jìn)行編譯。
│ │ │ │ │ └── module.json
│ │ │ │ ├── entry_test // ohosTest,僅僅Debug模式構(gòu)建包含。
│ │ │ │ └── systemres // ArkUI框架自帶的系統(tǒng)資源
│ │ │ ├── java/com/example/mayapp
│ │ │ │ ├── MyApplication.java // 基于StageApplication擴(kuò)展MyApplication
│ │ │ │ └── EntryEntryAbilityActivity.java // 基于StageActivity擴(kuò)展EntryEntryAbilityActivity
│ │ │ ├── res
│ │ │ └── AndroidManifest.xml
│ │ └── test
│ ├── build.gradle
│ └── proguard-rules.pro
├── gradle/wrapper
├── build.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
iOS應(yīng)用工程結(jié)構(gòu)
ArkUI-X iOS應(yīng)用工程
├── app.xcodeproj
│ ├── project.xcworkspace
│ ├── xcuserdata
│ └── project.pbxproj
├── app
│ ├── Assets.xcassets
│ ├── Base.Iproj
│ ├── AppDelegate.h
│ ├── AppDelegate.m // 應(yīng)用入口, 驅(qū)動StageApplication的生命周期
│ ├── EntryEntryAbilityViewController.h
│ ├── EntryEntryAbilityViewController.m // 基于StageViewController擴(kuò)展EntryEntryViewController
│ ├── Info.plist
│ └── main.m
├── arkui-x // ArkUI應(yīng)用編譯后的字節(jié)碼文件和Resources,作為資源文件存放在assets/arkui-x中
│ ├── entry // ArkUI單個模塊的編譯結(jié)果
│ │ ├── ets // ArkUI單個模塊代碼的編譯結(jié)果:包括字節(jié)碼文件以及sourceMap文件
│ │ │ ├── sourceMaps.map
│ │ │ └── modules.abc
│ │ ├── resources.index // ArkUI單個模塊資源的編譯結(jié)果:resources資源的編譯結(jié)果
│ │ ├── resources // resources資源中的rawfile資源,不會進(jìn)行編譯。
│ │ └── module.json
│ ├── entry_test // ohosTest,僅僅Debug模式構(gòu)建包含。
│ └── systemres // ArkUI框架自帶的系統(tǒng)資源
└── frameworks // ArkUI跨平臺Framework動態(tài)庫:包含ArkUI-X的框架以及插件
跨平臺框架構(gòu)建系統(tǒng)
ArkUI-X編譯構(gòu)建提供了一套基于GN和Ninja的編譯構(gòu)建框架,基礎(chǔ)構(gòu)建基于OpenHarmony的build倉,并在OpenHarmony構(gòu)建基礎(chǔ)上新增Android和iOS編譯工具鏈,以支持ArkUI跨平臺SDK編譯輸出。
跨平臺SDK結(jié)構(gòu)設(shè)計(jì)
跨平臺SDK主要用于支持ACE Tools命令行跨平臺應(yīng)用構(gòu)建和DevEco StudioAndroid StudioXcode集成跨平臺應(yīng)用開發(fā)。內(nèi)容范圍主要包括:
- 提供ArkUI跨平臺開發(fā)框架基礎(chǔ)引擎動態(tài)庫,API插件動態(tài)庫。
- 提供ArkUI跨平臺應(yīng)用構(gòu)建命令行工具。
- 提供ArkUI組件渲染一致性系統(tǒng)資源包,應(yīng)用資源編譯工具。
ArkUI-X SDK組成結(jié)構(gòu)如下:
arkui-x
├── engine // ArkUI-X的引擎庫
│ ├── lib // ArkUI-X的引擎庫:包括Android平臺及架構(gòu)的動態(tài)庫
│ ├── framework // ArkUI-X的引擎庫:包括iOS平臺及架構(gòu)的Framework庫
│ ├── xcframework // ArkUI-X的引擎庫:包括iOS平臺及架構(gòu)的XCFramework庫
│ ├── ets // ArkUI-X增量接口,比如:@arkui-x.bridge
│ ├── apiConfig.json // engine庫配置文件,用于IDE和ACE Tools解析,以支持應(yīng)用構(gòu)建按需打包。
│ └── systemres // ArkUI-X框架自帶的資源
├── plugins // ArkUI-X官方提供的插件庫
│ ├── component // ArkUI組件插件庫,apiConfig.json
│ └── api // @ohos接口插件庫,apiConfig.json
├── toolchains // ArkUI-X應(yīng)用開發(fā)工具,比如:ACE Tools。
├── sdkConfig.json // 增量d.ts路徑和接口前綴配置
├── arkui-x.json // SDK管理配置,流水線自動生成
└── NOTICE.txt
操作系統(tǒng)抽象層
基于C++實(shí)現(xiàn)的OS Abstract Layer (下文縮寫為OSAL),屏蔽不同平臺的OS相關(guān)的實(shí)現(xiàn),主要包含功能列表:
- 日志、Trace抽象層
- 網(wǎng)絡(luò)接口抽象層
- 文件/資源讀寫抽象層
- 基礎(chǔ)線程抽象層
- 系統(tǒng)資源管理抽象及實(shí)現(xiàn)
- 系統(tǒng)Prop配置讀取抽象層
- 打點(diǎn)能力抽象層
以Log調(diào)用流程為例,整體交互流程如下:
如上述流程,Core模塊直接使用Base提供的接口,Base模塊對接口進(jìn)行定義,對于依賴平臺的能力,在編譯期就選擇了對應(yīng)OS的平臺抽象層OSAL。運(yùn)行時(shí),直接通過OSAL的實(shí)現(xiàn),調(diào)用到具體平臺相關(guān)的庫中。
跨平臺啟動入口
開發(fā)框架對應(yīng)平臺語言實(shí)現(xiàn)的Entrance,提供不同平臺的基礎(chǔ)入口環(huán)境,跨平臺啟動入口功能列表:
- 提供多個平臺的加載入口,如OpenHarmony側(cè)為一個Ability,Android側(cè)為一個Activity。
- 對接不同平臺的生命周期、事件輸入、Vsync。
- 對接不同平臺的窗口系統(tǒng)、硬件渲染加速。
- 對接不同平臺的應(yīng)用信息。
- 不同平臺的原生語言轉(zhuǎn)換到統(tǒng)一的C++后端,公共代碼復(fù)用。
以Android的啟動流程為例,整體交互流程如下:
Stage模型下,Ability聲明周期的入口為StageAbility,生命周期一直會通知到JsAbility,執(zhí)行用戶的生命周期回調(diào)方法,UI的頁面是在onWindowStageCreated
的生命周期中,調(diào)用Window的loadContent
接口進(jìn)行加載,創(chuàng)建ArkUI的實(shí)例并初始化渲染管線,將頁面進(jìn)行渲染顯示。
跨平臺能力橋接
跨平臺能力橋接包含框架內(nèi)部需要用到的不同的平臺能力模塊,如:剪切板、輸入法、視頻等,提供基礎(chǔ)能力模塊的定義,不同平臺按照定義實(shí)現(xiàn)對應(yīng)的功能模塊。功能列表:
- 剪切板抽象接口,及不同平臺的實(shí)現(xiàn)。
- 輸入法抽象接口,及不同平臺的實(shí)現(xiàn)。
- 視頻媒體等抽象接口,及不同平臺的實(shí)現(xiàn)。
- 其它框架內(nèi)部需要用到的不同的平臺能力模塊。
以剪切板ClipBoard為例,整體交互流程如下:
如上圖,例如在框架核心層的TextField組件中,需要用到剪切板的能力,通過Proxy創(chuàng)建具體的ClipBoard實(shí)現(xiàn),返回抽象的ClipBoard接口。在組件實(shí)現(xiàn)層即可實(shí)現(xiàn)平臺無關(guān)的調(diào)用。以Android平臺為例,GetData的調(diào)用會通過JNI調(diào)用到平臺實(shí)現(xiàn)的Plugin中,然后Plugin通過訪問剪切板服務(wù)實(shí)現(xiàn)對應(yīng)的功能。
API擴(kuò)展機(jī)制
1、JS API擴(kuò)展機(jī)制,用于Native接口能力暴露到JS層,該機(jī)制直接復(fù)用OpenHarmony上的統(tǒng)一封裝機(jī)制,擴(kuò)展API (C++實(shí)現(xiàn)),并實(shí)現(xiàn)部分內(nèi)置API,NAPI的整體結(jié)構(gòu)如下圖。
對于不同平臺, JS API需要遵循OpenHarmony的API定義 ,在不同平臺上通過API擴(kuò)展機(jī)制進(jìn)行擴(kuò)展。
跨平臺命令行工具ACE Tools
ACE Tools命令行工具作為ArkUI-X跨平臺應(yīng)用構(gòu)建工具,具有創(chuàng)建/編譯/安裝/運(yùn)行調(diào)試OpenHarmony、Android和iOS應(yīng)用的能力。
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
ACE Tools代碼結(jié)構(gòu)
cli
├─node_modules
├─src
│ ├─ace-build // 構(gòu)建跨平臺應(yīng)用安裝包
│ │ ├─ace-compiler
│ │ └─ace-packager
│ ├─ace-check // 查驗(yàn)ArkUI跨平臺應(yīng)用開發(fā)依賴的的庫和工具鏈?zhǔn)欠裢暾?/span>
│ ├─ace-clean // 清理跨平臺應(yīng)用編譯結(jié)果
│ ├─ace-config // 配置ArkUI跨平臺應(yīng)用開發(fā)環(huán)境
│ ├─ace-create // 創(chuàng)建ArkUI跨平臺應(yīng)用工程
│ │ ├─aar
│ │ ├─ability
│ │ ├─component
│ │ ├─framework
│ │ ├─module
│ │ └─project
│ ├─ace-devices // 列出當(dāng)前PC所鏈接的各平臺設(shè)備
│ ├─ace-install // 將跨平臺應(yīng)用安裝到連接的設(shè)備上
│ ├─ace-launch // 在設(shè)備上運(yùn)行跨平臺應(yīng)用
│ ├─ace-log // 滾動展示正在運(yùn)行的跨平臺應(yīng)用的日志
│ ├─ace-run // 運(yùn)行跨平臺應(yīng)用包
│ ├─ace-test // 執(zhí)行測試代碼
│ ├─ace-uninstall // 將跨平臺應(yīng)用從設(shè)備上卸載
│ ├─bin // 命令行入口腳本
│ └─util
└─templates // 跨平臺應(yīng)用工程模板
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2321瀏覽量
42749 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3665瀏覽量
16161
發(fā)布評論請先 登錄
相關(guān)推薦
評論