概述
体系本领与 API
SysCap,全称SystemCapability,即体系本领,指操纵体系中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是体系本领之一。每个体系本领对应多个API,随着目标装备是否支持该体系本领共同存在或消失,也会随着DevEco Studio一起提供给开发者做遐想。
开发者可以在[SysCap列表]中查询HarmonyOS的本领集。
支持本领集,遐想本领集与要求本领集
支持本领集,遐想本领集与要求本领集都是体系本领的集合。
支持本领集描述的是装备本领,要求本领集描述的是应用本领。若应用A的要求本领集是装备N的支持本领集的子集,则应用A可分发到装备N上安装运行,否则不能分发。
遐想本领集是该应用开发时,DevEco Studio可遐想的API所在的体系本领集合。
装备与支持本领集
每个装备根据其硬件本领,对应差别的支持本领集。
SDK将装备分为两组,典型装备和自定义装备,典型装备的支持本领集由HarmonyOS来定义,自定义装备由装备厂商给出。
装备与SDK本领的对应
SDK向DevEco Studio提供全量API,DevEco Studio识别开发者项目中选择的装备形态,找到该装备的支持本领集,筛选支持本领集包含的API并提供API遐想。
SysCap开发指导
加入自定义syscap
在某具体的装备型号上,本领可能超出工程默认装备定义的本领集范围,假如需要使用此部分本领,需要额外配置自定义的syscap。
请在DevEco Studio工程的模块/src/main目录下,手动创建syscap.json文件。如在entry/src/main目录右键,点击New > File。
新建文件定名为syscap.json。
打开新建的syscap.json文件。
按如下格式填入所需要使用的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"
- ]
- }
- }
复制代码 单装备应用开发
默认应用的遐想本领集,要求体系本领集和装备的支持体系本领集相当,开发者修改要求本领集需要慎重。
跨装备应用开发
默认应用的遐想本领集是多个装备支持本领集的并集,要求本领集则是交集。
判断 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('该设备不支持位置信息');
- }
复制代码
- #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因产品办理方案厂商拼装的部件组合差别而差别,团体流程如下图:
- 一套操纵体系源码由可选和必选部件集组成,差别的部件为对外体现的体系本领差别,即部件与 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企服之家,中国第一个企服评测及商务社交产业平台。 |