OpenHarmony 系统能力 SystemCapability 使用指南

news2024/11/18 13:35:18

一、概述

1、系统能力与 API

SysCap,全称 SystemCapability,即系统能力,指操作系统中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是系统能力之一。每个系统能力对应多个 API,随着目标设备是否支持该系统能力共同存在或消失,也会随着 DevEco Studio 一起提供给开发者做联想。

开发者可以在 SysCap 列表中查询 OpenHarmony 的能力集。

2、支持能力集,联想能力集与要求能力集

支持能力集,联想能力集与要求能力集都是系统能力的集合。支持能力集描述的是设备能力,要求能力集描述的是应用能力。若应用 A 的要求能力集是设备 N 的支持能力集的子集,则应用 A 可分发到设备 N 上安装运行,否则不能分发。联想能力集是该应用开发时,DevEco Studio 可联想的 API 所在的系统能力集合。

3、设备与支持能力集

每个设备根据其硬件能力,对应不同的支持能力集。SDK 将设备分为两组,典型设备和自定义设备,典型设备的支持能力集由 OpenHarmony 来定义,自定义设备由设备厂商给出。

4、设备与 SDK 能力的对应

SDK 向 DevEco Studio 提供全量 API,DevEco Studio 识别开发者项目中选择的设备形态,找到该设备的支持能力集,筛选支持能力集包含的 API 并提供 API 联想。

二、SysCap 开发指导

1、PCID 获取

PCID,全称 Product Compatibility ID,包含当前设备支持的 SysCap 信息。获取所有设备 PCID 的认证中心正在建设中,目前需要找对应设备的厂商获取该设备的 PCID。

2、PCID 导入

DevEco Studio 工程支持 PCID 的导入。导入的 PCID 文件解码后输出的 SysCap 会被写入 syscap.json 文件中。

在工程目录右键后选择 Import Product Compatibility ID,即可上传 PCID 文件并导入至 syscap.json 中。

3、配置联想能力集和要求能力集

DevEco Studio 会根据创建的工程所支持的设置自动配置联想能力集和要求能力集,开发者也可以自行修改。

对于联想能力集,开发者通过添加更多的系统能力,在 DevEco Studio 中可以使用更多的 API,但要注意这些 API 可能在设备上不支持,使用前需要判断。

对于要求能力集,开发者修改时要十分慎重,修改不当会导致应用无法分发到目标设备上。

// syscap.json{	"devices": {		"general": [            // 每一个典型设备对应一个syscap支持能力集,可配置多个典型设备			"default",			"car"		],		"custom": [             // 厂家自定义设备			{				"某自定义设备": [					"SystemCapability.Communication.SoftBus.Core"				]			}		]	},	"development": {             // addedSysCaps内的sycap集合与devices中配置的各设备支持的syscap集合的并集共同构成联想能力集		"addedSysCaps": [			"SystemCapability.Location.Location.Lite"		]	},	"production": {              // 用于生成rpcid,慎重添加,可能导致应用无法分发到目标设备上		"addedSysCaps": [],      // devices中配置的各设备支持的syscap集合的交集,添加addedSysCaps集合再除去removedSysCaps集合,共同构成要求能力集		"removedSysCaps": []     // 当该要求能力集为某设备的子集时,应用才可被分发到该设备上	}}

4、单设备应用开发

默认应用的联想能力集,要求系统能力集和设备的支持系统能力集相等,开发者修改要求能力集需要慎重。

5、跨设备应用开发

默认应用的联想能力集是多个设备支持能力集的并集,要求能力集则是交集。

6、判断 API 是否可以使用

方法 1:OpenHarmony 定义了 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 geolocation from '@ohos.geolocation';
if (geolocation) {    geolocation.getCurrentLocation((location) => { 	   console.log(location.latitude, location.longitude);    });} else {    console.log('该设备不支持位置信息');}

除此之外,开发者可以通过 API 参考文档查询 API 接口所属的 SysCap。

7、不同设备相同能力的差异检查

即使是相同的系统能力,在不同的设备下,也会有能力的差异。比如同是摄像头的能力,平板设备优于智能穿戴设备。

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;	}})

8、设备间的 SysCap 差异如何产生的

