关于harmonyos:如何用一套代码运行跨多操作系统应用

40次阅读

共计 3548 个字符,预计需要花费 9 分钟才能阅读完成。

一、跨平台框架介绍

提到跨平台,要先了解什么是“平台”,这里的平台,就是指应用程序的运行环境,例如操作系统,或者是 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 的实现中。

   // 注册插件,导出 JS 办法
   static napi_value TestPluginExport(napi_env env, napi_value exports)
   {static napi_property_descriptor desc[] = 
   {DECLARE_NAPI_FUNCTION("hello", JSTestPluginHello), };
       NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
       return exports;
   }
  
  static napi_value JSTestPluginHello(napi_env env, napi_callback_info info)
  {auto plugin = TestPlugin::Create();
      plugin->Hello();
      … 
  }
  
  static void TestPluginJniRegister()
  {const char className[] = "ohos.ace.plugin.testplugin.TestPlugin";
      OH_Plugin_RegisterPlugin(&TestPluginJni::Register, className);
  }
  
  extern "C" __attribute__((constructor)) void TestPluginRegister()
  {napi_module_register(&testPluginModule);
      OH_Plugin_RunTaskOnPlatform(&TestPluginJniRegister);
  }
 // Java 业务逻辑
   package ohos.ace.plugin.testplugin;
  
   public class TestPlugin {public TestPlugin(Context context) {...}
       
           public void hello() {Log.i(LOG_TAG, "hello from java");
      }
  }

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 端上的运行成果。

HarmonyOS 端运行成果

Android 端运行成果

iOS 端运行成果

四、总结与瞻望

下面提到的这些 ArkUI 跨平台能力,将在近期进行开源,感兴趣的开发者能够继续关注。接下来 ArkUI 会围绕各平台的能力进行构建,进一步丰盛跨平台的组件,并继续对性能、内存、包大小等方向进行优化,不断完善 @ohos 的 API 插件包,进一步晋升开发者对跨平台的诉求和体验。

正文完
 0