0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙OS开发:典型页面场景【一次开发,多端部署】(功能开发)

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-05-28 17:32 次阅读

功能开发的一多能力介绍

应用开发至少包含两部分工作: UI页面开发和底层功能开发(部分需要联网的应用还会涉及服务端开发)。前面章节介绍了如何解决页面适配的问题,本章节主要介绍应用如何解决设备系统能力差异的兼容问题。

系统能力

[系统能力](即SystemCapability,缩写为SysCap)指操作系统中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是系统能力之一。每个系统能力对应多个API,随着目标设备是否支持该系统能力共同存在或消失。

与系统能力相关的,有支持能力集、联想能力集和要求能力集三个核心概念。

  • 支持能力集 :设备具备的系统能力集合,在设备配置文件中配置。
  • 要求能力集 :应用需要的系统能力集合,在应用配置文件中配置。
  • 联想能力集 :开发应用时IDE可联想的API所在的系统能力集合,在应用配置文件中配置。

说明:
开发前请熟悉鸿蒙开发指导文档 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

  • 只有当应用要求能力集是设备支持能力集的子集的时候,应用才可以在该设备上分发、安装和运行。
  • 可以访问[系统能力列表]了解全量的系统能力。
  • 支持的设备类型分为两大类: 典型设备和厂商自定义设备。默认设备、平板等常用的设备类型属于典型设备,其它的属于厂商自定义设备。对于典型设备,系统已经预定义了相应的系统能力集合;对于厂商自定义设备,需要厂商给出其系统能力集合的定义。

设备要求能力集的获取及导入

对于厂商自定义设备,需要开发者自行从厂商处获取该设备的要求能力集并导入到IDE中。

在IDE中点击File->New->Import...后选择“Import Product Compatibility ID”即可选择及导入设备要求能力集,导入后的设备要求能力集会被写入工程的syscap.json文件中。

20230920-103626

多设备应用开发

开发多设备应用时,工程中默认的要求能力集是多个设备支持能力集的交集,默认的联想能力集是多个设备支持能力集的并集。

  • 开发者可以在运行时动态判断某设备是否支持特定的系统能力。
  • 开发者可以自行修改联想能力集和要求能力集。

动态逻辑判断

如果某个系统能力没有写入应用的要求能力集中,那么在使用前需要判断设备是否支持该系统能力。

  • 方法1:canIUse接口帮助开发者来判断该设备是否支持某个特定的syscap。
    if (canIUse("SystemCapability.Communication.NFC.Core")) {
       console.log("该设备支持SystemCapability.Communication.NFC.Core");
    } else {
       console.log("该设备不支持SystemCapability.Communication.NFC.Core");
    }
    
  • 方法2:开发者可通过import的方式将模块导入,若当前设备不支持该模块,import的结果为undefined,开发者在使用其API时,需要判断其是否存在。
    import controller from '@ohos.nfc.controller';
    try {
        controller.enableNfc();
        console.log("controller enableNfc success");
    } catch (busiError) {
        console.log("controller enableNfc busiError: " + busiError);
    }
    

说明:

  • 如果某系统能力是应用运行必须的,则要将其写入到应用的要求能力集中,以确保应用不会分发和安装到不符合要求的设备上。
  • 如果某系统能力不是应用运行必须的,则可以在运行时做动态判断,这样可以最大程度扩大应用的适用范围。

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

IDE会根据创建的工程所支持的设备自动配置联想能力集和要求能力集,同时也支持开发者修改。

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

`HarmonyOSOpenHarmony鸿蒙文档籽料:mau123789是v直接拿`

搜狗高速浏览器截图20240326151547.png

说明:

  • 对于要求能力集,开发者修改时要十分慎重,修改不当会导致应用无法分发和安装到目标设备上。
  • 对于联想能力集,通过增加系统能力可以扩大IDE可联想的API范围。但要注意这些API可能在某些设备上不支持,使用前需要判断。

总结

从应用开发到用户使用,通常要经历应用分发和下载、应用安装、应用运行等环节。借助SysCap机制,可以在各个环节中加以拦截或管控,保证应用可以在设备上正常安装和使用。

  • 应用分发和下载:只有当应用要求能力集是设备支持能力集的子集时(即设备满足应用运行要求),应用才可以分发到该设备。
  • 应用安装:只有当应用要求能力集是设备支持能力集的子集时,应用才可以安装到该设备。
  • 应用运行:应用在使用要求能力集之外的能力前,需要动态判断相应系统能力的有效性,防止崩溃或功能异常等问题。

SysCap机制可以帮助开发者仅关注设备的系统能力,而不用考虑成百上千种具体的设备类型,降低多设备应用开发难度。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IDE
    IDE
    +关注

    关注

    0

    文章

    338

    浏览量

    46740
  • 鸿蒙
    +关注

    关注

    57

    文章

    2342

    浏览量

    42818
  • 鸿蒙OS
    +关注

    关注

    0

    文章

    188

    浏览量

    4383
