前言
打开老的项目,发现gradle中报红:
Google Play requires that apps target API level 33 or higher.
要求我们targetSdkVersion
版本必须最低33。
这几个版本到底什么关系呢?
- minSdkVersion
- targetSdkVersion
- compileSdkVersion
- buildToolsVersion
build.gradle.kts
1 | android { |
build.gradle
1 | android { |
参数作用
明确每个参数的本质功能,这是理解关系的基础:
参数名 | 核心定义 | 关键作用 | 示例(你的配置) |
---|---|---|---|
minSdkVersion | 应用支持的 最低 Android 系统版本(API Level) | 1. 决定应用能安装到哪些设备(低于此版本的设备无法安装);2. 限制代码中可调用的 API(低于此 API Level 的方法会报错);3. 是 “向下兼容” 的底线。 | 21 → 最低支持 Android 5.0(Lollipop) |
targetSdkVersion | 应用 目标适配的 Android 系统版本(API Level) | 1. 声明应用 “已在该版本上充分测试”,系统会按此版本的规则运行(如权限、行为逻辑);2. 不限制安装设备(只要≥minSdkVersion 即可),但影响系统特性的兼容性;3. 是 “向上兼容” 的 “适配标杆”。 | 29 → 目标适配 Android 10(Q) |
compileSdkVersion | 编译应用时使用的 Android SDK 版本(API Level) | 1. 决定编译器使用哪个版本的 SDK 源码、API 接口进行编译;2. 控制能否使用高版本 API(需配合@RequiresApi 注解做兼容性处理);3. 必须 ≥ targetSdkVersion(否则编译报错),是 “编译阶段” 的核心。 |
30 → 使用 Android 11(R)的 SDK 编译 |
buildToolsVersion | 编译工具(如 aapt、dx)的 版本号 | 1. 提供编译、打包、优化 APK 的工具集;2. 版本格式为X.Y.Z (X 对应 compileSdkVersion 的主版本);3. 需与 compileSdkVersion 匹配(通常推荐使用对应 SDK 的最新构建工具)。 |
30.0.1 → 配合 compileSdkVersion 30 使用 |
版本的大小关系
minSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion
buildToolsVersion
自 Android Gradle Plugin 3.0 起,
buildToolsVersion
可省略(会自动匹配 compileSdkVersion 的最新推荐版本),但手动指定时需确保主版本一致。
推荐配置
compileSdkVersion
尽可能高:直接使用当前 Android Gradle Plugin(AGP)支持的 最新稳定版 SDK(如 2024 年主流是 34/35)。
- 原因:高版本 SDK 包含最新 API、编译优化和安全检查,能提前适配新系统特性(如 Android 14 的运行时权限强化),且不影响低版本设备运行(需配合兼容性处理)。
- 注意:需与 AGP 版本兼容(如 AGP 8.0+ 推荐 compileSdkVersion ≥ 33)。
targetSdkVersion
等于compileSdkVersion
:保持与 compileSdkVersion 一致(或至少不低于当前主流系统版本,如 2024 年建议 ≥ 33)。
- 原因:声明 “应用已适配最新系统”,系统会按最新规则运行(如 Android 13 的通知权限、Android 14 的后台启动限制),避免因 “兼容模式” 导致功能异常。
- 例外:若需快速适配旧版本,可暂时低于 compileSdkVersion,但需在 1-2 个版本内跟进升级。
minSdkVersion
按需选择,兼顾用户量与功能:根据应用受众和核心功能选择最低支持版本,参考 Google Play 设备分布数据(2024 年 Android 7.0+ 占比超 95%)。
- 大众应用:推荐 ≥ 24(Android 7.0),覆盖绝大多数设备,同时支持 MultiWindow、FileProvider 等基础现代特性。
- 工具类 / 小众应用:可放宽至 21(Android 5.0),但需额外处理旧系统兼容(如矢量图兼容、权限适配)。
- 高端功能应用(如 Jetpack Compose):需 ≥ 21(Compose 最低要求),若用 Compose Material3 高级特性,建议 ≥ 26。
buildToolsVersion
省略或匹配compileSdkVersion
:自 AGP 3.0 起,可完全省略该参数(Gradle 会自动匹配 compileSdkVersion 对应的最新构建工具)。
- 若手动指定,格式为
X.Y.Z
(X 需与 compileSdkVersion 一致,如 compileSdk=34 → buildTools=34.0.0)。
- 若手动指定,格式为