compileSdkVersion 必须写在模块级 build.gradle 的 android 块内,是 AGP 强制要求的整数型字段,新版推荐用 compileSdk = 34(Kotlin DSL)或 compileSdkVersion 34(Groovy),需匹配已安装的 SDK Platform 和 AGP/Gradle 版本。

compileSdkVersion 必须写在模块级 build.gradle 的 android 块里
它不是项目级配置,也不是 Gradle 插件参数,而是 Android Gradle Plugin(AGP)要求的强制字段。如果你把它错放在项目根目录的 build.gradle、或者漏掉 android{} 外壳、或者拼成 compileSdk(少 Version),Gradle 就会直接报 compileSdkVersion is not specified。
正确位置示例(Kotlin DSL):
android {
compileSdk = 34 // 注意:新版 AGP 推荐用数字,不是字符串
defaultConfig {
applicationId = "com.example.app"
minSdk = 21
targetSdk = 34
}
}
-
compileSdk是属性名,不是函数;赋值必须是整数(如34),不能是"34"或"android-34" - AGP 8.0+ 已弃用
compileSdkVersion 34这种旧语法,改用compileSdk = 34 - 如果用了 Groovy 写法(
build.gradle),仍可写compileSdkVersion 34,但推荐统一迁移到 Kotlin DSL
compileSdk 和 AGP、Gradle 版本强绑定,不能乱配
你设了 compileSdk = 34,不代表就能随便用任意 AGP。AGP 会检查当前 JDK、Gradle、SDK Platform 是否满足最低要求。比如 AGP 8.7.2 要求:Gradle ≥ 8.9、JDK 17+、且本地 SDK 目录下必须有 platforms/android-34 文件夹。
- 查 AGP 兼容表最简单的方法:打开
gradle/wrapper/gradle-wrapper.properties,看distributionUrl对应的 Gradle 版本,再去官网查该 Gradle 支持的最高 AGP 版本 - 如果只改
compileSdk却没装对应平台,Sync 时会报Failed to find target with hash string 'android-34' - 用命令行装平台最稳:
sdkmanager "platforms;android-34",别只靠 Android Studio GUI 勾选
compileSdk 不影响运行时行为,但会影响编译期 API 可见性
它只决定你在写代码时能调用哪些类和方法(比如 Activity.getApplication() 在 API 34 才加,设 compileSdk = 33 就编译不过),跟 minSdk 或 targetSdk 完全无关。很多人误以为“升 compileSdk 就要适配新行为”,其实不用——除非你主动调用了新 API 或打开了新 lint 检查。
- 升
compileSdk后,建议同步升级targetSdk,否则 Google Play 会拒收(2024 年起强制要求targetSdk ≥ 34) - 不推荐降
compileSdk来“兼容旧库”,真正的问题往往出在依赖库自身声明的compileSdk或资源引用冲突 - 第三方库的
compileSdk是它自己编译时用的,跟你项目的没关系;但它的 AAR 里可能含高版本资源,导致你项目编译失败
常见错误现象和快速验证方式
Sync 成功 ≠ compileSdk 生效。有时候 Gradle 看似过了,但实际读的是缓存或父项目配置。最简单的验证方式是:在 Activity 里写一行 if (Build.VERSION.SDK_INT >= 34) { ... },然后 Ctrl+Click 进去 Build.VERSION_CODES.TIRAMISU —— 如果能跳转且没红标,说明 compileSdk 正确加载了对应 platform。
- 报错
Cannot resolve symbol 'TIRAMISU':SDK Platform 34 没装全,或ANDROID_HOME指向了错误路径 - 报错
Unsupported method: BaseConfig.getCompileSdkVersion():AGP 版本太老,不支持compileSdk =新语法 - AS 提示 “SDK location not found”:不是 Gradle 配置问题,是
local.properties里sdk.dir路径写错了,或目录下缺platforms/android-34
.gradle/caches 和 build/,再从命令行跑 ./gradlew --stop && ./gradlew build --info 看它到底在找哪个路径。


















