ArkUI-X跨平台技术落地-华为运动健康(一)

简介: 华为运动健康App在多端开发中面临工作量大和体验不一致的问题,传统H5技术虽可跨平台但性能不足。为此,在鸿蒙NEXT版本开发中引入ArkUI-X框架,实现“一次开发、三端部署”。具体策略为:首页保留原生开发,二级页面(如心脏健康、睡眠)采用ArkUI-X技术复用代码,三级及低频页面仍使用H5。同时,通过抽象数据平台接口、bridge桥接底层能力差异等方式,解决多端数据与功能适配问题,大幅降低开发成本并提升用户体验一致性。架构设计上,新增独立跨平台Entry模块与健康Module,支持编译hap包供Android和iOS复用,形成高效跨平台解决方案。

现状与诉求

目前,华为运动健康App在Android 和 iOS均有独立的客户端工程,在原生页面部分,两个客户端独立开发,代码各自维护和演进,会带来各自独立的开发工作量,并且两个端之间的交互体验也无法做到一致。

  为了解决开发工作量翻倍和交互体验不一致的问题,华为运动健康利用H5技术来进行跨平台,就是业界常说的hybrid-app,但是H5技术天生就有性能缺陷,无法带来极致流畅的用户体验和“秒开”的加载速度,所以目前H5跨平台技术只在运动健康应用某些低频和容易变化的页面上使用,在一二级页面仍使用原生native开发。
运动健康业务技术栈示意图

跨平台方案选型

随着运动健康鸿蒙NEXT版本开发,三个平台同时开发的成本及体验一致性问题凸显,例如占比90%的健康详情界面使用原生实现,多平台&多端,开发维护成本高。
健康数据详情的原有技术实现

有鉴于此,引入一种跨平台开发技术做到"一次开发、三端部署"来降低开发工作量以及保证体验一致性,对于运动健康App而言,显得尤为重要。作为鸿蒙NEXT系统生态中的重要一员,ArkUI-X框架是我们跨平台技术方案的首选。结合当前运动健康三端现状,具体采取如下跨平台技术的设计策略:

1.运动健康首页历史逻辑复杂,涉及的模块多并且改造包袱重,仍使用原生页面native开发技术。
2.在运动健康内部的二级页面(如心脏健康、睡眠等页面)使用ArkUI-X技术,实现页面级别的复用,实现“一次开发,三端部署”。
3.在三级页面和低频页面上,仍使用H5技术。H5技术在三端上目前均已成熟,可以做到在三端无缝切换。

综上所述,页面采用的技术方案如下图所示:
运动健康ArkUI-X跨平台业务技术栈示意图

运动健康基于ArkUI-X跨平台框架适配

鸿蒙Next平台运动健康架构设计

如上所述,运动健康在鸿蒙NEXT系统上健康二级页面(如心脏健康、睡眠)采用ArkUI-X 跨平台技术进行开发,并且将对应的健康二级页面在Android 和 iOS上面进行复用,实现“一套代码,三端运行”。

在健康二级页面上,数据来自于运动健康内部的“数据平台”,但是目前运动健康在三端上的“数据平台”有各自单独的实现(运动健康“数据平台”可以理解成为一个独立的内部数据存储模块,具备增、删、改、查健康数据以及实现端云数据同步的功能)。但是由于历史原因,当前三端的数据平台无法做到代码复用,有各自的接口和逻辑实现,所以如何去除健康二级页面(如睡眠、心脏健康)与 数据平台的耦合关系,通过接口的形式隔离三端(iOS 和 Android和鸿蒙NEXT系统)的数据平台的实现差异,成为一个重要的问题。所以当前架构设计面临如下三个诉求:

1.上层健康二级页面代码复用,抽象数据平台层接口实现,不修改上层业务代码的情况下兼容不同数据平台的差异。
2.健康模块代码能够作为运动健康Next版本的一部分,可以在运动健康Next版本里面编译,同时能够单独编译,生成编译产物hap包,供Android和iOS编译,实现“一套代码,三端运行”。
3.其他底层能力差异(如蓝牙设备连接,页面跳转等),通过bridge形式实现,最大限度复用上层代码。

根据上述诉求,鸿蒙NEXT系统上运动健康的架构设计如下:

1.新建独立跨平台的Entry模块,该跨平台Entry模块用于编译跨平台hap包,供Android和iOS编译,跨平台的Entry模块本身不包含业务逻辑代码,仅仅用于编译出包。
2.将健康二级页面代码单独抽离成独立module:健康Module,让鸿蒙NEXT的Entry模块和跨平台工程的Entry模块可以依赖健康Module。
3.抽象数据平台的接口,让健康Module调用数据平台的抽象接口,而非依赖具体的数据平台实现,后续使用动态编译脚本,根据宿主平台来修改数据平台的实现。
4.其他底层能力的差异(如蓝牙设备连接、页面跳转等),通过bridge的形式,桥接到不同的平台,根据平台来调用对应的方法。