设备的 SysCap 因产品解决方案厂商拼装的部件组合不同而不同,整体流程如下图:

  1. 一套 OpenHarmony 源码由可选和必选部件集组成,不同的部件为对外体现的系统能力不同,即部件与 SysCap 之间映射关系。

  2. 发布归一化的 SDK,API 与 SysCap 之间存在映射关系。

  3. 产品解决方案厂商按硬件能力和产品诉求,可按需拼装部件。

  4. 产品配置的部件可以是 OpenHarmony 的部件,也可以是三方开发的私有部件,由于部件与 SysCap 间存在映射,所有拼装后即可得到该产品的 SysCap 集合。

  5. SysCap 集编码生成 PCID (Product Compatibility ID, 产品兼容性标识),应用开发者可将 PCID 导入 IDE 解码成 SysCap,开发时对设备的 SysCap 差异做兼容性处理。

  6. 部署到设备上的系统参数中包含了 SysCap 集,系统提供了 native 的接口和应用接口,可供系统内的部件和应用查询某个 SysCap 是否存在。

  7. 应用开发过程中,应用必要的 SysCap 将被编码成 RPCID(Required Product Compatibility ID),并写入应用安装包中。应用安装时,包管理器将解码 RPCID 得到应用需要的 SysCap,与设备当前具备的 SysCap 比较,若应用要求的 SysCap 都被满足,则安装成功。

  8. 应用运行时,可通过 canIUse 接口查询设备的 SysCap,保证在不同设备上的兼容性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python模板注入(SSTI)

概念 发生在使用模板引擎解析用户提供的输入时。模板注入漏洞可能导致攻击者能够执行恶意代码或访问未授权的数据。 模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码分离。即也拓宽了攻击面,注入到模板中的代码可…

flutter聊天界面-TextField输入框实现@功能等匹配正则表达式展示高亮功能

flutter聊天界面-TextField输入框实现功能等匹配正则表达式展示高亮功能 一、简要描述 描述: 最近有位朋友讨论的时候,提到了输入框的高亮展示。在flutter TextField中需要插入特殊样式的标签,比如:“请 张三 回答一下”&#x…

streamlit打包方式

Streamlit是一个开放的资源框架,用于将数据脚本转换为可共享的 Web 应用程序。它允许数据科学家和机器学习工程师构建直观的界面,而无需了解 Web 开发。在本教程中,我们将学习一些将 Streamlit 应用程序转换为双击可执行文件的方法&#xff0…

贪心(5)

绝对值不等式 |x-a||x-b|>|a-b| (中位数) 仓库选址(中位数就是最优解) 在一条数轴上有 N 家商店,它们的坐标分别为 A1∼AN。 现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商…

山区自建房BCD浪涌保护器接线方案(自建房用电防雷)

家庭(自建房)电路防雷保护指南 家庭(自建房)电路防雷保护指南.png 已共享。 链接: https://pan.baidu.com/s/1xkwsIgizg4WvLJ8V3cd_ZQ?pwde9pv 提取码: e9pv 山区自建房BCD浪涌保护器接线方案。

小土堆pytorch学习笔记

想入门pytorch强化学习,就去找pytorch的课来看。B站上播放量最高的就是小土堆的课,整体跟下来感觉内容还是很详细的,但和我的预期不太一样,这个是DL的不是RL的,不过作为对于pytorch使用的初期了解也是很好的&#xff0…

【Linux网络编程】Socket-TCP实例

netstat -nltp 无法用read函数读取UDP套接字的数据&#xff0c;因为UDP是面向数据报&#xff0c;而TCP是面向数据流。 客户端不需要 bind&#xff0c;listen&#xff0c;accept&#xff0c;但是客户端需要connect&#xff0c;connect会自动做bind工作。 #include <sys/sock…

前端开发工作中可能会遇到的问题及解决方法

一、uni-app小程序中xxx代码依赖分析忽略二、uni-app弹窗列表滚动, 弹框下面的内容也跟随滚动三、uni-app小程序正常自定义组件不生效 四、uni-app popup 弹出层底部空隙问题 五、uni-app小程序自定义导航栏后iOS页面可上下滑动问题解决方案 六. uni-app中的分享二维码以及…

