2. 项目环境准备:Android Studio 版本要求、Gradle 配置升级、compileSdk 与 targetSdk 设置为 33+

本章聚焦适配 Android 13 通知权限前的环境基线。只有 IDE、构建工具链和目标 API 统一对齐 33+,后续章节的 runtime permission 请求、通知渠道变更和前台服务限制才能正常编译与运行。环境准备通常只需 15–20 分钟,但一旦遗漏步骤,会在编译时报出大量“资源链接失败”“清单合并冲突”或“未声明 SDK 版本”错误。

2.1 Android Studio 版本要求

Android 13 (API 33) 的 SDK 体系在 Electric Eel (2022.1.1) 稳定版中首次完整支持。更早的版本(如 Chipmunk、Dolphin)虽然可以通过手动下载 SDK 33 编译,但 Android Gradle Plugin (AGP) 内置的 lint 检查、AAPT2 解析器版本和 build-tools 可能缺少对新 API 的识别,导致误报错误或资源合并异常。

Android Studio 版本代号内置 AGP 最低版本推荐操作
2022.1.1 (稳定版)Electric Eel7.4.0✅ 可直接使用
2022.2.1Flamingo8.0.0✅ 可直接使用
2023.1.1Giraffe8.1.0✅ 推荐升级至此版本
2021.3.1 及更早—≤ 7.2⚠️ 必须升级 IDE 至 Electric Eel 或更高
📌 检查现有版本
打开 Android Studio → Help → About,查看版本号。若低于 2022.1.1,请从 jetbrains.com/android 下载最新稳定版,并在安装时选择“导入旧版设置”。已有项目不会丢失。

2.2 Gradle 配置升级

项目级别的 build.gradle (Project) 中需要声明 Android Gradle Plugin (AGP) 版本和 Gradle 包装器版本。Android 13 适配要求 AGP ≥ 7.4.0,Gradle ≥ 8.0。以下为推荐配置:

// 项目级 build.gradle
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        // AGP 版本必须 ≥ 7.4
        classpath 'com.android.tools.build:gradle:8.1.2'
        // Kotlin 插件版本可选,但建议 ≥ 1.9.0
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22'
    }
}

同时修改 gradle-wrapper.properties:

distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
⚠️ 版本兼容性陷阱
不要随意拼接 AGP 与 Gradle 版本。参考官方兼容表:AGP 8.1.x 需要 Gradle 8.0–8.2;AGP 8.0.x 需要 Gradle 8.0。若出现 “The version of Gradle you are using is too old to support this Android Gradle Plugin” 则说明包装器版本过低。使用 ./gradlew wrapper --gradle-version 8.2 命令可快速更新包装器。

2.3 compileSdk 与 targetSdk 设置为 33+

compileSdk 决定编译时可访问的 API;targetSdk 决定应用运行时表现的兼容性行为(例如通知权限默认关闭或自动授予)。Android 13 通知权限适配要求两者至少为 33,否则新增的 POST_NOTIFICATIONS 权限常量无法被识别,shouldShowRequestPermissionRationale() 行为也会回退至旧规则。

在模块级 build.gradle 中修改:

android {
    // 必须 ≥ 33,推荐使用 34(对应 Android 14)以同时满足后续适配
    compileSdk 34

    defaultConfig {
        // targetSdk 标记应用的兼容目标
        targetSdk 34
        // minSdk 视项目业务决定,通常 ≥ 21 即可
        minSdk 21
    }

    // 如果之前未声明,可能需要添加以下 compileOptions
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}
🔍 理解 compileSdk vs targetSdk
  • compileSdk:决定你能否在代码中调用 API 33/34 新增的类和方法(如 NotificationManager.areNotificationsEnabled() 的增强行为)。
  • targetSdk:系统根据此值决定是否对应用施加新行为(如 Android 13 中 targetSdk≥33 时,通知权限默认关闭且需要动态申请)。
  • 若 targetSdk 仍为 32 或更低,系统会继续沿用 Android 12 的通知行为,即使 compileSdk 设为 33+,POST_NOTIFICATIONS 权限也不会生效。

2.4 验证与常见错误

修改完配置后必须执行一次 Clean Project 和 Rebuild,并在 Gradle Console 中观察输出。以下为最高频出现的三种错误及解决方法:

错误信息原因解决
Manifest merger failed : uses-sdk:minSdkVersion 21 cannot be smaller than version 23 某个依赖库要求 minSdk ≥ 23 升级 minSdk 至 23,或排除冲突依赖
Cannot find symbol class 'POST_NOTIFICATIONS' compileSdk < 33 将 compileSdk 改为 33+ 并重新同步
The android.defaultConfig.targetSdkVersion is not set targetSdk 未在 defaultConfig 中声明 添加 targetSdk 34
🧪 快速验证环境是否就绪
在任意 Activity 的 onCreate 中临时写入 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { ... },若能正常编译且不报“找不到符号”,则环境已对齐。
Android 13 通知权限适配·环境准备流程 现有项目 检查 AS 版本 ≥ Electric Eel (2022.1.1) 版本足够? 升级 IDE 是 升级 AGP ≥ 7.4 & Gradle ≥ 8.0 compileSdk=33+ / targetSdk=33+ Sync & Rebuild → 检查错误 环境就绪 📋 重要提示 备份项目并检查第三方库是否 已兼容 targetSdk=33

2.5 调试与稳定性备忘

  • Gradle 同步卡死:尝试 File → Invalidate Caches & Restart,或删除 ~/.gradle/caches/ 下相应项目缓存。
  • R8/ProGuard 混淆冲突:升级 compileSdk 后部分 keep 规则可能失效,在 proguard-rules.pro 中临时添加 -dontwarn 并逐项排查。
  • 增量编译不稳定:环境切换后建议执行一次 ./gradlew clean,避免混合旧的 R 类文件。
  • 持续集成 (CI) 容器:确保 Jenkins/GitHub Actions 镜像中的 SDK 已安装 platform 33+,并在 build.gradle 中通过 sdk.dir 指定正确路径。
❌ 不要跳过 targetSdk 升级
许多开发者只修改 compileSdk 而保留 targetSdk=31/32。这种做法虽然能编译通过,但 Android 13 不会对新应用施加通知权限管控,POST_NOTIFICATIONS 权限根本不会生效,导致运行时通知直接被系统静默拒绝。务必同时提升 targetSdk≥33。