ArkUI-X跨平台应用改造指南

简介: 随着HarmonyOS Next 5.0的发布,基于ArkTS开发的应用日益丰富,但也面临多平台适配的挑战。ArkUI-X框架提供“一次开发、三平台部署”解决方案,助力开发者高效实现跨平台应用。本文介绍如何通过ArkUI-X将HarmonyOS Next应用改造为支持Android与iOS的跨平台工程,涵盖产品定制层(products)、基础特性层(features)和公共能力层(commons)的设计与实现,优化代码复用与交互一致性。

现状与诉求

随着 HarmonyOS Next 5.0 版本正式发布,众多开发者基于 ArkTS 语言为 HarmonyOS Next 系统开发了大量应用,这极大地丰富了 HarmonyOS 的生态。越来越多的应用上线,也给开发者带来了挑战,开发者需要同时开发和维护适用于 HarmonyOS Next、Android、iOS 三个平台的应用程序。这不仅意味着开发工作量大幅增加,开发成本也随之上升,而且很难保持一致的交互体验。
ArkUI-X 跨平台框架是基于 HarmonyOS 打造的跨端跨平台框架,能实现 “一次开发、三平台部署”。 基于ArkTS开发的HarmonyOS Next应用,配套ArkUI-X跨平台框架,可以快速改造为跨平台应用,缩短开发周期,同时还能确保应用在 HarmonyOS Next、Android、iOS 多个平台上,为用户提供一致的交互体验。
本文重点介绍如何将HarmonyNext应用工程转换为跨平台工程,实现一码多平台。

改造目标

从零开始或基于现有HarmonyOS Next App进行改造,使其可快速部署于Android、IOS平台。
通过ArkUI-X框架Bridge能力实现ArkTS与原生平台交互。

方案说明

依据分层架构设计理念,分三部分阐述。

image

产品定制层(products)

由于不同操作系统之间的数据平台差异等客观原因,部分功能基于各平台的独特能力来实现不可避免。基于此,在products层,建议开发者建立两个module,分别命名为harmonyos和arkuix。在不同的hap包中集成对应的独特功能模块,最终编译成独立的hap包,以此实现功能隔离的效果。

  当然,倘若在app的实际开发进程中确定所有功能在三端应用时均可实现,也就是不需要考虑平台差异性问题,可以直接采用单hap设计。开发者需要根据实际开发状况进行全面综合的考量。

module 编译产物:hap包 运行设备平台/系统能力支持
harmonyos harmonyos.hap HarmonyOS Next
arkuix arkuix.hap Android
arkuix arkuix.hap iOS

products层为App主module,其编译产物为HAP。作为应用的入口。一般保留有应用启动页和应用首页。由于采用了分包编译,需要开发者于harmonyos.hap(下面简称A包)和 arkuix.hap (下面简称B包)中各自独立开发应用启动页和应用首页(下面简称Pages),带来额外的开发量。基于此,建议开发者进行 products层 设计时考虑以下几点:

共性考虑:对于App来说,A包和B包都存在”设置页面、我的页面、登录页面“(见上图),这些共性的代码和文件如果分别存放于A包和B包会导致大量的冗余代码,也不利于后期维护,因此建议对其进行抽象,形成一个独立的模块存放(features层模块main),通过module依赖的方式使用。
差异性考虑:对于App来说,仅A包存在”发现页面“(见上图),如果B包运行至”发现页面“时会产生不可预知的后果。
$~~$ B包的Pages设计时删除相关的页面元素,用户使用基于B包的app时不感知”发现页面“。
$
~~$ 相关的数据结构、方法函数等应重新设计,可以抽象的部分进行抽象,存于features层模块main;无法抽象的部分各自实现。

基础特性层(features)

Features层属于App的特性界面层,其编译产物为HAR/HSP包。在该层级中,包含了应用的所有UI界面、弹窗、媒体图片等元素,这些都是能够被用户直接感知并进行操作的。此层是借助HarmonyOS的ArkUI组件以及相关能力来进行设计与开发的,并且ArkUI-X框架确保了在Android/iOS与HarmonyOS Next上能够拥有相同的展示效果和交互体验。

1.开发者进行设计时需首先考虑ArkUI-X框架的实际适配状况,使用支持跨平台的UI控件、属性、方法进行跨平台开发,因为在UI组件方面存在的差异,是无法借助Bridge能力来弥补的。
2.API接口的使用:在使用API接口时可能会遇到以下两种情况:1、API不支持跨平台。2、API在Android、IOS平台支持能力有差异(具体信息可参考相应的API文档)。因此不建议开发者在features层直接调用API接口实现功能。应尽可能对其抽象,于commons层创建功能模块实现,使用时调用commons层相应功能模块接口。具体实现详见“第三部分:公共能力层(commons)”。
3.共通组件:在实际开发过程中,可以抽象出部分满足多种场景的共通UI。可以在commons层创建模块“uicomponents”,将共通UI抽象并实现,实现代码复用的效果。
4.应注意,features层应合理设计模块,谨慎处理模块间依赖关系,避免循环依赖等问题。

模块main

Products层harmonyos.hap(下面简称A包)和 arkuix.hap (下面简称B包)这样的双hap设计解决了因设备平台差异导致的应用功能差异的问题。但是由此引入了新问题:如果对Products层代码进行量化,那么共性代码(A包和B包可复用的一套代码)是要远远多于差异性代码(A包和B包需各自进行设计,无法复用)的。开发者在后续的开发和维护过程中,每次都需要同时修改分别部署于A包和B包的共性代码。由此产生大量冗余代码和不必要的工作量。
为解决该问题,我们设计了模块main。模块main使用HAR。通过将共性的部分抽取、实现。后续的开发和维护过程中,仅修改main模块即可,从而提升开发效率,减少冗余代码,优化代码结构。
  然而,需要特别注意的是,当products层采用单hap设计时,由于所有功能都集成在一个hap包中,因此无需额外创建模块main,以避免不必要的复杂性。
image

图片左侧为单hap设计,因为不存在差异性代码,所有代码集成于Products层phone.hap中,向下依赖features层。

图片右侧为双hap设计,其中差异性代码各自在harmonyos.hap和arkuix.hap中分别实现,实现功能隔离。共性代码抽象集成于features层模块main中,A包和B包共同依赖模块main,实现代码复用。

公共能力层(commons)

commons层是App的能力集合体,其编译产物为HAR/HSP包,主要用于阐述App的核心功能与附加服务。它向上能够为features层和products层直接给予能力方面的支持,向下则依靠运行设备平台的系统能力。ArkUI - X框架的Bridge能力,为功能模块直接调用Android/iOS平台的能力提供了有力的支撑。

  需要注意的是,commons层应当合理规划模块设置,谨慎对待模块间的依赖关系,避免出现循环依赖等问题。

  建议开发者首先考虑使用ArkUI-X框架已有API进行开发。

  根据当前ArkUI-X框架的适配现状,可分为三种改造方式,结合架构图commons层 NetWork进行说明。至于工程中具体的文件部署细节详见:工程目录结构设计。

  说明: 示例代码主要展示整体流程、架构。相关代码细节如接口定义、函数功能实现等需开发者根据实际进行开发填充。

