OpenHarmony系统能力SystemCapability

一、概述

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文件

<think>我们正在讨论的是在OpenHarmony的ArkTS开发中添加系统权限或系统能力。根据引用[2]的内容,我们知道在OpenHarmony中,自定义权限可以通过修改系统权限声明文件并使其生效来实现。然而,用户的问题是关于添加系统权限或系统能力,这可能包括两种操作: 1. 在应用中使用系统已有的权限(例如在config.json中声明权限) 2. 自定义新的系统权限(需要系统开发,修改系统定义) 由于用户提到的是“添加系统权限或系统能力”,我们分两种情况讨论: 情况一:在应用中使用系统已有的权限(这是应用开发中常见的) 情况二:自定义系统权限(这通常需要系统定制,比如在系统源码中修改) 同时,系统能力SystemCapability)是OpenHarmony中用于描述设备能力的机制,应用可以通过声明需要的系统能力来使用相应的功能。 下面我们分别说明: ### 一、在应用中使用系统已有的权限 步骤: 1. 在应用的`module.json5`(或旧版的`config.json`)中声明需要的权限。 2. 在需要的时候动态申请权限(部分权限需要动态申请)。 示例(在module.json5中声明权限): ```json { "module": { "requestPermissions": [ { "name": "ohos.permission.INTERNET" }, { "name": "ohos.permission.LOCATION", "reason": "需要定位功能以提供附近的服务", "usedScene": { "abilities": ["MainAbility"], "when": "inuse" } } ] } } ``` 动态申请权限的ArkTS代码示例: ```typescript import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; let permissionRequestResult; async function requestPermission() { let atManager = abilityAccessCtrl.createAtManager(); try { permissionRequestResult = await atManager.requestPermissionsFromUser( getContext(this), ['ohos.permission.LOCATION'] ); if (permissionRequestResult.authResults[0] === 0) { console.log('用户已授权'); } else { console.log('用户拒绝授权'); } } catch (err) { console.error(`请求权限失败: ${err.code}, ${err.message}`); } } ``` ### 二、自定义系统权限(需要系统定制) 根据引用[2]的思路,我们可以通过修改系统源码中的权限定义文件来添加自定义权限。注意:这需要你拥有系统源码的编译环境,并且重新编译系统。 步骤: 1. 找到系统权限定义文件:`base/security/permission/services/permission_lite/profile/permission_list.json` 2. 在该文件中添加自定义权限,例如: ```json { "permissions": [ { "name": "ohos.permission.MY_TEST_PERMISSION", "grantMode": "system_grant", // 或者"user_grant" "availableLevel": "system_core", "label": "自定义权限标签", "description": "自定义权限描述" } ] } ``` 参数说明: - grantMode: 授权方式,system_grant(安装时授权)或user_grant(使用时授权) - availableLevel: 权限级别,包括system_core(系统核心权限)、system_basic(系统基础权限)和normal(普通权限) - label和description:权限的标签和描述 3. 重新编译系统并烧录到设备。 4. 在应用中使用该自定义权限(在module.json5中声明,如果是user_grant权限还需要动态申请)。 ### 三、添加系统能力SystemCapability系统能力OpenHarmony中用来标识设备能力的机制。应用可以通过在`module.json5`中声明所需的系统能力,这样应用商店可以过滤不支持该能力的设备。 在应用的`module.json5`中声明系统能力: ```json { "module": { "deviceTypes": [ "default", "tablet" ], "reqCapabilities": [ "ohos.location.geoLocationManager", "ohos.permission.WRITE_USER_STORAGE" ] } } ``` 注意:系统能力名称是预定义的,可以在官方文档中查找。 ### 注意事项 - 自定义权限需要系统定制,普通应用开发者无法直接添加,必须由设备厂商在系统开发阶段完成。 - 系统能力也是由系统预定义的,应用开发者只能声明使用,不能添加新的系统能力(除非修改系统源码,这同样是系统定制的工作)。 因此,对于大多数应用开发者,只能使用系统已有的权限和能力。 根据引用[1]和引用[3]的内容,我们还可以参考官方文档和示例代码来使用系统能力。例如,引用[3]展示了文件系统空间统计的API使用,这需要相应的系统能力支持。 ### 相关问题 §§相关问题§§ 1. 如何动态申请权限时处理用户拒绝的情况? 2. 如何检查设备是否支持某个系统能力? 3.OpenHarmony系统定制中,如何添加新的系统能力SystemCapability)? 注意:生成的相关问题需要与主题相关,并且能够帮助用户深入理解。</think>### 在 ArkTS 和 OpenHarmony 中添加系统权限或系统能力OpenHarmony 开发中,添加系统权限或系统能力需要修改系统配置文件并正确声明权限。以下是具体步骤: #### 一、添加系统权限(以自定义权限为例) 1. **修改权限配置文件** 在系统源码中找到权限定义文件(通常位于 `base/security/permission/services/permission_lite/profile/`): ```json // permission_list.json { "permissions": [ { "name": "ohos.permission.MY_TEST_PERMISSION", // 自定义权限名称 "grantMode": "system_grant", // 授权方式 "availableLevel": "normal", // 权限级别 "label": "自定义测试权限", // 权限标签 "description": "用于特殊设备操作" // 权限描述 }, ... // 其他系统权限 ] } ``` 2. **在应用配置中声明权限** 在应用的 `module.json5` 文件中添加权限声明: ```json { "module": { "requestPermissions": [ { "name": "ohos.permission.MY_TEST_PERMISSION", "reason": "需要执行特殊设备操作", "usedScene": { "abilities": ["MainAbility"], "when": "always" } } ] } } ``` 3. **编译并烧录系统** 重新编译系统镜像并烧录到设备: ```bash ./build.sh --product-name rk3568 --ccache # 示例编译命令 ``` #### 二、添加系统能力SystemCapability) 1. **在系统配置中定义能力** 修改系统能力配置文件(通常位于 `productdefine/common/inherit/`): ```json // rk3568.json { "product_name": "rk3568", "system_capabilities": [ "SystemCapability.MyCustomCapability", // 新增自定义能力 "SystemCapability.Multimedia.Camera", ... ] } ``` 2. **在应用中声明所需能力** 在应用配置文件中声明依赖的系统能力: ```json // module.json5 { "module": { "reqCapabilities": [ "SystemCapability.MyCustomCapability" ] } } ``` 3. **在代码中调用系统 API** 通过 `@system` 命名空间调用系统能力接口: ```typescript import { myCustomCapability } from '@system.myCapability'; try { const result = myCustomCapability.executeSpecialOperation(); console.log("Operation result: " + result); } catch (error) { console.error("Capability error: " + error.code); } ``` #### 三、权限动态申请(ArkTS 示例) 对于需要用户授权的权限: ```typescript import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; async function requestPermission() { const atManager = abilityAccessCtrl.createAtManager(); try { const result = await atManager.requestPermissionsFromUser( getContext(this), ['ohos.permission.MY_TEST_PERMISSION'] ); if (result.authResults[0] === 0) { console.info("Permission granted"); // 执行特权操作 } else { console.error("Permission denied"); } } catch (err) { console.error(`Request failed: ${err.code}, ${err.message}`); } } ``` #### 关键注意事项 1. **权限级别**: - `system_core`:核心系统权限(仅系统应用可用) - `system_basic`:基础系统权限 - `normal`:普通应用权限 2. **授权模式**: - `system_grant`:安装时自动授予 - `user_grant`:需要运行时申请 3. **系统能力可见性**: - 自定义系统能力需在编译时集成到镜像中 - 应用商店会根据设备支持的 `SystemCapability` 过滤应用[^2] > **调试提示**:使用 `hdc shell aa dump -a` 查看当前设备所有权限状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值