收藏 人收藏

    评论

    相关推荐

    HarmonyOS开发案例:【一次开发多端部署(视频应用)】

    者提供了“一次开发多端部署”的系统能力,让开发者可以基于一次
    的头像 发表于 05-11 15:41 1442次阅读
    HarmonyOS<b class='flag-5'>开发</b>案例:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>(视频应用)】

    HarmonyOS开发案例:【一次开发多端部署-音乐专辑】

    基于自适应和响应式布局,实现一次开发多端部署音乐专辑页面
    的头像 发表于 05-13 16:48 679次阅读
    HarmonyOS<b class='flag-5'>开发</b>案例:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>-音乐专辑】

    鸿蒙OS开发:【一次开发多端部署】(天气应用)案例

    本章通过个天气应用,介绍多应用的整体开发过程,包括UX设计、工程管理及调试、页面开发等。
    的头像 发表于 05-15 15:42 1037次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(天气应用)案例

    鸿蒙OS开发:【一次开发多端部署】(多天气)项目

    本示例展示个天气应用界面,包括首页、城市管理、添加城市、更新时间弹窗,体现一次开发多端部署的能力。
    的头像 发表于 05-20 14:59 838次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(<b class='flag-5'>一</b>多天气)项目

    鸿蒙OS开发:【一次开发多端部署】(音乐专辑主页)

    本示例使用一次开发多端部署中介绍的自适应布局能力和响应式布局能力进行多设备(或多窗口尺寸)适配,保证应用在不同设备或不同窗口尺寸下可以正常显示。
    的头像 发表于 05-21 14:48 733次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(音乐专辑主页)

    鸿蒙OS开发:【一次开发多端部署】(音乐专辑页面

    基于自适应和响应式布局,实现一次开发多端部署音乐专辑页面
    的头像 发表于 05-25 16:21 790次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(音乐专辑<b class='flag-5'>页面</b>)

    鸿蒙OS开发:【一次开发多端部署】(视频应用)

    者提供了“一次开发多端部署”的系统能力,让开发者可以基于一次
    的头像 发表于 05-25 16:29 4535次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(视频应用)

    鸿蒙OS开发:【一次开发多端部署】(典型布局场景

    虽然不同应用的页面千变万化,但对其进行拆分和分析,页面中的很多布局场景是相似的。本小节将介绍如何借助自适应布局、响应式布局以及常见的容器类组件,实现应用中的典型布局
    的头像 发表于 05-25 16:39 2145次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(<b class='flag-5'>典型</b>布局<b class='flag-5'>场景</b>)

    鸿蒙OS开发典型页面场景一次开发多端部署】实战(音乐专辑页2)

    本示例使用[一次开发多端部署]中介绍的自适应布局能力和响应式布局能力进行多设备(或多窗口尺寸)适配,保证应用在不同设备或不同窗口尺寸下可以正常显示。
    的头像 发表于 05-25 16:47 2094次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:<b class='flag-5'>典型</b><b class='flag-5'>页面</b><b class='flag-5'>场景</b>【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】实战(音乐专辑页2)

    鸿蒙OS开发典型页面场景一次开发多端部署】实战(设置典型页面

    本示例展示了设置应用的典型页面,其在小窗口和大窗口有不同的显示效果,体现一次开发多端部署的能力
    的头像 发表于 05-27 09:36 1141次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:<b class='flag-5'>典型</b><b class='flag-5'>页面</b><b class='flag-5'>场景</b>【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】实战(设置<b class='flag-5'>典型</b><b class='flag-5'>页面</b>)

    鸿蒙OS开发典型页面场景一次开发多端部署】(资源使用)

    页面开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。
    的头像 发表于 05-28 09:44 961次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:<b class='flag-5'>典型</b><b class='flag-5'>页面</b><b class='flag-5'>场景</b>【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(资源使用)

    鸿蒙OS开发典型页面场景一次开发多端部署】(短信)案例介绍

    本章从系统预置的应用中,选择短信应用作为典型的案例,从页面开发和工程结构的角度,介绍"多"的具体实践。系统的产品形态在不断丰富中,当前主要有默认设备和平板两种产品形态,本章的具体实践
    的头像 发表于 05-28 15:08 1273次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:<b class='flag-5'>典型</b><b class='flag-5'>页面</b><b class='flag-5'>场景</b>【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(短信)案例介绍

    华为开发者大会2021:一次开发 多端部署

    一次开发 多端部署使能开发者从单设备生态跨入多设备生态!
    的头像 发表于 10-22 15:09 1641次阅读
    华为<b class='flag-5'>开发</b>者大会2021:<b class='flag-5'>一次</b><b class='flag-5'>开发</b> <b class='flag-5'>多端</b><b class='flag-5'>部署</b>

    鸿蒙OS开发:【一次开发多端部署】(多设备自适应能力)简单介绍

    本示例是《一次开发多端部署》的配套示例代码,展示了[页面开发
    的头像 发表于 05-21 14:59 2401次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(多设备自适应能力)简单介绍

    鸿蒙OS开发:【一次开发多端部署】( 设置app页面

    本示例展示了设置应用的典型页面,其在小窗口和大窗口有不同的显示效果,体现一次开发多端部署的能力
    的头像 发表于 05-21 14:56 1047次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>:【<b class='flag-5'>一次</b><b class='flag-5'>开发</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】( 设置app<b class='flag-5'>页面</b>)