初識鴻蒙跨平臺開發框架ArkUI-X

HarmonyOS是一款面向萬物互聯時代的、全新的分布式操作系統。在傳統的單設備系統能力基礎上,HarmonyOS提出了基于同一套系統能力、適配多種終端形態的分布式理念,能夠支持手機、平板、智能穿戴、智慧屏、車機等多種終端設備,提供全場景(移動辦公、運動健康、社交通信、媒體娛樂等)業務能力。

ArkTS 是華為自研的開發語言。它在TypeScript(簡稱TS)的基礎上,匹配 ArkUI 框架,擴展了聲明式 UI 、狀態管理等相應的能力,讓開發者以更簡潔、更自然的方式開發跨端應用。關于ArkTS,可以參考:ArkTS基礎知識

ArkUI-X 進一步將 ArkUI 擴展到了多個 OS 平臺:目前支持 OpenHarmony、HarmonyOS、Android、iOS,后續會逐步增加更多平臺支持。到時,開發者就可以基于一套主代碼,就能夠構建支持多平臺應用。以下是ArkUI跨平臺框架整體架構的示意圖。

image.png

一、環境搭建

1.1 下載IDE

DevEco Studio

首先,需要下載支持 ArkUI-X 套件的華為開發工具 DevEco ,版本為 4.0 以上,目前只能下載預覽版進行體驗。下載地址:

軟件版本備注
OpenHarmony4.0 Beta2NA
Public SDKOhos_sdk_public 4.0.9.6 (API Version 10 Beta2)面向應用開發者提供,不包含需要使用系統權限的系統接口。通過DevEco Studio默認獲取的SDK為Public SDK。
HUAWEI DevEco Studio(可選)4.0 Beta2OpenHarmony應用開發推薦使用。獲取方式:Windows(64-bit)SHA256校驗碼:ae9b228fb1f79e99441e10bdcf347ebfc42266be8b170bbce3c9764ba32d82a4Mac(X86)SHA256校驗碼:5c9afc5b1262868b58376155f1e8576d33c1ade8b01091edc4d7d397cd34026cMac(ARM)SHA256校驗碼:ea6c98cafd5036e4a6fd46b0b1cde3a306953b1eef423d5940f1af7c632205d6
HUAWEI DevEco Device Tool(可選)4.0 Beta1OpenHarmony智能設備集成開發環境推薦使用。獲取方式:點擊跳轉至下載頁面

下載完成之后,安裝就可以了,這東西是基于 IDEA 做的,和 Android Studio 體驗差不多。

Android Studio

由于ArkUI-X 可以將 ArkTS 項目編譯為一個 Android 項目,需要需要使用 Android Studio 來進行打包。Android Studio 安裝方法就不贅述了。下載地址:

Download Android Studio & App Tools - Android Developers (google.cn)

同樣,我們可以需要搭建iOS的原生環境,下載Xcode等,不再過多的說明。

1.2 安裝OpenHarmony SDK

安裝完后,當我們啟動DevEco Studio工具的時候,系統提示我們需要安裝Node,這是因為HarmonyOS應用程序也支持使用JS進行開發,我們只需要按照提示進行安裝即可,如下圖。

image.png

相關依賴下載完成,進入 IDE 首頁后,先不急著創建項目,需要先安裝 OpenHarmony SDK,類似于Android的SDK。

image.png

然后,打開Preferences面板,選擇OpenHarmony,如下圖。

image.png

選擇后需要指定一下路徑,然后它會進行一些依賴下載,等它下載完成。下載完成后,勾選 API Version 10 相關的選項,點擊確定等它下載完成。

image.png

1.3 安裝 ArkUI-X SDK

OpenHarmony SDK 安裝完成后,接下來還需要安裝 ArkUI-X SDK,了。同樣的在設置里面選擇 ArkUI-X ,指定路徑,等待下載完成。

image.png

1.4 環境變量

ArkUI-X 需要設置好相應的環境變量才能正確使用。若缺少相關環境變量,會有彈窗提示。所以在裝好 Android Studio 后,需要將 Android SDK 添加至環境變量中(如果之前添加過,就不用管了):

