升级targetSDKVersion可以让应用享受新版本特性,但如果不同时升级compatibleSdkVersion,就需要确保应用在低版本设备上仍能正常运行。

一、关系

compatibleSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion
版本属性 作用
compileSdkVersion 编译应用的SDK版本,决定API能力范围
targetSdkVersion 应用运行的目标SDK版本,决定API版本隔离行为
compatibleSdkVersion 应用运行的最低SDK版本,决定分发下限

升级说明

示例

  • 接口A在SDK版本5.0.2(14)产生行为变更并进行了版本隔离

  • 应用升级targetSDKVersion ≥ 5.0.2(14)并适配了新版本行为

  • compatibleSdkVersion仍保持设置为5.0.1(13)

要求:应用分发到低版本设备5.0.1(13)上时,需保证该应用在低版本设备能够兼容运行正常。

二、兼容性判断保护

HarmonyOS专有接口(since M.S.F(N))

针对接口标记为since M.S.F(N)(SDK物理包中hms路径下所包含的接口),使用distributionOSApiVersion进行兼容性判断。

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

// 针对HarmonyOS专有接口,即接口标记为since M.S.F(N)的接口
getTestData(): void {
    // 兼容性判断,50002是由新接口的since字段M*10000+F*100+S转换而来
    // 即5.0.2(14) → 5*10000 + 0*100 + 2 = 50002
    if (deviceInfo.distributionOSApiVersion >= 50002) {
        // 适配5.0.2(14)版本某API行为变更后的处理
        useNewApiBehavior();
    } else {
        // 兼容原有逻辑
        useOldApiBehavior();
    }
}

OpenHarmony底座接口(since N)

针对接口标记为since N(SDK物理包中openharmony路径下所包含的接口),使用sdkApiVersion进行兼容性判断。

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

// 针对OpenHarmony底座公共接口,即接口标记为since N
getTestData(): void {
    // 增加兼容性判断,14即为API Level 14(对应5.0.2(14))
    if (deviceInfo.sdkApiVersion >= 14) {
        // 适配5.0.2(14)版本某API行为变更后的处理
        useNewApiBehavior();
    } else {
        // 兼容原有逻辑
        useOldApiBehavior();
    }
}

三、接口对比

接口类型 判断接口 版本转换方式 适用场景
HarmonyOS专有 deviceInfo.distributionOSApiVersion M×10000+F×100+S hms路径下的接口(since M.S.F(N))
OpenHarmony底座 deviceInfo.sdkApiVersion 直接使用N值 openharmony路径下的接口(since N)

版本号转换示例

版本号 转换公式 转换结果
5.0.2(14) 5×10000 + 0×100 + 2 50002
6.0.2(22) 6×10000 + 0×100 + 2 60002
6.1.1(24) 6×10000 + 1×100 + 1 60101

四、完整示例

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

class ApiCompatibilityManager {
    // 判断HarmonyOS专有API是否可用
    static isHarmonyOSApiAvailable(major: number, minor: number, patch: number): boolean {
        const targetVersion = major * 10000 + minor * 100 + patch;
        return deviceInfo.distributionOSApiVersion >= targetVersion;
    }
    
    // 判断OpenHarmony底座API是否可用
    static isOpenHarmonyApiAvailable(apiLevel: number): boolean {
        return deviceInfo.sdkApiVersion >= apiLevel;
    }
    
    // 示例方法
    static doSomething(): void {
        // 检查5.0.2(14)版本的HarmonyOS专有API
        if (this.isHarmonyOSApiAvailable(5, 0, 2)) {
            // 使用新API
            console.info('使用5.0.2版本新API');
        } else {
            // 降级方案
            console.info('使用兼容旧API');
        }
    }
}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