鸿蒙Next系统上的运动健康整体架构图如下所示:
鸿蒙NEXT系统上运动健康的架构图

Android、iOS平台运动健康架构设计(以Android为例)

1.如前所述,鸿蒙Next系统的跨平台工程编译出来的hap包,添加到运动健康Android版本的工程下Asset目录下参与编译,最后生成Android版本的apk包。通过这种形式,ArkUI-X跨平台页面代码就可以预置到Android版本的运动健康中。
2.跨平台代码预置后,Android侧通过ArkUI-X SDK提供的setInstanceName接口可以拉起对应的跨平台页面,并且通过该接口,可以将json格式的参数传递到跨平台的Entry模块。

package com.example.myapplication;
import ohos.stage.ability.adapter.StageActivity;

public class EntryMainAbilityActivity extends StageActivity {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        // 设置规则:bundleName:moduleName:abilityName:
        super.setInstanceName("com.example.myapplication:entry:MainAbility:");
        super.onCreate(savedInstanceState);
    }
}

3.Entry模块收到json数据,解析对应的数据,从而拉起对应的跨平台页面。

4.底层能力的差异(如蓝牙设备连接、页面跳转、数据平台等),通过bridge的形式,桥接到不同的平台,根据平台来调用对应的方法。
Android上运动健康跨平台特性架构设计图

相关文章
|
26天前
|
API Android开发 开发者
ArkUI-X跨平台应用改造指南
随着HarmonyOS Next 5.0的发布,基于ArkTS开发的应用日益丰富,但也面临多平台适配的挑战。ArkUI-X框架提供“一次开发、三平台部署”解决方案,助力开发者高效实现跨平台应用。本文介绍如何通过ArkUI-X将HarmonyOS Next应用改造为支持Android与iOS的跨平台工程,涵盖产品定制层(products)、基础特性层(features)和公共能力层(commons)的设计与实现,优化代码复用与交互一致性。
135 52
|
9天前
|
应用服务中间件 nginx Docker
静态资源管理:Nginx在Docker中的部署
部署Nginx到Docker中作为静态资源服务器是一种既简单又高效的方法,可以节省时间和资源,并能确保一致性和可扩展性。我们通过编写Dockerfile指定了基础镜像和所需指令,编写Nginx配置管理请求处理,构建自定义Docker镜像,并运行容器以启动服务。这一过程即符合开发规范,也保证了资源的高效管理和访问速度。
56 13
|
人工智能 安全 Java
Serverless JManus: 企业生产级通用智能体运行时
JManus 是面向 Java 的企业级通用智能体框架,支持多 Agent 框架、MCP 协议和 PLAN-ACT 模式,具备高可用、弹性伸缩的特性。结合阿里云 Serverless 运行时 SAE 和 FC,实现稳定安全的智能体应用部署与运行。
107 16
|
6天前
|
SQL 缓存 大数据
PHP性能优化实战:4个立竿见影的技巧
PHP性能优化实战:4个立竿见影的技巧
143 88
|
6天前
|
安全 PHP
PHP 8 新特性实战:提升开发效率的利器
PHP 8 新特性实战:提升开发效率的利器
135 88
|
6天前
|
安全 PHP
PHP 8 新特性实战:提升开发效率的利器
PHP 8 新特性实战:提升开发效率的利器
140 87
|
20天前
|
JavaScript 安全 API
告别 Vuex?Pinia:轻量高效的状态管理新选择
告别 Vuex?Pinia:轻量高效的状态管理新选择
158 84
|
16天前
|
监控 前端开发 JavaScript
HarmonyOSNext 崩溃急救指南:全局监听+同步退出 = 优雅保命!
本文介绍了HarmonyOS Next中Ark Ts的错误管理技巧,通过全局监听和同步退出机制实现应用崩溃保护。涵盖单线程、Promise及主线程卡死监控方案,并提供实战代码与避坑指南,帮助开发者优雅处理异常,保障用户体验。
126 65
|
16天前
|
存储 运维 JavaScript
《HarmonyOSNext应用崩溃自救指南:零数据丢失的故障恢复黑科技》
本文详解HarmonyOS Next应用崩溃时如何实现零数据丢失的故障恢复机制,涵盖API差异、核心接口与实战代码,助开发者提升App稳定性和用户体验。
128 65
|
26天前
|
设计模式 存储 缓存
Netty源码—9.性能优化和设计模式
本文主要介绍了Netty的两大性能优化工具、FastThreadLocal的源码和总结、Recycler的设计理念/使用/四个核心组件/初始化/对象获取/对象回收/异线程收割对象和总结,以及Netty设计模式的单例模式和策略模式。
115 53