一
跨平臺框架介紹
提到跨平臺,要先理解什么是“平臺”,這里的平臺,就是指應用程序的運行環境,例如操作系統,或者是Web瀏覽器,具體的像HarmonyOS、Android、iOS、或者瀏覽器,都可以叫做平臺。
跨平臺框架,就是一個應用的開發框架,開發者基于這個框架開發的應用,可以分別在不同的平臺上運行,業界比較知名的比如:React Native、Flutter或者各種小程序框架,都可以稱之為跨平臺框架。
跨平臺的優勢有以下三個方面:
1、可以減少開發者的學習成本;
2、增加代碼復用,節省開發的成本;
3、減少對各個平臺差異的適配。
跨平臺框架
假設需求是要在三個平臺上開發同樣功能的應用,如果每個平臺都需要10個單位的工作量,那么總共將花費30個單位的工作量。如果使用了跨平臺框架,通過代碼復用,那么可能只需要一半的工作量,甚至更少,這也是為什么開發者都在探索不同的跨平臺方案。
二
ArkUI跨平臺能力介紹
為滿足HarmonyOS應用生態建設對于跨平臺開發的需求,我們正在和相關的合作伙伴定向開源構建ArkUI的跨平臺能力,目標先支持HarmonyOS、OpenHarmony、Android、iOS平臺,后續還將逐步增加對更多平臺的支持。這樣,開發者基于一套主代碼,就可以構建可支持多平臺的精美的高性能應用。
ArkUI的定位包含以下幾個方面:
1、ArkUI作為HarmonyOS原生的應用框架,能力將預置在HarmonyOS中;
2、ArkUI作為所有原子化服務的基礎運行環境,如各類服務及萬能卡片;
3、ArkUI也將作為一個通用的跨平臺框架來開發多平臺的應用。
ArkUI跨平臺框架整體架構
在ArkUI的架構設計之初就把跨平臺作為一個重要的設計原則,從代碼的架構上就對各個平臺的調用做了解耦,可以方便的移植到不同的平臺,同時使用的圖形引擎也是可以跨平臺的,所有基于它的組件都是自渲染的,所以有較好的性能和渲染一致性。同時使用了NAPI作為JS API的擴展機制,可以將相同定義的API擴展到不同平臺進行實現。
接下來將從組件支持度、應用工程跨平臺、API能力邊界等6個緯度詳細介紹ArkUI具備的跨平臺能力。
1、跨平臺能力——組件支持度:
ArkUI跨平臺目前具備的一些組件能力,主要為以下兩方面:
1)OpenHarmony支持的基礎組件,都會進行支持。
2)提供一些高級組件能力,比如XComponent和它的相關機制。
2、跨平臺能力——應用工程跨平臺:
對于一個完整的HarmonyOS應用,要做到跨平臺運行,還需要業務邏輯和它使用的API、資源都能跨平臺。
ArkUI支持跨平臺三個必要條件
對于業務邏輯,使用@ohos的標準API,跨平臺的目標是:使用這些API開發的邏輯盡可能的直接在不同平臺使用。
3、跨平臺能力——API能力邊界:
API大致分為以下幾類,支持策略也略有不同:
1)平臺無關的API,這部分是可以直接移植到不同平臺;
2)依賴平臺橋接的API,需要使用API擴展機制在不同平臺分別橋接;
3)不同平臺可能不是一一對應的API,通用的基本能力部分可以在不同平臺分別橋接;
4)平臺專有的API,依賴系統的特有能力,無法做到跨平臺。
平臺全局API
4、跨平臺能力——API擴展機制:
ArkUI提供了一套API的擴展機制,可以方便的去實現相同定義的API在不同平臺上使用。
擴展機制整體是復用NAPI機制,也是HarmonyOS上默認擴展API的機制,同時提供了JS->C++->Java/ObjectC的代碼互調的機制。這套機制也同樣適用于三方插件擴展或者開發者自己業務的擴展。
API擴展機制
以下面代碼為例,通過標準的NAPI進行接口的擴展,同時也支持注冊一個Java的類,在接口調用時會動態加載這個類,最終調用到Java的實現中。
1//注冊插件,導出JS方法
2static napi_value TestPluginExport(napi_env env, napi_value exports)
3{
4static napi_property_descriptor desc[] =
5{ DECLARE_NAPI_FUNCTION("hello", JSTestPluginHello), };
6NAPI_CALL(env, napi_define_properties(
7env, exports, sizeof(desc) / sizeof(desc[0]), desc));
8return exports;
9}
10
11static napi_value JSTestPluginHello(napi_env env, napi_callback_info info)
12{
13auto plugin = TestPlugin::Create();
14plugin->Hello();
15…
16}
17
18static void TestPluginJniRegister()
19{
20const char className[] = "ohos.ace.plugin.testplugin.TestPlugin";
21OH_Plugin_RegisterPlugin(&TestPluginJni::Register, className);
22}
23
24extern "C" __attribute__((constructor)) void TestPluginRegister()
25{
26napi_module_register(&testPluginModule);
27OH_Plugin_RunTaskOnPlatform(&TestPluginJniRegister);
28}
(左右滑動,查看更多)
1// Java業務邏輯
2package ohos.ace.plugin.testplugin;
3
4public class TestPlugin {
5public TestPlugin(Context context) {
6...
7}
8
9public void hello() {
10Log.i(LOG_TAG, "hello from java");
11}
12}
(左右滑動,查看更多)
5、跨平臺能力——命令行工具
ArkUI還將提供一個命令行工具,可以支持Windows、Mac、Linux的開發環境,支持創建跨平臺工程,可以構建出HarmonyOS、Android以及iOS的應用程序,并可以生成目標平臺的開發工程,如Android Studio/XCode。
一些常用的命令如下,涵蓋了從創建工程到運行打包的常用功能:
命令行工具
6、跨平臺能力——DevEco Studio跨平臺支持:
后續還將在DevEco Studio上加入對跨平臺的支持,增加能力如下:
1)創建工程時可以通過跨平臺模板創建一個支持跨平臺的工程;
2)可以支持編譯出Android/ iOS上的安裝調試包;
3)支持發現和連接不同設備真機和模擬器;
4)支持應用工程導出為Android應用工程和iOS應用工程,方便原生能力擴充或混合開發。
三
如何使用ArkUI開發跨平臺應用
了解了ArkUI的跨平臺能力之后,下面我們用“健康飲食”應用開發具體案例介紹使用ArkUI開發跨HarmonyOS、Android及iOS三大平臺的完整流程。
健康飲食
1、應用工程創建:
首先創建一個跨平臺工程,我們以使用命令行工具為例。
1)先使用npm install安裝相關的依賴包;
2)通過ace check檢查運行環境,可以根據提示安裝相關依賴的軟件;
3)通過ace create創建跨平臺應用的工程,可以支持類Web范式或聲明式范式。
創建好的工程的目錄結構如下圖所示,可以看到不同平臺的工程文件,同時這里的source目錄下,存放的就是跨平臺通用的代碼結構。
跨平臺工程目錄結構
2、開發及調試:
開發應用的過程就和開發一個普通的HarmonyOS應用一樣,進行UI界面與邏輯的設計,使用DevEco Studio進行開發,然后實機運行及調試。
“健康飲食”開發
3、構建與發布:
有兩種方式進行構建,一是通過命令行“ace build”可以直接進行構建;二是通過目標平臺的工程進行構建,如下圖所示,可以直接通過Android Studio或XCode構建出對應平臺的安裝包。
使用Android Studio構建
使用XCode構建
4、安裝與運行:
構建完成后,可以通過“ace install”命令進行安裝運行,下面就是“健康飲食”同一個應用在HarmonyOS端、Android端和iOS端上的運行效果。
四
總結與展望
上面提到的這些ArkUI跨平臺能力,將在近期進行開源,感興趣的開發者可以持續關注。接下來ArkUI會圍繞各平臺的能力進行構建,進一步豐富跨平臺的組件,并持續對性能、內存、包大小等方向進行優化,不斷完善@ohos的API插件包,進一步提升開發者對跨平臺的訴求和體驗。
END
想了解更多HarmonyOS技術?
后臺留言給我們
立刻安排!
原文標題:如何用一套代碼運行跨多操作系統應用
文章出處:【微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。
-
HarmonyOS
+關注
關注
79文章
1977瀏覽量
30264
原文標題:如何用一套代碼運行跨多操作系統應用
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論