?平臺差異化
簡介
跨平臺使用場景是一套ArkTS代碼運行在多個終端設備上,如Android、iOS、OpenHarmony(含基于OpenHarmony發行的商業版,如HarmonyOS Next)。當不同平臺業務邏輯不同,或使用了不支持跨平臺的API,就需要根據平臺不同進行一定代碼差異化適配。當前僅支持在代碼運行態進行差異化,接下來詳細介紹場景及如何差異化適配。
使用場景及能力
使用場景
平臺差異化適用于以下兩種典型場景:
- 自身業務邏輯不同平臺本來就有差異;
- 在OpenHarmony上調用了不支持跨平臺的API,這就需要在OpenHarmony上仍然調用對應API,其他平臺通過Bridge橋接機制進行差異化處理;
- 開發前請熟悉鴻蒙開發指導文檔:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點擊或者復制轉到。
判斷平臺類型
可以通過let osName: string = deviceInfo.osFullName;
獲取對應OS名字,該接口已支持跨平臺,不同平臺上其返回值如下:
- OpenHarmony上,osName等于
OpenHarmony XXX
- Android上,osName等于
Android XXX
- iOS上,osName等于
iOS XXX
示例如下:
test() {let osName: string = deviceInfo.osFullName;console.log('osName = ' + osName);if (osName.startsWith('OpenHarmony')) {// OpenHarmony應用平臺上業務邏輯} else if (osName.startsWith('Android')) {// Android應用平臺上業務邏輯} else if (osName.startsWith('iOS')) {// iOS應用平臺上業務邏輯}
}
非跨平臺API處理
在跨平臺工程中如果調用非跨平臺API,編譯時IDE會觸發攔截并報錯。接下來以調用wifiManager.isWifiActive()
判斷WiFi開關是否打開為例,這個API當前是不支持跨平臺的。
示例代碼:
test2(){let isActive = wifiManager.isWifiActive();}
IDE報錯:
> hvigor ERROR: Failed :feature:default@CompileArkTS...
> hvigor ERROR: ArkTS Compiler Error
ERROR: ArkTS:ERROR File: D:/work/git/play-arkuix/Test_ACE/feature/src/main/ets/pages/Index.ets:64:31'isWifiActive' can't support crossplatform application.COMPILE RESULT:FAIL {ERROR:2}
> hvigor ERROR: BUILD FAILED in 10 s 753 ms
此時可以將涉及到的API寫到一個后綴為.ts文件,然后在不支持的API上面增加// @ts-ignore
或// @ts-nocheck
屏蔽告警,開發者需要保證只在OpenHarmony應用平臺上才運行這一段邏輯,Android和iOS應用平臺上可以借用Bridge橋接機制處理,示例代碼如下:
- 新建一個
WiFiUtil.ts
,并忽略告警:
import wifiManager from '@ohos.wifiManager'export class WiFiUtil {static isActive(): boolean {//@ts-ignorereturn wifiManager.isWifiActive();}
}
- 根據不同平臺差異化邏輯,Android和iOS應用平臺上通過[Bridge機制]橋接到對應平臺的業務邏輯實現上:
checkTestWiFi(): void {let osName: string = deviceInfo.osFullName;console.log('osName = ' + osName);if (osName.startsWith('OpenHarmony')) {// OpenHarmony應用平臺let isActive = WiFiUtil.isActive();this.message = isActive ? '已連接' : '未連接';} else {// Android和iOS應用平臺上,中轉到原生let bridge = Bridge.createBridge('Bridge');bridge.callMethod('isWiFiActive').then((res) => {// 業務邏輯處理...}).catch(() => {})}
}
鴻蒙開發崗位需要掌握那些核心要領?
目前還有很多小伙伴不知道要學習哪些鴻蒙技術?不知道重點掌握哪些?為了避免學習時頻繁踩坑,最終浪費大量時間的。
自己學習時必須要有一份實用的鴻蒙(Harmony NEXT)資料非常有必要。 這里我推薦,根據鴻蒙開發官網梳理與華為內部人員的分享總結出的開發文檔。內容包含了:【ArkTS、ArkUI、Stage模型、多端部署、分布式應用開發、音頻、視頻、WebGL、OpenHarmony多媒體技術、Napi組件、OpenHarmony內核、Harmony南向開發、鴻蒙項目實戰】等技術知識點。
廢話就不多說了,接下來好好看下這份資料。
如果你是一名Android、Java、前端等等開發人員,想要轉入鴻蒙方向發展。可以直接領取這份資料輔助你的學習。鴻蒙OpenHarmony知識←前往。下面是鴻蒙開發的學習路線圖。
針對鴻蒙成長路線打造的鴻蒙學習文檔。鴻蒙(OpenHarmony )學習手冊(共計1236頁)與鴻蒙(OpenHarmony )開發入門教學視頻,幫助大家在技術的道路上更進一步。
其中內容包含:
《鴻蒙開發基礎》鴻蒙OpenHarmony知識←前往
- ArkTS語言
- 安裝DevEco Studio
- 運用你的第一個ArkTS應用
- ArkUI聲明式UI開發
- .……
《鴻蒙開發進階》鴻蒙OpenHarmony知識←前往
- Stage模型入門
- 網絡管理
- 數據管理
- 電話服務
- 分布式應用開發
- 通知與窗口管理
- 多媒體技術
- 安全技能
- 任務管理
- WebGL
- 國際化開發
- 應用測試
- DFX面向未來設計
- 鴻蒙系統移植和裁剪定制
- ……
《鴻蒙開發實戰》鴻蒙OpenHarmony知識←前往
- ArkTS實踐
- UIAbility應用
- 網絡案例
- ……
最后
鴻蒙是完全具備無與倫比的機遇和潛力的;預計到年底將有 5,000 款的應用完成原生鴻蒙開發,這么多的應用需要開發,也就意味著需要有更多的鴻蒙人才。鴻蒙開發工程師也將會迎來爆發式的增長,學習鴻蒙勢在必行!