拉不拉稀肚拉稀 发表于 2025-1-12 07:15:47

鸿蒙5.0开发【API13】体系本领SystemCapability使用

概述

体系本领与 API

SysCap,全称SystemCapability,即体系本领,指操纵体系中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是体系本领之一。每个体系本领对应多个API,随着目标装备是否支持该体系本领共同存在或消失,也会随着DevEco Studio一起提供给开发者做遐想。
https://i-blog.csdnimg.cn/direct/dee0c54ba2cd4f8481daf15a03f2d6f9.png
开发者可以在中查询HarmonyOS的本领集。
支持本领集,遐想本领集与要求本领集

支持本领集,遐想本领集与要求本领集都是体系本领的集合。
支持本领集描述的是装备本领,要求本领集描述的是应用本领。若应用A的要求本领集是装备N的支持本领集的子集,则应用A可分发到装备N上安装运行,否则不能分发。
遐想本领集是该应用开发时,DevEco Studio可遐想的API所在的体系本领集合。
https://i-blog.csdnimg.cn/direct/19b95cbd0f444c5298204274b50e5deb.png
装备与支持本领集

每个装备根据其硬件本领,对应差别的支持本领集。
SDK将装备分为两组,典型装备和自定义装备,典型装备的支持本领集由HarmonyOS来定义,自定义装备由装备厂商给出。
https://i-blog.csdnimg.cn/direct/10efab9261d14cb69c4a7dafb36cd537.png
装备与SDK本领的对应

SDK向DevEco Studio提供全量API,DevEco Studio识别开发者项目中选择的装备形态,找到该装备的支持本领集,筛选支持本领集包含的API并提供API遐想。
https://i-blog.csdnimg.cn/direct/4389822a4ea7402faf05e3a3948645b1.png
SysCap开发指导

加入自定义syscap

在某具体的装备型号上,本领可能超出工程默认装备定义的本领集范围,假如需要使用此部分本领,需要额外配置自定义的syscap。
请在DevEco Studio工程的模块/src/main目录下,手动创建syscap.json文件。如在entry/src/main目录右键,点击New > File。
https://i-blog.csdnimg.cn/direct/1e35b833ee9d4c90881a34b544dd27cb.png
新建文件定名为syscap.json。
https://i-blog.csdnimg.cn/direct/5c2584e01b514debabb4416207530bbc.png
打开新建的syscap.json文件。
https://i-blog.csdnimg.cn/direct/ee733db1aef84035acb3ff281b4d0aa4.png
按如下格式填入所需要使用的SysCaps。以使用NFC本领为例,syscap.json文件示比方下。
{
"devices": {
    "general": [
      // 每一个典型设备对应一个syscap支持能力集,可配置多个典型设备,应与工程所选择的设备一致
      "phone"
    ]
},
"development": {
    // addedSysCaps内的sycap集合与devices中配置的各设备支持的syscap集合的并集共同构成联想能力集。
    "addedSysCaps": [
      "SystemCapability.Communication.NFC.Core",
      "SystemCapability.Communication.NFC.CardEmulation",
      "SystemCapability.Communication.NFC.Tag"
    ]
}
}
单装备应用开发

默认应用的遐想本领集,要求体系本领集和装备的支持体系本领集相当,开发者修改要求本领集需要慎重。
https://i-blog.csdnimg.cn/direct/5b0a597dc0bd40bf8d1386f4f0e844af.png
跨装备应用开发

默认应用的遐想本领集是多个装备支持本领集的并集,要求本领集则是交集。
https://i-blog.csdnimg.cn/direct/1dd3fe1cc2494eae9ad8df6b83950b44.png
判断 API 是否可以使用

当前提供了ArkTS API和Native API用于帮助判断某个API是否可以使用。


[*] ArkTS API
[*] 方法1:体系定义了API canIUse帮助开发者来判断该装备是否支持某个特定的syscap。
if (canIUse("SystemCapability.ArkUI.ArkUI.Full")) {
   console.log("该设备支持SystemCapability.ArkUI.ArkUI.Full");
} else {
   console.log("该设备不支持SystemCapability.ArkUI.ArkUI.Full");
}


[*]方法2:开发者可通过import的方式将模块导入,若当前装备不支持该模块,import的结果为undefined,开发者在使用其API时,需要判断其是否存在。
import geolocationManager from '@ohos.geoLocationManager';

if (geolocationManager) {
geolocationManager.getCurrentLocation((location) => {
    console.log('current location: ' + JSON.stringify(location));
});
} else {
console.log('该设备不支持位置信息');
}


[*]Native API
#include <stdio.h>
#include <stdlib.h>
#include "syscap_ndk.h"

char syscap[] = "SystemCapability.ArkUI.ArkUI.Full";
bool result = canIUse(syscap);
if (result) {
    printf("SysCap: %s is supported!\n", syscap);
} else {
    printf("SysCap: %s is not supported!\n", syscap);
}
除此之外,开发者可以通过API参考文档查询API接口所属的SysCap。
差别装备类似本领的差异检查

即使是类似的体系本领,在差别的装备下,也会有本领的差异。比如同是摄像头的本领,平板装备优于智能穿戴装备。
import userAuth from '@ohos.userIAM.userAuth';

const authenticator = userAuth.getAuthenticator();
const result = authenticator.checkAbility('FACE_ONLY', 'S1');

if (result == authenticator.CheckAvailabilityResult.AUTH_NOT_SUPPORT) {
    console.log('该设备不支持人脸识别');
}
//强行调用不支持的 API 会返回错误信息,但不会出现语法错误。
authenticator.execute('FACE_ONLY', 'S1', (err, result) => {
    if (err) {
      console.log(err.message);
      return;
    }
})
装备间的SysCap差异如何产生的

装备的SysCap因产品办理方案厂商拼装的部件组合差别而差别,团体流程如下图:
https://i-blog.csdnimg.cn/direct/c469660c20484a17bfd84707b7e8cef5.png

[*]一套操纵体系源码由可选和必选部件集组成,差别的部件为对外体现的体系本领差别,即部件与 SysCap 之间映射关系。
[*]发布归一化的SDK,API与SysCap之间存在映射关系。
[*]产品办理方案厂商按硬件本领和产品诉求,可按需拼装部件。
[*]产品配置的部件可以是体系部件,也可以是三方开发的私有部件,由于部件与SysCap间存在映射,全部拼装后即可得到该产品的SysCap集合。
[*]SysCap集编码生成 PCID (Product Compatibility ID, 产品兼容性标识),应用开发者可将PCID导入IDE解码成SysCap,开发时对装备的SysCap差异做兼容性处理。
[*]部署到装备上的体系参数中包含了SysCap集,体系提供了native的接口和应用接口,可供体系内的部件和应用查询某个SysCap是否存在。
[*]应用开发过程中,应用必要的SysCap将被编码成RPCID(Required Product Compatibility ID),并写入应用安装包中。应用安装时,包管理器将解码RPCID得到应用需要的 SysCap,与装备当前具备的SysCap比力,若应用要求的SysCap都被满足,则安装成功。
[*]应用运行时,可通过canIUse接口查询装备的SysCap,保证在差别装备上的兼容性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 鸿蒙5.0开发【API13】体系本领SystemCapability使用