Windows

在此【電腦】 >【 屬性】 > 【高級系統設置】 > 【高級】 > 【環境變量】中,新建系統變量。變量名為ANDROID_HOME,變量值為Android SDK安裝目錄。
?
image.png

macOS

打開終端工具,執行以下命令,打開.bash_profile文件,然后配置Android SDK安裝目錄,命令如下:

vi ~/.bash_profile
export ANDROID_HOME=/Users/xxx/Library/Android/sdk
source ~/.bash_profile

環境變量配置完成后,關閉并重啟DevEco Studio。

二、快速上手

2.1 創建工程

首先,我們創建一個普通的Harmony OS工程,如下圖。

image.png

然后,按照提示填寫工程名、包名、編譯環境等內容。

image.png
在創建了一個 Harmon OS 工程后,我們就進入到了 IDE 的實際界面,在此就可以找到創建 OpenHarmony 工程的選項。為什么要 OpenHarmony 呢?首先要認識到 HarmonOS 和 OpenHarmony 的區別。

這個具體區別大家可以自己去對比下工程結構,可能會被當做引戰引起某些人不滿意,當然我們可以理解為是借鑒,此處只說明一點 ArkUI-X 是基于 OpenHarmony 的技術。

我們在上面菜單欄選擇 【File】->【New】-> 【Import - Import Sample】,如下圖。

image.png

然后,系統會讓我們選擇導入的Sample,此處選擇 OpenHarmony 以及ArkUI-X 下的 HelloWorld。

image.png
接著,系統會去下載對應的依賴。不過,我執行導入的時候,遇到了一個網絡超時的問題,所以我直接下載了源碼,然后再本地導入。

image.png

源碼的下載鏈接如下:https://gitee.com/arkui-x/samples

依賴安裝完成,在右上角選擇 Previewer ,點擊【運行】按鈕,就可以通過 OpenHarmony 預覽界面進行預覽。

image.png

2.2 移入代碼

回到之前創建的 Harmony OS 工程,將里面的 UI 代碼移入到OpenHarmony工程中。首先,進入 Harmony OS 工程的 entry - src - main 目錄,復制里面的 ets、resources 和module.json5文件。然后替換OpenHarmony工程中對應的三個文件,也可以直接覆蓋。

image.png

然后,再次預覽并運行OpenHarmony工程,就可以看到之前通過 Harmony OS 工程模板創建的界面顯示在了這個 OpenHarmony 預覽界面上,如下圖。

image.png

2.3 編譯 OpenHarmony 工程

打開OpenHarmony工程,在 DevEco 菜單欄,選擇 Build App,在編譯為 OpenHarmony App 的同時,也會生成 Android 與 IOS 項目。

image.png

編譯完成后,可以看到生成的 Android 工程了,如下圖。

image.png

2.4 在 Android 環境運行

由于 ArkUI-X 編譯出來的為 native 文件只能運行在ARM環境上,所以Android Studio 提供的模擬器如果為 x64 架構是無法預覽程序的。

接著,將上述生成的 Android 工程使用 Android Studio打開,等待 Gradle 初始化完成,并編譯完成,如下圖。

image.png

然后,我們就可以使用Android Studio來運行項目,也可以使用Android Studio打包apk。

image.png

同樣的,我們也可以使用Xcode來打開iOS的源碼,運行以及打包。

三、應用工程結構

3.1 工程目錄結構

跨平臺應用工程目錄結構,包含一套為ArkUI開發者提供的應用工程模板,提供構建OpenHarmony應用,HarmonyOS應用,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

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

3.2 編譯構建

