ArkUI-X跨平台技术落地-华为运动健康(一)
现状与诉求
目前,华为运动健康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跨平台框架适配
鸿蒙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系统上的运动健康整体架构图如下所示:

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的形式,桥接到不同的平台,根据平台来调用对应的方法。

ArkUI-X跨平台技术落地-华为运动健康(一)的更多相关文章
- Mate 40系列发布 搭载华为运动健康服务带来健康数字生活
10月30日,HUAWEI Mate 40系列国内发布会如期而至.Mate 40系列除了拥有强悍的性能.全能记录影像和突破性的交互之外,还搭载了全新升级的HMS Core,其中,Health Kit( ...
- 【FAQ】申请华为运动健康服务授权的4个常见问题及解决方法
华为运动健康服务(HUAWEI Health Kit)提供原子化数据开放,在获取用户对数据的授权后,应用可通过接口访问运动健康数据,对用户数据进行增.删.改.查等操作,为用户提供运动健康类数据服务.这 ...
- 华为运动健康服务Health Kit 6.9.0版本新增功能揭秘!
华为运动健康服务(HUAWEI Health Kit)6.9.0版本新鲜出炉啦! 一文了解新增功能,快来一起加入Health Kit生态大家庭! 一.更丰富:睡眠呼吸记录健康数据开放 呼吸机是用于为患 ...
- 【FAQ】运动健康服务REST API接口使用过程中常见问题和解决方法总结
华为运动健康服务(HUAWEI Health Kit)为三方生态应用提供了REST API接口,通过其接口可访问数据库,为用户提供运动健康类数据服务.在实际的集成过程中,开发者们可能会遇到各种问题,这 ...
- 【FAQ】申请运动健康服务验证环节常见问题及解答
华为 HMS Core 运动健康服务(HUAWEI Health Kit)提供原子化数据开放.应用在获取用户数据授权后,可通过接口访问运动健康数据,对用户数据进行读写等操作,为用户提供运动健康类数据服 ...
- MOT大连站 | 卓越研发之路:前沿技术落地实践
还在讨论究竟哪种编程语言更容易深度学习?哪种编程语言更具有价值?如果你是资深技术人员又或者是团队负责人,在机器学习.微服务.Spring 5反应式编程等方面遇到了问题,不妨参加一场由msup和微软联合 ...
- 为 “超级大脑”构建支撑能力,腾讯云聚焦AI技术落地
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月24日,以"无界数据.无限智能"为主题的2018腾讯"云+未来"峰会AI大数据分论坛在广州拉开帷 ...
- AI驱动的超分辨技术落地实践
近年来,随着深度学习技术的快速发展,基于AI的超分辨技术在图像恢复和图像增强领域呈现出广阔的应用前景,受到了学术界和工业界的关注和重视.但是,在RTC视频领域中,很多AI算法并不能满足实际场景下的应用 ...
- PWA 技术落地!让你的站点(Web)秒变APP(应用程序)
Web应用方兴未艾,我们已经十分习惯习惯了在电脑上进行以自己的工作,而随着众多功能强大的在线网站,我们的Windows的桌面也不再拥挤着各种快捷方式:不光是PC端,在移动端我们也不再在浩如烟海的应用市 ...
- 跨平台技术实践案例: 用 reactxp 重写墨刀的移动端
Authors: Gao Cong, Perry Poon Illustrators: Shena Bian April 20, 2019 重新编写,又一次,我们又一次重新编写了移动端应用和移动端 ...
随机推荐
- linux的zip命令详解 | Linux文件打包成Zip的命令和方法
zip 命令用来压缩文件 参数: -A:调整可执行的自动解压缩文件: -b<工作目录>:指定暂时存放文件的目录: -c:替每个被压缩的文件加上注释: -d:从压缩文件内删除指定的文件: - ...
- .NET 生成PDF文件
1.网上检索N种解决方案 QuestPDF:简单方便实用,文档也相对来说全,但是开源协议,当企业规模大的100W美金需要收费,未来存在潜在版权问题. itext7:感觉实用偏复杂,项目类库引用复杂,不 ...
- 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
"AI会让每个人都能成为工具创造者,打破你能力边界,有时候只需要一个想法." AI粉嫩特攻队,2025年3月23日. 前几天参加了一场行业闭门研讨会,满满1个半小时的干货演讲让我收 ...
- 【uniapp】文本控件多余文字省略号代替
多余文字使用省略号效果 代码 .l-dd-content{ width: 100%; color: #8b8b8b; display: -webkit-box; /** 对象作为伸缩盒子模型显示 ** ...
- 阿里云ECS服务器Ubuntu下安装docker-ce技巧
官方文档 先来份Ubuntu 下安装 docker 的官方文档 -> Get Docker CE for Ubuntu 官方文档的安装方式是最靠谱的,但是对于国内的小伙伴来说墙是硬伤... 国内 ...
- 大量数据topk-分桶+堆+多路并归解决方案
利用分桶.堆与多路归并解决 TopK 问题:结果处理阶段解析 在处理大规模数据时,TopK 问题是一个常见且具有挑战性的任务,即从海量数据中找出最大(或最小)的 K 个元素.为了高效地解决这个问题,我 ...
- kettle实时增量同步mysql数据
** 本文主要介绍运用kettle实时增量同步mysql数据 ** Debezium介绍 官网地址:https://debezium.io/documentation/ Debezium是一个开源项目 ...
- Golang解决fatal error: all goroutines are asleep - deadlock!
今天进行一个协程操作demo时总是报错 //workerpool.go package main import ( "fmt" "time" ) //工作线程 ...
- 1安装docker
1安装docker 1.1主机环境 ssh://192.168.30.30:22 root 123QWEasd 1.2安装依赖 docker依赖于系统的一些必要的工具,可以提前安装. yum ...
- PyPI 使用的国内源
通过几次 pip 的使用,对于默认的 pip 源的速度实在无法忍受,于是便搜集了一些国内的pip源,如下:阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大 ...