HarmonyOS鸿蒙Next中我想app支持16-20,然后如果某个功能只有20支持的,我就判断下再展示,配置文件里怎么写

HarmonyOS鸿蒙Next中我想app支持16-20,然后如果某个功能只有20支持的,我就判断下再展示,配置文件里怎么写 我想app,支持16-20,然后如果某个功能只有20支持的,我就判断下再展示,配置文件里怎么写

5 回复

【背景知识】

  1. 影响应用兼容性的关键信息

    • compileSdkVersion:编译应用的SDK版本;
    • targetSdkVersion:应用运行的目标SDK版本;
    • compatibleSdkVersion:应用运行的最低SDK版本。
      在应用的工程配置中,三个SDK版本属性之间的大小关系为:compatibleSdkVersion值≤targetSdkVersion值≤compileSdkVersion值,如果配置不符合这个规则,会有报错提示。
  2. 应用和设备系统兼容性原则说明

    • 基于老版本HarmonyOS SDK开发的应用,在上架华为应用市场后,默认可分发到新版本的HarmonyOS设备,并正常运行。
      例外情况:API在不断演进迭代过程中,因体验优化或安全等因素,可能会发生行为变更,并对已上架应用产生影响,针对这部分变更会专门在版本说明中详细阐述,请开发者在升级API版本时候,关注版本说明。
    • 针对基于新版本HarmonyOS SDK开发的应用,使用了新版本API,开发者对这些新版本API进行兼容性判断保护后,应用在老HarmonyOS设备上使用新API部分功能降级,并运行正常。
  3. 系统能力与API

    • SysCap,全称SystemCapability,即系统能力,指操作系统中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是系统能力之一。
    • HarmonyOS定义了API接口canIUse帮助开发者来判断该设备是否支持某个特定的syscap。

【解决方案】

配置如下:

  1. 配置build-profile.json5设置应用运行的最低SDK版本
    假如应用使用并适配了API版本6.0.0(20),同时希望应用能够运行5.0.5(17),那么可以在应用工程的build-profile.json5文件中设置“targetSdkVersion": “6.0.0(20)”,“compatibleSdkVersion”: "5.0.5(17)”。

  2. 应用使用API兼容性保护判断
    假如某个新特性的API是在SDK版本6.0.0(20)提供,为了让应用兼容在基于API版本5.0.5(17)的老设备正常运行,开发者可以使用如下兼容性判断。

    • 针对HarmonyOS设备独有特性接口,即接口标记为since M.F.S(N)(文档中标记“起始版本:M.F.S(N)”, SDK物理包中hms路径下所包含的接口),使用distributionOSApiVersion接口进行兼容性判断保护。例如判断“deviceInfo.distributionOSApiVersion >= 60000”时,调用6.0.0(20)的API新接口,否则使用降级方案,其中“60000”是由新接口的since字段“M10000+F100+S“”转换而来,即60000=610000+0100+0。
    • 针对OpenHarmony底座接口,即接口标记为since N(文档中标记“起始版本:N”,SDK物理包中openharmony路径下所包含的接口),使用sdkApiVersion接口进行兼容性判断保护。例如判断“deviceInfo.sdkApiVersion >= 20”时,调用6.0.0(20)的API新接口,否则使用降级方案。

判断如下:
判断API是否可以使用
HarmonyOS定义了API接口canIUse帮助开发者来判断该设备是否支持某个特定的syscap。

  • 查询hdsEffect接口的API文档,查出其系统能力为“SystemCapability.UIDesign.HDSComponent.Core”;
  • 通过判断“canIUse(‘SystemCapability.UIDesign.HDSComponent.Core’)”检查该设备是否可以使用hdsEffect接口。
  • 通过当前设备的API版本sdkApiVersion来判断,sdkApiVersion>=相应版本号的时候表示支持。sdkApiVersion可以通过@ohos.deviceInfo(设备信息)获取。

【总结】
通过build-profile.json5可以配置APP运行的目标SDK版本和运行要求的最低SDK版本,通过deviceInfo.distributionOSApiVersion或deviceInfo.sdkApiVersion接口帮助开发者进行API兼容性判断保护,通过canIUse接口帮助开发者来判断该设备是否支持某个特定的syscap。

更多关于HarmonyOS鸿蒙Next中我想app支持16-20,然后如果某个功能只有20支持的,我就判断下再展示,配置文件里怎么写的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


import { deviceInfo } from "@kit.BasicServicesKit"; 

if (deviceInfo.sdkApiVersion >= 20) 

这个if也可以在UI里面使用

将工程级build-profile.json5文件中的targetSdkVersion和compileSdkVersion配置为20版本,compatibleSdkVersion配置为16版本,具体配置信息可以查看文档:

工程级build-profile.json5文件:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-build-profile-app

影响应用兼容性的关键信息:https://developer.huawei.com/consumer/cn/doc/harmonyos-releases/app-compatibility-influence-factor

module.json5中配置"minAPIVersion": 16"targetAPIVersion": 20。使用canIUse接口检测API 20功能可用性:

import { canIUse } from '@kit.AbilityKit';
if (canIUse('SystemCapability.xxx.xxx')) {
    // 执行API 20功能
}

在HarmonyOS Next中,可以通过配置module.json5文件中的targetAPIVersioncompatibleAPIVersion字段来设定应用支持的API版本范围。例如:

{
  "app": {
    "bundleName": "com.example.app",
    "vendor": "example",
    "versionCode": 1,
    "versionName": "1.0.0",
    "minAPIVersion": 16,
    "targetAPIVersion": 20,
    "compatibleAPIVersion": 16
  }
}

这里设置minAPIVersion为16,targetAPIVersion为20,表示应用兼容API 16到20。对于仅在API 20中可用的功能,可以在代码中使用条件判断:

import { system } from '@kit.AbilityKit';

let apiVersion = system.config.apiVersion;
if (apiVersion >= 20) {
  // 执行API 20及以上版本的功能
} else {
  // 提供降级方案或隐藏功能
}

这样即可在支持API 16-20的同时,安全地使用高版本特性。

回到顶部