理解OpenHarmony應用工程的編譯構建需要理解幾個概念:

  • ArkTS源碼:ArkTS源碼通過OpenHarmony SDK工具鏈生成abc(Ark Byte Code),并分別拷貝到Android和iOS應用工程,作為平臺應用資源進行管理。
  • ArkUI應用資源:ArkUI Resources資源也通過OpenHarmony SDK工具鏈進行編譯,編譯后的ArkUI資源分別拷貝到Android和iOS應用工程,作為平臺應用資源進行管理。
  • ArkUI框架資源:ArkUI框架資源隨ArkUI-X SDK進行發布,應用構建時會自動打包到ArkUI-X應用中,可保證ArkUI-X應用在各平臺上UX渲染一致性。

綜上所述,Android平臺上通過assets管理ArkTS編譯產物、ArkUI應用資源和ArkUI框架資源,iOS平臺上通過Bundle Resources管理ArkTS編譯產物、ArkUI應用資源和ArkUI框架資源。

下面說一下原生應用工程結構:

Android應用工程結構

ArkUI-X Android應用工程
├── app
│   ├── libs
│   │   ├── arkui_android_adapter.jar                   // ArkUI-X跨平臺適配層,在SDK中發布
│   │   └── arm64-v8a
│   │       └── libarkui_android.so                     // ArkUI-X跨平臺引擎庫,在SDK中發布
│   ├── src
│   │   ├── androidTest
│   │   ├── main
│   │   │   ├── assets
│   │   │   │   └── arkui-x                             // ArkUI應用編譯后的字節碼文件和Resources,作為資源文件存放在assets/arkui-x中
│   │   │   │       ├── entry                           // ArkUI單個模塊的編譯結果
│   │   │   │       │   ├── ets                         // ArkUI單個模塊代碼的編譯結果:包括字節碼文件以及sourceMap文件
│   │   │   │       │   │   ├── sourceMaps.map
│   │   │   │       │   │   └── modules.abc
│   │   │   │       │   ├── resources.index             // ArkUI單個模塊資源的編譯結果:resources資源的編譯結果
│   │   │   │       │   ├── resources                   // resources資源中的rawfile資源,不會進行編譯。
│   │   │   │       │   └── module.json
│   │   │   │       ├── entry_test                      // ohosTest,僅僅Debug模式構建包含。
│   │   │   │       └── systemres                       // ArkUI框架自帶的系統資源
│   │   │   ├── java/com/example/mayapp
│   │   │   │   ├── MyApplication.java                  // 基于StageApplication擴展MyApplication
│   │   │   │   └── EntryEntryAbilityActivity.java      // 基于StageActivity擴展EntryEntryAbilityActivity
│   │   │   ├── res
│   │   │   └── AndroidManifest.xml
│   │   └── test
│   ├── build.gradle
│   └── proguard-rules.pro
├── gradle/wrapper
├── build.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

iOS應用工程結構

ArkUI-X iOS應用工程
├── app.xcodeproj
│   ├── project.xcworkspace
│   └── project.pbxproj
├── app
│   ├── Assets.xcassets
│   ├── Base.Iproj
│   ├── AppDelegate.h
│   ├── AppDelegate.m                               // 應用入口, 驅動StageApplication的生命周期
│   ├── EntryEntryAbilityViewController.m           // 基于StageViewController擴展EntryEntryViewController
│   ├── Info.plist
│   └── main.m
├── arkui-x                                         // ArkUI應用編譯后的字節碼文件和Resources,作為資源文件存放在assets/arkui-x中
│   ├── entry                                       // ArkUI單個模塊的編譯結果
│   │   ├── ets                                     // ArkUI單個模塊代碼的編譯結果:包括字節碼文件以及sourceMap文件
│   │   │   ├── sourceMaps.map
│   │   │   └── modules.abc
│   │   ├── resources.index                         // ArkUI單個模塊資源的編譯結果:resources資源的編譯結果
│   │   ├── resources                               // resources資源中的rawfile資源,不會進行編譯。
│   │   └── module.json
│   ├── entry_test                                  // ohosTest,僅僅Debug模式構建包含。
│   └── systemres                                   // ArkUI框架自帶的系統資源
└── frameworks                                      // ArkUI跨平臺Framework動態庫:包含ArkUI-X的框架以及插件

