电子说
随着终端设备形态日益多样化,分布式技术逐渐打破单一硬件边界,一个应用或服务,可以在不同的硬件设备之间随意调用、互助共享,让用户享受无缝的全场景体验。而作为应用开发者,广泛的设备类型也能为应用带来广大的潜在用户群体。但是如果一个应用需要在多个设备上提供同样的内容,则需要适配不同的屏幕尺寸和硬件,开发成本较高。OpenHarmony系统面向多终端提供了“一次开发,多端部署”(后文中简称为“一多”)的能力,让开发者可以基于一种设计,高效构建多端可运行的应用。
开发前请熟悉鸿蒙开发指导文档:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
定义 :一套代码工程,一次开发上架,多端按需部署。
目标 :支撑开发者快速高效的开发支持多种终端设备形态的应用,实现对不同设备兼容的同时,提供跨设备的流转、迁移和协同的分布式体验。
为了实现“一多”的目标,需要解决两个基础问题:
从第4章开始将从UX设计、系统能力等角度,详尽的解答上述问题。
说明:
- 应用开发不仅包含应用页面开发,还包括应用后端功能开发以及服务器端开发等。
- 本文旨在指导开发者如何开发“一多”应用,服务器端开发不在本文探讨范围内。
为了更好的阅读后面的章节,本小节主要介绍了一些基础知识,方便读者理解内容。
[方舟开发框架](简称:ArkUI)提供开发者进行应用UI开发时所必须的能力。
方舟开发框架提供了两种开发范式,分别是基于JS扩展的类Web开发范式(后文中简称为“类Web开发范式”)和基于ArkTS的声明式开发范式(后文中简称为“声明式开发范式”)。
两种开发范式的对比如下。
开发范式名称 | 语言生态 | UI更新方式 | 适用场景 | 适用人群 |
---|---|---|---|---|
声明式开发范式 | ArkTS语言 | 数据驱动更新 | 复杂度较大、团队合作度较高的程序 | 移动系统应用开发人员、系统应用开发人员 |
类Web开发范式 | JS语言 | 数据驱动更新 | 界面较为简单的中小型应用和卡片 | Web前端开发人员 |
说明: 声明式开发范式占用内存更少, 更推荐开发者选用声明式开发范式来搭建应用UI界面 。
在进行应用开发时,一个应用通常包含一个或多个Module。Module是应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。
Module分为“Ability”和“Library”两种类型:
应用以APP Pack形式发布,其包含一个或多个HAP包。HAP是应用安装的基本单位,HAP可以分为Entry和Feature两种类型:
说明: 关于Entry类型的HAP包、Feature类型的HAP包、HAR包、HSP包以及APP Pack的详细介绍请参考[应用程序包结构说明]
“一多”有两种部署模型:
开发者可以从应用UX设计及应用功能两个维度,结合具体的业务场景,考虑选择哪种部署模型。当然,也可以借助设备类型分类,快速做出判断。
从屏幕尺寸、输入方式及交互距离三个维度考虑,可以将常用类型的设备分为不同泛类:
对于相同泛类的设备,优先选择部署模型A,对于不同泛类设备,优先选择部署模型B。
说明:
- 应用在不同泛类设备上的UX设计或功能相似时,可以使用部署模型A。
- 应用在同一泛类不同类型设备上UX设计或功能差异非常大时,可以使用部署模型B,但同时也应审视应用的UX设计及功能规划是否合理。
- 本小节引入部署模型A和部署模型B的概念是为了方便开发者理解。实际上在开发多设备应用时,如果目标设备类型较多,往往是部署模型A和部署模型B混合使用。
- 不管采用哪种部署模型,都应该采用一次编译。
“一多”推荐在应用开发过程中使用如下的“三层工程结构”。
代码工程结构抽象后一般如下所示:
/application
├── common # 可选。公共能力层, 编译为HAR包或HSP包
├── features # 可选。基础特性层
│ ├── feature1 # 子功能1, 编译为HAR包或HSP包或Feature类型的HAP包
│ ├── feature2 # 子功能2, 编译为HAR包或HSP包或Feature类型的HAP包
│ └── ...
└── products # 必选。产品定制层
├── wearable # 智能穿戴泛类目录, 编译为Entry类型的HAP包
├── default # 默认设备泛类目录, 编译为Entry类型的HAP包
└── ...
`HarmonyOS与OpenHarmony鸿蒙文档籽料:mau123789是v直接拿`
说明:
- 部署模型不同,相应的代码工程结构也有差异。部署模型A和部署模型B的主要差异点集中在products层:部署模型A在products目录下同一子目录中做功能和特性集成;部署模型B在products目录下不同子目录中对不同的产品做差异化的功能和特性集成。
- 开发阶段应考虑 不同类型设备间最大程度的复用代码 ,以减少开发及后续维护的工作量。
- 整个代码工程最终构建出一个[APP包],应用以APP包的形式发布到应用市场中。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !