【HarmonyOS学习日志(10)】一次开发,多端部署之功能级一多开发,工程级一多开发

功能级一多开发

SysCap机制介绍

HarmonyOS使用SysCap机制(即SystemCapability),可以帮助开发者仅关注设备的系统能力,而不用考虑成百上千种具体的设备类型。

在过去,开发不同设备上的应用就用不同设备的SDK进行开发,这些SDK都是独立存在的。在这种情况下进行多设备的开发的时候就要进行很多的适配。

HarmonyOS给开发者提供了一个统一的HarmonyOS SDK来进行多设备开发。

能力集

**系统能力集:**操作系统中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是系统能力之一。

**支持能力集:**描述当前设备能够支持哪些功能。

**要求能力集:**描述当前应用,具有哪些能力。

有了这样的能力集,我们通过设备支持能力集和应用要求能力集来控制多设备应用的分发和安装。

如图,应用a有蓝牙,设备AB都有蓝牙,那么就可以将应用a安装到设备AB中

应用b多了一个NFC功能,那么它就不能安装到设备A中。

如果一定要让应用b安装到设备A中呢?

我们可以使用canIUse接口来实现。

canIUse接口

在编码阶段,开发者可以通过canIUse接口,判断目标设备是否支持某系统能力,进而执行不同的业务逻辑。通常当设备不支持某种能力时,运行到这部分代码后,给出友好弹窗,避免应用crush崩溃。

复制代码
aboutToAppear() {
    if(canIUse('SystemCapability.Communication.NFC.Core')) {
        controller.on('nfcStateChange',(err,nfcState) => {
            this.message = 'nfcState: ' + nfcState
        })
    }else {
        this.message = 'This device does not support NFC.'
    }
}

在这段代码中,我们使用canIUseNFC这个能力进行判断,代码在设备A上进行执行时,就会给用户弹出一个友好的弹窗,来提示用户该设备不支持NFC功能。在设备B上执行则功能正常运行。

工程级一多开发

三层架构规范

推荐在应用开发过程中使用如下的"三层工程结构",以方便代码复用及提升开发效率。

  • **common(公共能力层):**用于存放公共基础能力集合(如公共配置等)。其只可以被product和features依赖,不可以反向依赖。

  • **features(基础特性层):**用于存放相对独立的UI及逻辑实现等。其可以横向调用及依赖common层,但不能反向依赖product层。

  • **product(产品定制层):**用于针对不同设备形态进行功能和特性集成,作为应用主入口,product层不可以横向调用。

    /application
    common //公共能力层

    复制代码
     features           //基础特性层
         feature1       //子功能
         feature2       //子功能2
         feature3
         ...
          
     product            //产品定制层
         werable        //智能穿戴泛类目录
         default        //默认设备泛类目录
         ...

在之前学习过的内容中也提到了三层工程结构。当某一层级需要调用其他层级的模块时需要在module.json文件中dependencies部分中填写对需要模块的依赖,方便后续使用。

相关推荐
CappuccinoRose6 分钟前
Rust学习文档(二)
开发语言·后端·学习·rust
冻感糕人~21 分钟前
大模型学习指南:收藏这份AI Agent四层工程地图(小白程序员必备)
java·大数据·人工智能·学习·大模型·agent·大模型学习
木木子2232 分钟前
# 计算器应用 — HarmonyOS Grid布局与交互逻辑深度解析
华为·交互·harmonyos
曲三酒馆1 小时前
“强比命打,钱娃D写”——这8个字就是我人生的全部了![特殊字符]
学习·生活·娱乐
统计学小王子1 小时前
《数学少年-确定与不确定》(第四章:“骰子不骗人“)
学习·初中数学科普
爱写代码的阿森1 小时前
鸿蒙三方库 | harmony-utils之NumberUtil数值判断与转换详解
华为·harmonyos·鸿蒙·huawei
其实防守也摸鱼1 小时前
前端应用的离线暂停更新策略:构建稳定可靠的渐进式部署方案
服务器·前端·数据库·学习·ai·命令行·linux系统
爱写代码的阿森1 小时前
鸿蒙三方库 | harmony-utils之StrUtil字符串转换与替换详解
华为·harmonyos·鸿蒙·huawei
MartinYeung51 小时前
[论文学习]Mamba:具有选择性状态空间的线性时间序列建模
学习
j7~1 小时前
【数据结构初阶】队列的实现(链式队列 + 循环队列)--详解
c语言·开发语言·数据结构·学习·队列·queue·c\c++