關于華為 ArkTS + ArkUI-X 跨平臺開發框架的基礎知識就介紹到這里,從中我看到了React Native、flutter的影子,事實上,從官方給出的架構圖也能看到它們的影子,畢竟站在巨人的肩膀上,才能看的更遠。相信,隨著鴻蒙的崛起,ArkTS + ArkUI-X技術的到來,國產自研技術將不再是 PPT ,不再是“套殼”。

文中涉及的代碼鏈接如下:https://gitee.com/arkui-x/samples

參考鏈接:

https://gitee.com/arkui-x
https://juejin.cn/post/7253240772840701989

1691649545113.jpg

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

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

相關文章

99. for循環練習題-3種方式輸出0-9

【目錄】 文章目錄 99. for循環練習題-3種方式輸出0-91. for循環和while循環的區別2. 輸出 0~(n-1)的數字2.1 基礎代碼2.2 自定義函數代碼2.3 異常處理語句代碼 【正文】 99. for循環練習題-3種方式輸出0-9 1. for循環和while循環的區別 for循環和while循環都用于重復執行特定…

Linux一些常見的命令

1. 基礎命令 1. ls: 列出目錄內容。- 例如:ls -l 以長格式列出文件和目錄。2. cd: 切換工作目錄。- 例如:cd /home/user 進入 /home/user 目錄。3. pwd: 顯示當前工作目錄的路徑。4. mkdir: 創建新目錄。-…

flink-對齊和不對齊,精準一次和至少一次

精準一次怎么保證?可以設置為以下2個 對齊 當有一個barrier比較快時,輸入緩沖區阻塞,當另外一個barrier到來時,才進行備份,所以數據不會重復。優點:不會造成數據重復缺點:會造成數據積壓&#x…

ChatGPT Plus和ChatGPT對比

模型規模更大,參數數量超過6萬億,比ChatGPT大很多訓練數據更豐富,包括不同語言、領域和類型的數據語言理解和生成能力更強,能夠更準確地理解和生成文本可解釋性和可控性更好,支持更多的調參和控制參數,生成…

uni-app和springboot完成前端后端對稱加密解密流程

