文章目录
-
- 一、基本定义
-
- [1.1 compatibleSdkVersion 兼容性SDK版本](#1.1 compatibleSdkVersion 兼容性SDK版本)
- [1.2 targetSdkVersion 目标SDK版本](#1.2 targetSdkVersion 目标SDK版本)
- 二、具体差异对比
- 三、实际开发中的配置示例
-
- [3.1 场景1:广泛兼容策略](#3.1 场景1:广泛兼容策略)
- [3.2 场景2:渐进增强策略](#3.2 场景2:渐进增强策略)
- [3.3 场景3:前沿体验策略](#3.3 场景3:前沿体验策略)
- 四、版本对应关系(纯血鸿蒙)
- 五、代码层面的影响示例
-
- [5.1 示例1:权限请求差异](#5.1 示例1:权限请求差异)
- [5.2 示例2:后台任务管理](#5.2 示例2:后台任务管理)
- 六、设置建议和最佳实践
-
- [6.1 设置原则](#6.1 设置原则)
- [6.2 检查API使用](#6.2 检查API使用)
- [6.3 条件代码处理](#6.3 条件代码处理)
- 七、测试验证
-
- [7.1 多版本测试矩阵](#7.1 多版本测试矩阵)
- [7.2 云测试服务](#7.2 云测试服务)
- 八、发布和更新策略
-
- [8.1 版本发布检查表](#8.1 版本发布检查表)
- [8.2 更新策略示例](#8.2 更新策略示例)
- 九、重要提醒
在纯血鸿蒙(HarmonyOS NEXT)开发中, compatibleSdkVersion 和 targetSdkVersion 是两个关键的API版本配置项,含义如下:
一、基本定义
1.1 compatibleSdkVersion 兼容性SDK版本
json
"compatibleSdkVersion": 11
- 含义 :应用能够最低兼容的HarmonyOS API版本
- 作用 :系统会确保应用在这个版本以上的设备上能够正常运行
- 规则:应用只能使用≤此版本的API,不能使用更高版本的API特性
1.2 targetSdkVersion 目标SDK版本
json
"targetSdkVersion": 12
- 含义 :应用主要适配和优化的HarmonyOS API版本
- 作用 :系统会为该版本启用最新的行为变更 和优化特性
- 规则:应用可以使用≤此版本的所有API特性
二、具体差异对比
| 特性 | compatibleSdkVersion | targetSdkVersion |
|---|---|---|
| 目的 | 向下兼容,保证基础运行 | 功能适配,享受新特性 |
| API使用 | 只能用≤此版本的API | 可以用≤此版本的所有API |
| 系统行为 | 使用旧版本的系统行为 | 使用新版本的系统优化 |
| 权限模型 | 旧权限管理方式 | 新权限管理方式 |
| 性能优化 | 无针对性优化 | 有针对性的性能优化 |
| 安全性 | 旧安全机制 | 新安全机制 |
三、实际开发中的配置示例
3.1 场景1:广泛兼容策略
json
{
"compatibleSdkVersion": 11, // 支持所有NEXT设备
"targetSdkVersion": 11, // 不强制要求新特性
}
- 适合:用户基数大的应用,需要覆盖尽可能多的设备
- 缺点:无法使用API 12的新特性
3.2 场景2:渐进增强策略
json
{
"compatibleSdkVersion": 11, // 最低支持API 11
"targetSdkVersion": 12, // 为API 12优化
}
- 适合:大多数应用的选择
- 特性:在API 11上能运行,在API 12上有更好体验
3.3 场景3:前沿体验策略
json
{
"compatibleSdkVersion": 12, // 只支持最新设备
"targetSdkVersion": 12, // 完全使用最新特性
}
- 适合:技术演示、内部工具、依赖最新硬件的应用
- 风险:用户覆盖范围小
四、版本对应关系(纯血鸿蒙)
| API版本 | HarmonyOS版本 | 关键特性 | 支持状态 |
|---|---|---|---|
| API 11 | HarmonyOS NEXT 4.0 | 纯血鸿蒙基础框架 | 稳定版 |
| API 12 | HarmonyOS NEXT 4.0+ | 增强特性、性能优化 | Beta/稳定 |
| API 13 | HarmonyOS NEXT 5.0 | 未来特性 | 开发中 |
五、代码层面的影响示例
5.1 示例1:权限请求差异
typescript
// API 11的权限请求方式(compatibleSdkVersion=11时可用)
async function requestPermissionOld() {
// API 11的方式
let result = await atManager.requestPermissionsFromUser(context, permissions)
}
// API 12的新权限方式(targetSdkVersion=12时系统使用)
async function requestPermissionNew() {
// API 12可能引入更细粒度的权限控制
let result = await atManager.requestPermissionsWithScenario(
context,
permissions,
'photo_capture' // 新增:使用场景参数
)
}
5.2 示例2:后台任务管理
typescript
// 系统会根据targetSdkVersion启用不同的后台策略
if (targetSdkVersion >= 12) {
// API 12+:更严格的后台任务管理
// 系统会自动优化电池使用
} else {
// API 11:相对宽松的后台策略
}
六、设置建议和最佳实践
6.1 设置原则
json
{
"compatibleSdkVersion": "尽量低", // 扩大用户覆盖
"targetSdkVersion": "尽量高" // 享受新特性
}
6.2 检查API使用
bash
# 使用DevEco Studio检查API兼容性
# 确保使用的API ≤ compatibleSdkVersion
# 命令行检查
./gradlew checkApiCompatibility
6.3 条件代码处理
typescript
// 运行时API版本检查
import abilityInfo from '@ohos.bundle.abilityInfo'
// 获取设备API级别
let abilityContext = getContext(this) as common.UIAbilityContext
let info = abilityInfo.getAbilityInfo(abilityContext.bundleName, abilityContext.abilityName)
let deviceApiVersion = info.minCompatibleVersion
// 根据版本执行不同逻辑
if (deviceApiVersion >= 12) {
// 使用API 12特性
useNewFeature()
} else {
// 使用兼容方案
useFallback()
}
七、测试验证
7.1 多版本测试矩阵
yaml
测试场景:
- API 11设备: 验证基础兼容性
- API 12设备: 验证新特性
- 升级测试: API 11 → API 12升级场景
7.2 云测试服务
bash
# 使用华为云测试服务覆盖多版本
agc test --devices "API11,API12" --test-type compatibility
八、发布和更新策略
8.1 版本发布检查表
markdown
- [ ] compatibleSdkVersion ≤ 市场最低支持版本
- [ ] targetSdkVersion ≥ 主流设备版本
- [ ] API使用通过了兼容性检查
- [ ] 在目标版本上完成了充分测试
8.2 更新策略示例
版本1.0: compatible=11, target=11
版本1.5: compatible=11, target=12 # 逐步采用新特性
版本2.0: compatible=12, target=12 # 放弃旧版本支持
九、重要提醒
-
不能设置 incompatible:
compatibleSdkVersion必须 ≤targetSdkVersion- 系统会拒绝构建如果设置错误
-
影响上架:
- 应用商店会根据这些设置进行设备过滤
- API 11+ 的设备才能安装纯血鸿蒙应用
-
向后兼容性:
- 华为承诺新版本API会兼容旧版本的核心功能
- 但某些旧API可能被标记为废弃(@Deprecated)
-
实际设备支持:
typescript// 可以通过代码查询 import systemInfo from '@ohos.system.systemInfo' let deviceInfo = systemInfo.getDeviceInfo() console.log(`设备API级别: ${deviceInfo.apiVersion}`)
正确配置这两个参数是确保应用在纯血鸿蒙生态中良好运行的关键。建议定期关注华为官方的API演进规划,适时更新targetSdkVersion以获得最佳用户体验。