目录

一次开发,多端部署概览

本文介绍了“一次开发,多端部署”(后文中简称为“一多”)的定义、目标等,同时从体验设计、页面开发、功能开发等角度,端到端的给出了指导,帮助开发者快速开发出适配多种类型设备的应用。在应用开发前,开发者应尽可能全面考虑应用支持多设备的情况,避免在后期加入新的类型设备时对应用架构进行大幅调整。

本系列文章聚焦于多设备适配的通用基础指导。若需深入了解特定设备的硬件参数与体验提升设计,请参考“多端设备体验提升”专题。

背景

随着终端产品形态多样化和规模增长,未来每个人和每个家庭所拥有的智能终端数量也将不断增加,多个设备之间的连接和协同将变得更加重要,通过发挥不同形态设备的各自优势,为用户带来体验跃升。用户在使用设备时,将从当前“以设备为中心”,逐渐过渡到“以场景为中心”,各个设备在同一场景下贡献自身的价值特性,实现跨设备的互助和协作,应用服务在多个设备之间协同完成任务。

而作为应用开发者,广泛的设备类型也能为应用带来广大的潜在用户群体。但是如果一个应用需要在多个设备上提供同样的内容,则需要适配不同的屏幕尺寸和硬件,开发成本较高。HarmonyOS系统面向多终端提供了“一次开发,多端部署”(后文中简称为“一多”)的能力,让开发者可以基于一套设计,高效构建多端可运行的应用。

章节概要

本文档各章节简介如下:

关键技术

为了实现“一套代码工程,一次开发上架,多端按需部署”,在开发一多应用时,需要解决以下三个基础问题:

针对上述三个问题,HarmonyOS从页面适配、功能兼容和代码部署三个方面提供了相应的解决方案:

说明

开发路径

应用在需求明确后,开发过程通常包含:体验设计(包含界面UX设计、业务功能设计)、架构设计、界面开发、功能开发等步骤。实现一多应用同样遵循这一流程,本指导内容也据此编排。通过运用HarmonyOS的系统能力,构建完整的技术路径,从而实现“一套代码工程,一次开发上架,多端按需部署”,达成“支撑开发者快速高效的开发支持多种终端设备形态的应用,实现对不同设备兼容的同时,提供跨设备的流转、迁移和协同的分布式体验”的目标。

[h2]体验设计

支持一多的应用开发,建议在产品设计的早期阶段就纳入多设备适配的考量,通过统一规划实现跨终端的功能布局与用户体验一致性。

UX设计原则应该考虑多设备的“差异性”、“一致性”、“灵活性”和“兼容性”。

一多开发中的UX体验设计详细内容,可参见多设备体验设计。

[h2]架构设计

为了实现“一次开发,多端部署”的开发理念,HarmonyOS应用需要基于一套代码工程,一次编译构建支持华为手机、PC/2in1等1+8全场景设备,所以良好的应用架构设计至关重要。为了解决这些问题,开发者应关注分层和模块化的架构设计,通过分层和模块化,理清业务逻辑,减少代码耦合,实现灵活部署和模块级复用,满足手机、折叠屏、平板和PC等多设备部署。

架构设计的详细原理,可参见分层架构设计和模块化设计。

[h2]页面开发

[h2]功能开发

系统能力(即SystemCapability,缩写为SysCap)指操作系统中每一个相对独立的特性,如蓝牙、WIFI、NFC、摄像头等,都是系统能力之一。每个系统能力对应多个API,随着目标设备是否支持该系统能力共同存在或消失。

开发多设备应用时,工程中默认的要求能力集是多个设备支持能力集的交集,默认的联想能力集是多个设备支持能力集的并集。只有当应用要求能力集是设备支持能力集的子集的时候,应用才可以在该设备上分发、安装和运行。因此,开发一多应用时,需要借助SysCap机制,在各个环节中加以拦截或管控,保证应用可以在设备上正常安装和使用。

在本文的多设备功能开发章节,有详细的多设备功能开发实践介绍。

场景案例

依托HarmonyOS提供的“一次开发,多端部署”能力,开发者可基于一套代码体系高效适配多个垂直业务场景,实现跨设备、跨形态的应用部署。通过灵活运用该系统级特性,不仅能够覆盖手机、平板、智能穿戴等多种终端形态,还可快速响应金融、医疗、教育、交通等不同行业的多样化需求,全面提升应用开发效率与落地质量。