概述 使用對稱加密的方式實現。前端基于crypto-js。uni-app框架中是在uni.request的基礎上,在攔截器中處理的。springboot在Filter中完成解密工作。 uni-app 項目中引入crypto-js。 npm install crypto-js加密方法 const SECRET_KEY CryptoJS.enc.Utf8.parse(…

最強自動化測試框架Playwright(20)- iframe

一個頁面可以附加一個或多個 Frame 對象。每個頁面都有一個主框架,并且假定頁面級交互(如)在主框架中運行。click frame_locator 使用 iframe 時,可以創建一個框架定位器,該定位器將進入 iframe 并允許選擇該 iframe…

idea模板的使用(配置xml文件模板)

1. 問題的引出 我們在日常項目中可以發現,sql映射文件和mybatis主配置文件,以及application.yml文件中有很多固定不變的內容,為了方面使用,所以可以把這些xml文件設置為模板 2. 創建模板的步驟 按照圖片一步一步進行即可 點擊…

gcc編譯選項之預處理向源碼傳參和條件編譯

一、是什么? 預處理:是指在進行加工前準備工作. gcc 選項 文件名字 二、使用步驟 1.向源碼傳參 gcc -save-temps -DSENSOR_TYPE=SONY_IMX477_MIPI_8M_30FPS_12BIT hello.c -o hello 代碼如下(示例): #include <stdio.h> #include <stdlib.h>typedef enum …

acwing 平衡括號字符串 貪心 括號序列

&#x1f468;?&#x1f3eb; 平衡括號字符串 給定一個字符串 s s s&#xff0c;該字符串的每個字符都是 (、) 或 # 之一。 你的任務是將 s s s 中的每個 # 變換為一個或多個 )&#xff0c;從而得到一個平衡括號字符串。 不同 # 變換的 ) 的數量可以不同。 請你輸出為了…

數據容器——元組(tuple)

1、元組與列表的不同點 列表是可以修改的。如果想要傳遞的信息&#xff0c;不被算改&#xff0c;列表就不合適了。 元組同列表一樣&#xff0c;都是可以封裝多個、不同類型的元素在內。 但最大的不同點在于&#xff1a;元組一旦定義完成&#xff0c;就不可修改 所以&#xff…

2023河南萌新聯賽第(五)場:鄭州輕工業大學 --01分數規劃

題目描述 給定一個字符串 s&#xff0c;僅含 0, 1, ? 三種字符&#xff0c;你必須將所有 ? 替換為 1 或 0 。 定義 s 的美好值為將所有?進行替換后&#xff0c;s的最長連續 1 或 0 的子串的長度。請你進行所有替換后&#xff0c;使得字符串 s 的美好值最大&#xff0c;請輸…

(二)結構型模式:1、適配器模式(Adapter Pattern)(C++實現示例)

目錄 1、適配器模式&#xff08;Adapter Pattern&#xff09;含義 2、適配器模式應用場景 3、適配器模式的UML圖學習 4、C實現適配器模式的示例 1、適配器模式&#xff08;Adapter Pattern&#xff09;含義 將一個接口轉換為客戶端所期待的接口&#xff0c;從而使兩個接口…

CompletableFuture

java8中新引入了批量線程處理類CompletableFuture CompletableFuture.allOf是與的關系, 每個都要執行完 CompletableFuture.anyOf是或的關系, 其中一個執行完 以下示例代碼: CompletableFuture.allOf(CompletableFuture.runAsync(() -> {Thread.currentThread().setName(&q…

js常用的方法函數

JavaScript 中有許多常用的內置方法和函數&#xff0c;用于處理字符串、數組、對象、日期等不同類型的數據。以下是一些常見的 JavaScript 方法和函數&#xff1a; 字符串操作&#xff1a; str.length: 返回字符串的長度。 str.charAt(index): 返回指定位置的字符。 str.indexO…

Mac安裝nvm教程及使用

nvm 是 node 版本管理器&#xff0c;也就是說一個 nvm 可以管理多個 node 版本&#xff08;包含 npm 與 npx&#xff09;&#xff0c;可以方便快捷的安裝、切換 不同版本的 node。 1、直接通過brew安裝 執行命令&#xff1a;brew install nvm PS&#xff1a; 如果沒有安裝br…

Golang - 生成和讀取toml文件

代碼示例&#xff1a; package mainimport ("fmt""github.com/pelletier/go-toml""os""path" )func CreateToml(tomlPath string) {tree, err : toml.Load("")if err ! nil {fmt.Println("Error while creating empt…

Oracle database 靜默安裝 oracle 11g 一鍵安裝

基于oracle安裝包中應答文件實現一鍵安裝 支持環境&#xff1a; Linux &#xff1a;centerOS 7 oracle &#xff1a;11.2.0 Oracle應答文件 runInstaller應答文件 /database/response/db_install.rsp netca應答文件 /database/response/netca.rsp dbca應答文件 /database/re…

小程序保留2位小數據,不四舍五入

方法1&#xff1a; parseInt toFixed /* * 保留2位小數&#xff0c;不四舍五入 * 5.992550 >5.99 , 2 > 2.00 * */ const toFixed2Decimal (value) > {return (parseInt(value*100)/100).toFixed(2) } console.log(587.67*100) console.log(toFixed2Decimal(587.67…

python中的運算符號含義,python基本運算符的操作

本篇文章給大家談談python的運算符號有哪些類型&#xff0c;以及python各運算符號的功能說明&#xff0c;希望對各位有所幫助&#xff0c;不要忘了收藏本站喔。 1.算數運算符&#xff08;最常見的&#xff09; 標準算數運算符&#xff08;加減乘除&#xff09; 取余運算…

(provider: SSL Provider, error: 0 - 證書鏈是由不受信任的頒發機構頒發的。)

問題描述 NET6 Code First 使用Update-database時 報錯&#xff1a;A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 證書鏈是由不受信任的頒發機構頒發的。) 解決方…