5个关键步骤助您顺利开发跑腿小程序

作为跑腿服务的热门方式&#xff0c;跑腿小程序的开发成为了许多创业者和企业的首选。然而&#xff0c;要成功开发一款出色的跑腿小程序&#xff0c;并不是一件轻松的事情。本文将为您揭示5个关键步骤&#xff0c;助您在开发跑腿小程序的道路上顺利前行。 步骤一&#xff1a;需…

java项目之固定资产管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的固定资产管理系统。源码和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&…

Games101作业7 蒙特卡洛路径追踪

文章目录 基本思想基本代码问题1:我们采取每次弹射都弹射N跟光线&#xff0c;此时会发生指数爆炸问题2:这是一个递归的过程&#xff0c;递归的终止条件我们还没规定优化&#xff0c;对光源直接进行采样 本文不涉及:蒙特卡洛积分的原理以及渲染方程是如何推到出来&#xff0c;而…

长胜证券:全球年内最大IPO“首秀”,标普香港创业板指数即将归零?

当地时间周四&#xff0c;美股三大股指团体上涨。到收盘&#xff0c;道指涨0.96%&#xff0c;报34907.11点&#xff1b;标普500指数涨0.84%&#xff0c;报4505.10点&#xff1b;纳指涨0.81%&#xff0c;报13926.05点。 美国8月PPI数据、零售出售月率双双超预期。美国8月PPI同比…

【Feign】feignclient发送formdata请求

文章目录 前言实操示例代码注意 常见问题formdata类型的post请求&#xff0c;为什么参数会被拼到url上&#xff1f;分析总结 RequestPart只可以接收文件吗&#xff1f;分析一些示例注意 前言 小伙伴们在使用feign进行远程调用时&#xff0c;会遇到formdata类型的post请求&…

5.docker可视化工具(Portainer)

本文操作&#xff0c;在 192.168.204.102 机器执行 安装最新版 portainer&#xff0c;请使用 portainer/portainer-ce 镜像。图片来源&#xff1a;https://hub.docker.com/r/portainer/portainer。   来这里可查看最新版本&#xff1a;https://github.com/portainer/p…

SQL 注入攻击的原理是什么

什么是 SQL 注入攻击&#xff0c;SQL 注入攻击的原理是什么 SQL 注入攻击是一种常见的网络安全漏洞&#xff0c;攻击者可以通过注入恶意 SQL 语句来攻击 Web 应用程序。本篇文章将介绍 SQL 注入攻击的原理和如何防范 SQL 注入攻击&#xff0c;并提供一些代码示例。 什么是 SQL…

数据库逻辑透明-架构真题(二十九)

&#xff08;2020年&#xff09;假设某计算机字长为32位&#xff0c;该计算机文件管理系统磁盘空间管理采用位示图&#xff08;bitmap&#xff09;记录磁盘的使用情况。若磁盘的容量为300GB&#xff0c;物理块大小为4MB&#xff0c;那么位示图的大小为&#xff08;&#xff09;…

LeetCode LCR 026. 重排链表

LCR 026. 重排链表 中等 128 相关企业 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不能只是单纯的改变节点内部的值&#xff0c…

服务拓扑串联难?eBPF为滴滴可观测带来解题新思路

上篇文章我们讲到可观测性在滴滴的实践与落地&#xff0c;更多关注的是不同观测信号之间的关联关系。那服务与服务之间的关系又如何串联&#xff0c;业界当前爆火的 ebpf 又在滴滴有着怎样的应用&#xff0c;本文为你揭晓。 背景 业务介绍&#xff1a;业务接口调用观测 滴滴可观…

基于Linux对MySQL数据库的安全加固指南(超实用--实战版)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

零基础学前端(四)重点讲解 CSS

1. 该篇适用于从零基础学习前端的小白 2. 初学者不懂代码得含义也要坚持模仿逐行敲代码&#xff0c;以身体感悟带动头脑去理解新知识 3. 初学者切忌&#xff0c;不要眼花缭乱&#xff0c;不要四处找其它文档&#xff0c;要坚定一个教授者的方式&#xff0c;将其学通透&#xff…