[h2]业务场景案例

一多在多个场景下进行适配,得到更好的浏览交互体验。以下是具体垂类场景应用给出了场景内典型页面的设计开发建议,方便设计师和开发者进行更有针对性的参考和选用。

[h2]设备场景案例

对于不同的设备,一多适配可以有效利用他们的硬件特性带来更好的体验,例如折叠屏的悬停、平板和PC/2in1的大屏等。

基础知识

为了更好的阅读后面的章节,本小节主要介绍了一些基础知识,方便开发者理解内容。

[h2]方舟开发框架

ArkUI(方舟UI框架)(简称:ArkUI)提供开发者进行应用UI开发时所必须的能力。

方舟开发框架提供了两种开发范式,分别是基于JS扩展的类Web开发范式(后文中简称为“类Web开发范式”)和基于ArkTS的声明式开发范式(后文中简称为“声明式开发范式”)。

两种开发范式的对比如下:

开发范式名称

语言生态

UI更新方式

适用场景

适用人群

声明式开发范式

ArkTS语言

数据驱动更新

复杂度较大、团队合作度较高的程序

移动系统应用开发人员、系统应用开发人员

类Web开发范式

JS语言

数据驱动更新

界面较为简单的中小型应用和卡片

Web前端开发人员

声明式开发范式占用内存更少,更推荐开发者选用声明式开发范式来搭建应用UI界面。

[h2]工程结构

HarmonyOS应用的分层架构设计基于一套代码工程,支持华为手机、PC/2in1等1+8全场景设备,实现了“一次开发,多端部署”的开发理念,包括产品定制层、基础特性层和公共能力层,构建了清晰、高效、可扩展的设计架构。“一多”推荐在应用开发过程中使用如下的“三层工程结构”。

代码工程结构抽象后一般如下所示:

/application
├── common                  # 可选。公共能力层, 编译为HAR包或HSP包
├── features                # 可选。基础特性层
│   ├── feature1            # 子功能1, 编译为HAR包或HSP包或Feature类型的HAP包
│   ├── feature2            # 子功能2, 编译为HAR包或HSP包或Feature类型的HAP包
│   └── ...
└── products                # 必选。产品定制层
    ├── wearable            # 智能穿戴泛类目录, 编译为Entry类型的HAP包
    ├── default             # 默认设备泛类目录, 编译为Entry类型的HAP包
    └── ...
  • 部署模型不同,相应的代码工程结构也有差异。部署模型A和部署模型B的主要差异点集中在products层:部署模型A在products目录下同一子目录中做功能和特性集成;部署模型B在products目录下不同子目录中对不同的产品做差异化的功能和特性集成。

  • 开发阶段应考虑不同类型设备间最大程度的复用代码,以减少开发及后续维护的工作量。

  • 整个代码工程最终构建出一个应用程序包,发布到应用市场中。

  • 参考链接:分层架构设计。

[h2]应用程序包结构

在进行应用开发时,一个应用通常包含一个或多个Module。Module是应用/元服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/元服务配置文件,每一个Module都可以独立进行编译和运行。

Module分为“Ability”和“Library”两种类型:

应用以APP Pack形式发布,其包含一个或多个HAP包。HAP是应用安装的基本单位,HAP可以分为Entry和Feature两种类型:

关于Entry类型的HAP包、Feature类型的HAP包、HAR包、HSP包以及APP Pack的详细介绍请参考应用程序包结构。

[h2]部署模型

“一多”有两种部署模型:

开发者可以从应用UX设计及应用功能两个维度,结合具体的业务场景,考虑选择哪种部署模型。当然,也可以借助设备类型分类,快速做出判断。

从屏幕尺寸、输入方式及交互距离三个维度考虑,可以将常用类型的设备分为不同泛类:

对于相同泛类的设备,优先选择部署模型A,对于不同泛类设备,优先选择部署模型B。

  • 应用在不同泛类设备上的UX设计或功能相似时,可以使用部署模型A。

  • 应用在同一泛类不同类型设备上UX设计或功能差异非常大时,可以使用部署模型B,但同时也应审视应用的UX设计及功能规划是否合理。

  • 本小节引入部署模型A和部署模型B的概念是为了方便开发者理解。实际上在开发多设备应用时,如果目标设备类型较多,往往是部署模型A和部署模型B混合使用。

  • 不管采用哪种部署模型,都应该采用一次编译。