赞
踩
定义:一套代码工程,一次开发上架,多端按需部署。
为了实现“一多”的目标,需要解决如下三个基础问题:
问题1:页面如何适配
不同设备间的屏幕尺寸、色彩风格等存在差异,页面如何适配。
问题2:功能如何兼容
不同设备的系统能力有差异,如智能穿戴设备是否具备定位能力、智慧屏是否具备摄像头等,功能如何兼容。
问题3:工程如何组织
如何实现一套代码同时能部署到多种不同设备上,代码工程如何组织。
根据容器的大小自动变化布局,一共有7种自适应布局能力
根据某个特征触发布局的变化,基于断点、媒体查询、栅格等能力
断点
将窗口宽度划分为不同的范围(即断点),监听窗口尺寸变化,当断点改变时同步调整页面布局。
媒体查询
媒体查询支持监听窗口宽度、横竖屏、深浅色、设备类型等多种媒体特征,当媒体特征发生改变时同步调整页面布局。
栅格布局
栅格组件将其所在的区域划分为有规律的多列,通过调整不同断点下的栅格组件的参数以及其子组件占据的列数等,实现不同的布局效果。
自定义资源
HarmonyOS使用SysCap机制(即SystemCapability),简单来说,就是所有设备开发的SDK是一样的。
那么当系统能力和应用要求能力冲突怎么办呢?
以下是解决方案:
系统能力(即SystemCapability,缩写为SysCap)指操作系统中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是系统能力之一。每个系统能力对应多个API
注意:
只有当应用要求能力集是设备支持能力集的子集的时候,应用才可以在该设备上分发、安装和运行。
使用前需要判断设备是否支持该系统能力:
方法1:HarmonyOS定义了API canIUse帮助开发者来判断该设备是否支持某个特定的syscap
if (canIUse("SystemCapability.Communication.NFC.Core")) {
console.log("该设备支持SystemCapability.Communication.NFC.Core");
} else {
console.log("该设备不支持SystemCapability.Communication.NFC.Core");
}
方法2:开发者可通过import的方式将模块导入,若当前设备不支持该模块,import的结果为undefined,开发者在使用其API时,需要判断其是否存在。
import controller from '@kit.ConnectivityKit';
try {
controller.enableNfc();
console.log("controller enableNfc success");
} catch (busiError) {
console.log("controller enableNfc busiError: " + busiError);
}
三层架构规范
common(公共能力层):用于存放公共基础能力集合(如工具库、公共配置等)。
common层不可分割,需编译成一个HAR包,其只可以被products和features依赖,不可以反向依赖。
features(基础特性层):用于存放基础特性集合(如应用中相对独立的各个功能的UI及业务逻辑实现等)。
各个feature高内聚、低耦合、可定制,供产品灵活部署。不需要单独部署的feature通常编译为HAR包,供products或其它feature使用。需要单独部署的feature通常编译为Feature类型的HAP包,和products下Entry类型的HAP包进行组合部署。features层可以横向调用及依赖common层,同时可以被products层不同设备形态的HAP所依赖,但是不能反向依赖products层。
products(产品定制层):用于针对不同设备形态进行功能和特性集成。
products层各个子目录各自编译为一个Entry类型的HAP包,作为应用主入口。products层不可以横向调用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。