1. AGP 简介与配置基础
1.1 AGP 到底是个啥?
Android Gradle Plugin,圈里都叫它 AGP。说白了,它就是 Android 项目的“总包工头”。你写的 Kotlin 代码、XML 布局、图片资源、第三方库……最后能变成一个能跑的 APK 或 AAB,全靠 AGP 在背后调度。
我个人习惯把 AGP 理解成一条流水线。它先把资源打包,再编译代码,然后混淆、优化,最后签名输出。每一步都有专门的 Task 负责,AGP 就是那个确保流水线不出乱子的角色。
我在项目中遇到过好几回“编译卡死”或者“Gradle 版本不兼容”的崩溃,追根溯源,都是对 AGP 的配置理解不够深。所以第一章,咱们先把根扎稳。
核心作用一句话: AGP 负责将 Android 项目源码与资源,编译打包成可安装的应用包(APK / AAB)。
1.2 版本号规则 —— 别小看这串数字
AGP 的版本号长这样:7.4.2,分三段:
- 主版本号(7):大版本更新,通常伴随 Breaking Change。比如从 4.x 升到 7.x,配置改了一大堆。
- 次版本号(4):新功能或重要改进,一般向下兼容。
- 补丁版本号(2):Bug 修复,放心升。
版本背后藏着兼容性的坑。你想想看,AGP 版本和 Gradle 版本是绑死的。用错了组合,构建直接崩给你看。我曾经在某个项目里把 AGP 8.1 配上了 Gradle 7.5,结果跑一步崩一步,折腾了大半天才发现是版本没对上。
下面这张兼容表,我建议你存一下:
| AGP 版本 | 最低 Gradle 版本 | 推荐 Gradle 版本 | 备注 |
|---|---|---|---|
| 8.7.x | 8.9 | 8.11.1 | 最新稳定版 |
| 8.6.x | 8.7 | 8.10.2 | 推荐升级 |
| 8.5.x | 8.7 | 8.9 | 较老,但稳定 |
| 8.4.x | 8.6 | 8.7 | 注意 API 变更 |
| 8.3.x | 8.4 | 8.5 | 部分 API 弃用 |
| 8.2.x | 8.2 | 8.4 | 建议升级 |
避坑指南: 我曾经因为 gradle-wrapper.properties 里写死了低版本 Gradle,但 AGP 却用了新版本,导致构建时抛出 Unsupported class file major version 错误。检查版本兼容性,永远是第一步。
1.3 配置入口 —— 从哪下手?
AGP 的配置分散在几个关键文件里。很多新手一上来就懵,不知道该改哪个。我一般把它们分成三层:
第一层:项目级 build.gradle
这里声明 AGP 插件本身。注意是 buildscript 块,不是 plugins 块(新项目也可以用 plugins 语法,但我个人习惯用 buildscript,更直观)。
// 项目根目录下的 build.gradle(Project 级别)
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:8.6.0"
// 注意这里的版本号要和 Gradle 兼容
}
}
第二层:模块级 build.gradle
这里才是真正的“配置中心”。你设置的 compileSdk、minSdk、targetSdk、签名信息、混淆规则……全在这里。
// app/build.gradle(Module 级别)
plugins {
id "com.android.application"
}
android {
namespace "com.example.myapp"
compileSdk 35
defaultConfig {
applicationId "com.example.myapp"
minSdk 24
targetSdk 35
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt")
}
}
}
第三层:其他配套文件
settings.gradle:声明项目模块,配置插件管理仓库。gradle.properties:JVM 参数、Android 构建缓存开关等全局配置。local.properties:本地 SDK 路径,一般不上传到版本控制。
技巧: 我建议你创建新项目后,先把 gradle.properties 里的 org.gradle.jvmargs 改成 -Xmx4096m,能省掉很多内存不足的崩溃。别问我是怎么知道的……
1.4 AGP 构建流程一瞥
配置写好之后,AGP 到底是怎么把代码变成 APK 的?我给你画了张图,把整体框架理清楚。每次遇到构建崩溃,你都可以回到这张图上,看看是哪一步出了问题。
从这张图里你能看到:配置层把参数传给构建层,构建层里的五个步骤是串行的,前一步的输出就是后一步的输入。最终产物要么是 APK(直接安装),要么是 AAB(上传商店)。
嗯,这里要注意一点:混淆优化这一步,很多崩溃其实是因为混淆规则没写对。我在项目里踩过好几次这个坑,后面章节咱们会专门拿案例来讲。