AGP(Android Gradle Plugin)概述与版本演进历史
说到 Android 构建,绕不开 AGP。它是什么?说白了,AGP 就是 Google 为 Android 项目写的 Gradle 插件。它让 Gradle 能理解 Android 项目结构、编译资源、生成 R 文件、打包 APK/AAB 等等。没有 AGP,Gradle 只是个通用构建工具,根本不知道怎么处理 AndroidManifest.xml 或者 .aidl 文件。
我记得刚入行那会儿,还在用 Eclipse + ADT,那套构建体系叫一个痛苦。后来切到 Gradle + AGP,虽然刚开始配置 gradle 文件有点晕,但一旦习惯了你就会发现:这玩意儿真灵活。嗯,但灵活也带来了版本管理的坑——这恰恰是我们这门课要解决的第一个问题。
AGP 版本演进历史
AGP 从 2013 年诞生到现在,版本号已经跳到 8.x。我大概梳理了关键版本和它们的核心变化,你琢磨琢磨,心里有个谱就好。
| 版本号 | 发布时间 | 核心变化 | 我的印象 |
|---|---|---|---|
| 1.x | 2013-2014 | 初代 AGP,配合 Gradle 1.x 使用 | 说实话我没用过,那个年代太遥远 |
| 2.x | 2015-2016 | 支持 Instant Run,新增变体 API | Instant Run 其实挺慢的,不太推荐 |
| 3.0 | 2017 | 强制 Java8 脱糖支持,annotationProcessor 替代 apt | 这个版本我记得很清楚,当时项目升级花了两周 |
| 3.1-3.6 | 2018-2019 | APK 签名优化、资源缩减改进、构建缓存完善 | 从 3.2 开始构建速度有明显提升 |
| 4.0 | 2020 | 新增 buildConfig 生成、测试改进、R8 全量支持 | 4.0 开始 ProGuard 基本被 R8 取代了 |
| 4.1-4.2 | 2020-2021 | Android Gradle 插件依赖管理优化,增加 lintCheck 差异比较 | 这一代的增量编译提升很明显 |
| 7.0 | 2021 | 要求 Gradle 7.x,Java 11,移除 Jack 工具链 | 升级时注意 Java 版本,我吃过亏 |
| 7.1-7.4 | 2021-2022 | 构建缓存增强,minSdk 与 API 级别对齐检查 | 缓存这块越来越智能,但坑也不少 |
| 8.0 | 2023 | 支持 Gradle 8.x,优化非传递性 R 类,强制 AAPT2 | 8.0 开始 R 类不再是 public,降低了编译开销 |
| 8.x | 2024-2025 | 进一步性能优化,支持 Kotlin 2.0,实验性构建缓存 | 我正在用的版本,稳定但偶有兼容问题 |
为什么会这样进化?其实每次大版本背后都对应着 Android 生态的变化:新编译工具链、新打包格式、新语言特性。你想想看,从 Java 8 脱糖到 R8 全量启用,每一步都在压榨构建效率。
AGP 版本命名规则
AGP 的版本号是三段式 主版本.次版本.补丁,比如 8.4.1。但要注意两个特殊标识:
- -alpha:内测版,功能可能不全,仅供尝鲜
- -beta:公测版,API 基本稳定,可能有 Bug
- -rc:候选版,接近正式版
- 无后缀:正式发布版,推荐生产使用
我个人习惯:正式项目只用 rc 或以上版本。alpha 版本我曾在项目里尝过一次鲜,结果连着三天修兼容问题……后来再也不在主线用 alpha 了。
AGP 与 Gradle 版本的对应关系
这是最容易被忽略的坑。AGP 与 Gradle 有严格的版本兼容要求。你升级 AGP 不升级 Gradle,构建就会报「不支持的 Gradle 版本」;反过来也一样。
我整理了一张简表,涵盖常用组合:
| AGP 版本 | 最低 Gradle 版本 | 推荐 Gradle 版本 |
|---|---|---|
| 3.x | 4.4 | 4.10-5.x |
| 4.0-4.2 | 6.1 | 6.5-6.9 |
| 7.0 | 7.0 | 7.0-7.2 |
| 7.1-7.4 | 7.3 | 7.3-7.6 |
| 8.0-8.2 | 8.0 | 8.0-8.4 |
| 8.3+ | 8.5 | 8.5+ |
我曾经在一次项目中,把 AGP 从 7.0 升级到 7.1,但忘了更新 Gradle wrapper(还停在 7.0)。结果编译时直接报错:
Minimum supported Gradle version is 7.3. Current version is 7.0.
If using the gradle wrapper, try editing the distributionUrl...
当时整个团队都卡住,找了二十分钟才发现是 Gradle 版本没同步。所以记住:升级 AGP 前一定要先看官方兼容性表。
版本演进的规律与趋势
从 1.x 到 8.x,AGP 有几个明显变化方向:
- 构建速度逐渐提升:从增量编译到构建缓存,再到非传递性 R 类,每次优化都在缩短编译时间。
- 对 Java/Kotlin 版本要求越来越高:7.0 开始强制 Java 11,8.0 开始推荐 Java 17。别偷懒,早点升级 JDK。
- 废弃旧工具链:Jack、Instant Run、apt 等都被砍掉了。R8 已经成为默认混淆工具。
- 构建缓存机制越来越重要:从 3.x 的实验性缓存,到 8.x 的官方重度依赖缓存。这刚好是我们这门课的重点——如果你不懂缓存背后的原理,升级后反而可能更慢。
核心思想:AGP 升级不是为了追新,而是为了获得性能提升和安全补丁。但盲目升级会引入缓存失效、配置不兼容等问题。本课程后续章节会用「瀑布图」帮你定位这些瓶颈。
下面我画了张图,把 AGP 版本演进的关键节点和核心特性串起来。你可以保存下来当索引——
个人经验:看完这张图,你应该明白了——AGP 的缓存机制其实是从 3.5 才开始真正落地的。如果你还在用 3.x 的版本,缓存能力非常有限。但升级到 7.x 或 8.x 后,缓存虽然强大了,却也更容易因为版本不匹配或 Gradle 配置错误而失效。这正是我们后续要讲的「瀑布图」要解决的问题。