HarmonyOS鸿蒙Next中我想app支持16-20,然后如果某个功能只有20支持的,我就判断下再展示,配置文件里怎么写
HarmonyOS鸿蒙Next中我想app支持16-20,然后如果某个功能只有20支持的,我就判断下再展示,配置文件里怎么写 我想app,支持16-20,然后如果某个功能只有20支持的,我就判断下再展示,配置文件里怎么写
【背景知识】
- 
- compileSdkVersion:编译应用的SDK版本;
- targetSdkVersion:应用运行的目标SDK版本;
- compatibleSdkVersion:应用运行的最低SDK版本。
 在应用的工程配置中,三个SDK版本属性之间的大小关系为:compatibleSdkVersion值≤targetSdkVersion值≤compileSdkVersion值,如果配置不符合这个规则,会有报错提示。
 
- 
- 基于老版本HarmonyOS SDK开发的应用,在上架华为应用市场后,默认可分发到新版本的HarmonyOS设备,并正常运行。
 例外情况:API在不断演进迭代过程中,因体验优化或安全等因素,可能会发生行为变更,并对已上架应用产生影响,针对这部分变更会专门在版本说明中详细阐述,请开发者在升级API版本时候,关注版本说明。
- 针对基于新版本HarmonyOS SDK开发的应用,使用了新版本API,开发者对这些新版本API进行兼容性判断保护后,应用在老HarmonyOS设备上使用新API部分功能降级,并运行正常。
 
- 基于老版本HarmonyOS SDK开发的应用,在上架华为应用市场后,默认可分发到新版本的HarmonyOS设备,并正常运行。
- 
- SysCap,全称SystemCapability,即系统能力,指操作系统中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是系统能力之一。
- HarmonyOS定义了API接口canIUse帮助开发者来判断该设备是否支持某个特定的syscap。
 
【解决方案】
配置如下:
- 
配置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)”。
- 
应用使用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文件中的targetAPIVersion和compatibleAPIVersion字段来设定应用支持的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的同时,安全地使用高版本特性。
 
        
       
                   
                   
                  

