应用升级targetSDKVersion兼容低版本指导
应用的源码工程配置项(build-profile.json5文件)中通过targetSdkVersion和compatibleSdkVersion定义了应用运行的目标SDK版本和最低SDK版本。
推荐开发者适配最新发布的API版本,即推荐开发者配置targetSDKVersion和CompileSdkVersion一样,享受到最新版本特性。开发者可根据自身实际情况升级targetSDKVersion。
部分应用升级targetSDKVersion时,可能不升级compatibleSdkVersion,下面介绍这种场景如何进行兼容性适配。
例如:接口A在SDK版本5.0.2(14)产生行为变更并进行了版本隔离,应用升级targetSDKVersion≥5.0.2(14)并适配了新版本行为, compatibleSdkVersion还保持设置为5.0.1(13), 则若应用分发到低版本设备5.0.1(13)上,需保证该应用在低版本设备能够兼容运行正常(如下图所示)。

这种场景开发者可以使用如下方式进行兼容处理:
基于C/ArkTS语言API接口兼容低版本行为
-
针对HarmonyOS设备独有特性接口,即接口标记为since M.F.S(N)(文档中标记“起始版本:M.F.S(N)”, SDK物理包中hms路径下所包含的接口),使用distributionOSApiVersion接口进行兼容性判断保护。
ArkTS API:
import { deviceInfo } from '@kit.BasicServicesKit';//针对HarmonyOS专有接口,即接口标记为since M.F.S(N)的接口getTestData(): void {// 兼容性判断,50002是由新接口的since字段M*10000+F*100+S转换而来if (deviceInfo.distributionOSApiVersion >= 50002) {// 适配5.0.2(14)版本某API行为变更后的处理} else {// 兼容原有逻辑}}C API:
#include <deviceinfo.h>#include <stdio.h>//针对HarmonyOS专有接口,即接口标记为since M.F.S(N)的接口void GetTestData() {// 兼容性判断,50002是由新接口的since字段M*10000+F*100+S转换而来if (OH_GetDistributionOSApiVersion() >= 50002) {// 适配5.0.2(14)版本某API行为变更后的处理} else {// 兼容原有逻辑}} -
针对OpenHarmony底座接口,即接口标记为since N(文档中标记“起始版本:N”,SDK物理包中openharmony路径下所包含的接口),使用sdkApiVersion接口进行兼容性判断保护。
ArkTS API:
import { deviceInfo } from '@kit.BasicServicesKit';//针对OpenHarmony底座公共接口,即接口标记为since NgetTestData(): void {// 增加兼容性判断if (deviceInfo.sdkApiVersion >= 14) {// 适配5.0.2(14)版本某API行为变更后的处理} else {// 兼容原有逻辑}}C API:
#include <deviceinfo.h>#include <stdio.h>//针对OpenHarmony底座公共接口,即接口标记为since Nvoid GetTestData() {// 增加兼容性判断if (OH_GetSdkApiVersion() >= 14) {// 适配5.0.2(14)版本某API行为变更后的处理} else {// 兼容原有逻辑}}