相关文章
|
2月前
|
存储 IDE 开发工具
ArkUI-X跨平台框架接入指南
ArkUI-X是ArkUI的跨平台扩展框架,支持OpenHarmony、Android和iOS等多平台开发,未来还将增加更多平台支持。开发者只需一套主代码即可构建高性能、精美的多平台应用。使用DevEco Studio进行ArkUI-X开发时,需注意:仅支持ArkUI-X源码调试,各平台Native代码需用对应IDE处理;支持真机与模拟器调试;需配置相关SDK(如Android SDK)及环境变量(如ANDROID_HOME)。创建工程后,可通过DevEco Studio编译生成跨平台应用包,并在不同平台上运行查看效果。
231 64
|
1月前
|
移动开发 开发工具 Android开发
ArkUI-X跨平台技术落地-华为运动健康(二)
本文介绍了ArkUI-X在华为运动健康应用中的实践,涵盖原生与ArkUI界面参数传递、跨平台bridge桥接通信、平台差异化动态编译处理及性能表现。通过intent与putExtra()实现页面参数传递,定义5类bridge(数据、设备、页面跳转、日志、用户账户)提升跨平台与原生交互能力。采用编译前动态修改import技术屏蔽多端差异,确保业务代码复用。ArkUI-X跨平台页面达到60fps滑动帧率,包体积增加19MB,内存表现与原生持平。目前心脏健康模块已在iOS商用,Android版处于Beta阶段,未来将迁移更多高频模块至ArkUI-X框架,进一步提升开发效率与用户体验。
|
1月前
|
JSON API Android开发
ArkUI-x跨平台Bridge最佳实践
ArkUI-X框架的bridge核心架构思想旨在实现ArkTS与平台原生语言(如Java、OC)之间的通信,支持业务层通信及跨平台API中转。bridge具备三种能力:多种桥接模式(JSON、二进制、线程并发)、数据与方法互传,以及“一码三平台”支持。通过分层架构设计,上层业务调用统一接口,下层实现平台差异化逻辑。FAQ部分提供了HMS API跨平台改造方案,包括动态import优化以避免crash问题,提升代码效率与整洁性。
130 44
|
1月前
|
Android开发
ArkUI-X与Android联动编译开发指南
本文介绍通过CLI工具链创建项目并生成联动编译脚本,实现Android Studio编译Android应用时自动编译ArkTS源码并将产物拷贝至Android工程。其功能包括手动配置ArkTS源码编译开关、编译module及文件输出路径。文章详细说明了编译配置方法,如设置`configBuildFlag`开关触发编译脚本、添加跨平台module(例:`moduleLists=entry,testmodule`)、修改Android的arkuix和systemRes输出路径。相关脚本位于`.arkui-x/android`目录。
|
1月前
|
移动开发 JSON Android开发
ArkUI-X跨平台技术落地-华为运动健康(一)
华为运动健康App在多端开发中面临工作量大和体验不一致的问题,传统H5技术虽可跨平台但性能不足。为此,在鸿蒙NEXT版本开发中引入ArkUI-X框架,实现“一次开发、三端部署”。具体策略为:首页保留原生开发,二级页面(如心脏健康、睡眠)采用ArkUI-X技术复用代码,三级及低频页面仍使用H5。同时,通过抽象数据平台接口、bridge桥接底层能力差异等方式,解决多端数据与功能适配问题,大幅降低开发成本并提升用户体验一致性。架构设计上,新增独立跨平台Entry模块与健康Module,支持编译hap包供Android和iOS复用,形成高效跨平台解决方案。
|
1月前
|
开发工具 Android开发
ArkUI-X添加到现有Android项目中
本教程介绍如何使用ArkUI-X SDK开发Android AAR,实现ArkTS声明式开发在Android平台的显示。主要内容包括:1) 跨平台Library工程开发;2) AAR在Android应用中的集成方式。通过ACE Tools或DevEco Studio完成AAR构建,初始化ArkUI-X,并通过Activity或Fragment加载页面。具体步骤涵盖工程创建、构建AAR包、配置Manifest及使用Intent或Fragment打开页面等。
133 57
|
1月前
|
IDE API 开发工具
ArkUI-X平台差异化
跨平台使用场景是一套ArkTS代码运行在多个终端设备上,如Android、iOS、OpenHarmony(含基于OpenHarmony发行的商业版,如HarmonyOS Next)。当不同平台业务逻辑不同,或使用了不支持跨平台的API,就需要根据平台不同进行一定代码差异化适配。当前仅支持在代码运行态进行差异化,接下来详细介绍场景及如何差异化适配。
109 43
|
1月前
|
Android开发 开发者
ArkUI-X中Plugin生命周期开发指南
ArkUI-X插件用于扩展ArkUI应用功能,支持管理插件生命周期。本文聚焦于Android平台ArkUI-X插件生命周期的使用,介绍如何通过实现`IArkUIXPlugin`接口创建插件,包括`onRegistry`初始化和`onUnRegistry`销毁方法。开发者可通过`addPlugin`方法在`StageActivity`中注册插件,确保调用顺序正确(需在`super.onCreate()`前)。示例代码展示了插件的创建、资源管理和注册流程,帮助开发者快速上手。
123 57
|
29天前
|
开发框架 开发工具 Android开发
ArkUI-X应用工程结构说明
本文档介绍了ArkUI-X的跨平台开发框架,扩展OpenHarmony ArkUI至Android和iOS平台。开发者可复用大部分UI与逻辑代码,降低跨平台开发成本。文档详细说明了应用工程目录结构,包括跨平台模块配置(`arkui-x-config.json5`)以及ArkTS、ArkUI资源的编译构建流程。在Android平台上,资源通过`assets`管理;在iOS平台上,资源通过`Bundle Resources`管理。此外,还展示了Android与iOS应用工程的具体结构,涵盖编译后的字节码文件、资源文件及框架动态库等内容。
|
29天前
|
JSON Java API
ArkUI-X平台桥接Bridge说明
平台桥接实现ArkUI与Android/iOS间的双向数据传递及方法调用,支持数据类型包括JSON和二进制格式,适用于复用平台代码、跨平台API缺失的场景。开发者可通过Bridge API自定义Android或iOS代码,完成如数据传递、调用平台API或复用三方库等功能。文档提供ArkTS与Java/Objective-C交互的详细指引,涵盖基础数据类型、数组和结构化数据的支持。