Gradle与AGP版本对应关系全解析:升级迁移避坑指南 说起来你可能不信我上一次半夜被电话叫醒不是服务器挂了而是同事在升级Android Studio之后项目一直卡在构建阶段报了一串“Minimum supported Gradle version is X.X.X”和“Plugin requires Gradle X”的错误。等他描述完报错信息我第一反应就是又来了Gradle版本和Android Gradle插件版本又没对上。这个组合几乎是每位Android开发者的老朋友。不管你是刚入行还在照着教程一步步配环境还是已经维护了多年的老项目总会有一天被这两个版本号折磨一次。而且随着Gradle 9.x的发布、AGP 8.x的普及各版本之间的对应关系已经和几年前完全不一样了。这不是靠死记硬背就能搞定的你需要一套清晰的判断方法和排查路径。这篇文章我就把这两者的对应关系、选择逻辑、常见坑位都拆开讲透最后再分享一套我从旧项目迁移到新版本时验证过的操作流程。里面没有什么惊为天人的黑科技但全是实际能用、能复现的东西。1. 先搞清楚AGP和Gradle到底是什么关系1.1 两者的角色定位很多新手容易把Gradle和Android Gradle插件搞混以为它们是同一个东西。其实不是。Gradle是一个通用的构建工具。它本身不关心你在构建的是Android应用、Java库还是其他什么东西它只负责按照构建脚本里定义的Task依赖关系去执行任务、管理依赖、处理增量编译。你可以把它理解成一台通用机床能加工很多种零件。Android Gradle插件简称AGP则是运行在Gradle之上的一个插件。它把Android项目特有的逻辑注入到Gradle的构建流程里比如AndroidManifest.xml的合并、资源文件的处理、Java/Kotlin代码到DEX字节码的转换、APK打包签名等等。没有AGPGradle就不知道该把一个Android工程怎么变成产物。所以两者的关系是Gradle提供底层构建能力AGP在这个基础上定义Android构建规则。你每次改build.gradle里的插件版本本质上是告诉Gradle“用这套规则来构建我的Android项目”。1.2 为什么版本对应关系如此严格细心的朋友可能会发现AGP对Gradle版本的要求不是“大于某个版本就行”而是给出了一个明确的下限并且在某些版本组合下即使Gradle版本更高也会出现兼容问题。这里面的原因主要有三个AGP内部依赖了Gradle的某些API。AGP在实现增量编译、任务缓存、配置缓存等功能时需要调用Gradle内部提供的接口。这些接口在不同Gradle版本中可能改动AGP是依据特定的Gradle版本编译和测试的所以一旦Gradle低于它所要求的最低版本构建就可能直接报错。Gradle大版本升级会带来行为变更。Gradle从7.x升到8.x时很多配置项的写法变了比如仓库声明方式的调整旧版AGP可能没有适配这些变更于是出现不可预期的构建失败。JDK版本也在联动。新版Gradle和AGP对JDK版本也有要求JDK版本不匹配时现象通常很诡异比如构建时报Unsupported class file major version或者编译直接卡死无响应。基于这三点Gradle官方和AGP在每个版本发布时都会同步更新兼容性说明。你不需要一一记住每个版本的细节但要掌握一个原则先定AGP版本再根据官方兼容表选定Gradle版本最后确认JDK版本是否匹配。这是最不容易出错的路径。1.3 AGP版本号自身的变化还有一个容易懵的点AGP的版本号规则。在AGP 3.0之前AGP的版本号是和Android Studio绑定的例如2.2.0、2.3.0。从AGP 3.0开始插件版本号独立于Android Studio采用主版本.次版本.补丁号的语义化版本规则并且在每个大版本中会有针对特定Gradle API的适配。你去看AGP的发行说明会发现每个版本都标注了“Minimum Gradle Version”和“JDK Version”字样。这些说明才是你选择版本组合的最终依据。2. 版本对应关系速查表这几年各版本怎么搭档2.1 从AGP 4.0到AGP 8.x的完整对应关系这张表我整理了很久是综合了官方文档、实际项目验证和社区反馈的结果。先直接给结论后面再讲怎么用。AGP版本最低Gradle版本推荐JDK版本常见搭配4.0.x6.1.1JDK 8/11较老的旧项目很多人还在用4.1.x6.5JDK 8/11支持Android Studio 4.1~4.24.2.x6.7.1JDK 8/11常见于2021年前后的项目7.0.x7.0.2JDK 11我见过最多人在用的版本之一7.1.x7.2JDK 11修复了7.0的一些缓存问题7.2.x7.3.3JDK 11相对稳定的版本7.3.x7.4JDK 11支持配置缓存更完善7.4.x7.5JDK 11不少项目直接跳到这个版本8.0.x8.0JDK 17AGP大版本重启需要认真迁移8.1.x8.0JDK 17与AGP 8.0相比主要修复bug8.2.x8.2JDK 17支持Studio Hedgehog等新版8.3.x8.4JDK 17适配新SDK构建工具8.4.x8.6JDK 17稳定性有提升8.5.x8.7JDK 17适用于部分新版AS8.6.x8.7JDK 17版本逐步更新8.7.x8.9JDK 17较新的稳定版本注意官方兼容性表格中“最低Gradle版本”是AGP能在该版本上运行的下限并不代表超过这个版本的任何Gradle版本都能运行。Gradle的小版本升级也可能伴随行为变化所以如果你选择了更高的Gradle版本尽量别再搭配过老的AGP。另外这个表里有些版本需要结合Android Studio的版本来看。Android Studio在2022年后开始使用动物代号比如Hedgehog2023.1.1、Iguana2023.2.1、Jellyfish2023.3.1、Koala2024.1.1等。这些新版Studio一般会内置一个默认的最低AGP版本如果你手动降级到过低的AGPStudio可能直接提示不支持。2.2 怎么判断当前项目是哪个版本在动手升级之前先弄清楚你项目的现状。查版本的地方有以下几个。Gradle版本在gradle/wrapper/gradle-wrapper.properties文件里看distributionUrl字段distributionUrlhttps\://services.gradle.org/distributions/gradle-8.7-bin.zip这里写的是8.7就代表用的是Gradle 8.7。如果文件里没写也可以通过命令行执行./gradlew --version来查看。AGP版本在项目根目录的build.gradle或build.gradle.kts里搜索com.android.application或者com.android.library。如果是Groovy写法plugins { id com.android.application version 8.1.2 apply false }如果是老的依赖方式classpath com.android.tools.build:gradle:8.1.2这里的8.1.2就是AGP版本。JDK版本在IDE里就能看到也可以命令行执行java -version。不过在Android Studio里默认使用的可能是自带的JBRJetBrains Runtime所以你在系统命令行看到的Java版本未必是IDE里真正用的版本要看Settings - Build Tools - Gradle - Gradle JDK。把这三个信息搞清楚后面所有迁移操作才有依据。3. AGP 8.x的关键变化升级前必须知道的事3.1 AGP 8.0开始强制JDK 17AGP 8.0是最特殊的一个版本。它把最低JDK版本要求从11提升到了17同时最低Gradle版本要求直接跳到8.0。这意味着什么如果你还在用JDK 8或者11来跑构建只要一升级AGP 8.0立刻会出现类似Unsupported class file major version 61或者Gradle同步阶段直接失败。我当时在项目里升AGP 8.0时第一个碰到的问题就是这个。解决方案很简单把Gradle JDK切换到17。但如果你的电脑上没装JDK 17那就得先装一个或者直接在Android Studio的Gradle JDK下拉框里选择“jbr-17”之类的自带运行时。顺便说一句JDK 17对Gradle 8.x来说也是一个比较舒服的版本Gradle 8.x的官方推荐JDK范围是17到21所以如果你没有特殊原因直接上JDK 17就行。3.2 仓库和插件声明的写法变化AGP 8.x对构建脚本的写法也有新要求。最典型的就是版本目录Version Catalog已经成为了官方的推荐方案不过对于老项目来说不一定非得立刻迁移到libs.versions.toml但有一些旧写法在AGP 8.x里已经不再支持。比如AGP 7.x时代可以这样依赖老式构建工具android { buildToolsVersion 30.0.3 }但在AGP 8.x中build tools的默认版本已经内置并随之更新手动指定一个过旧的版本反而会报错。官方推荐不使用buildToolsVersion除非你有明确理由。再比如manifest文件里的package属性在AGP 7.3之后就开始被警告到了AGP 8.0则强制移除必须迁移到namespace。这直接体现在build.gradle里android { namespace com.example.myapp }如果你在AGP 8.0下还保留着package属性构建会直接失败。3.3 配置缓存的影响从Gradle 7.0开始配置缓存Configuration Cache成为可选项AGP 7.4之后对它的支持逐渐完善。到了AGP 8.x配置缓存已经是比较主流的使用方式。配置缓存的好处是增量构建快很多但如果你项目里有一些自定义Task使用方式不规范比如直接读取外部文件、在配置阶段执行IO操作、或者动态生成Task名称开启配置缓存后会出现各种报错。对于只是想稳定升级的人我的建议是先不要开启配置缓存保证迁移后构建正常然后再逐步尝试开启。不需要为了追求速度把升级复杂度拉高。有一个经验是我自己当时从AGP 7.4升8.2如果不开配置缓存整个改造很小基本上就是调整JDK版本和脚本写法如果开了配置缓存还要额外排查多个插件的兼容性工作量直接翻倍。4. 实操过程从AGP 7.x升级到8.x的完整步骤4.1 升级前的准备工作在动任何版本号之前先做好备份和检查不要一上来就改。我的标准流程如下用Git建一个升级分支或者至少打一个tag确保可以随时回滚。记录当前可完整构建的版本组合。跑一遍./gradlew assembleDebug确认当前代码基线是好的。检查第三方插件兼容性。比如Hilt、Kotlin、ButterKnife如果你还在用、ARouter、各类推送SDK等最好在它们的发行说明里确认对AGP 8.x和Gradle 8.x的支持情况。确认Kotlin版本。AGP 8.0起内置的Kotlin版本要求和项目里的Kotlin插件版本需要相互搭配旧版Kotlin比如1.6以下可能无法与AGP 8.x共存。我遇到过最典型的坑是项目里用了非常老的Kotlin版本1.5.x当时升级AGP 8.0后Kotlin编译一直报“The current Kotlin compiler version is too old”。最后把Kotlin升级到1.8.22才解决。4.2 修改Gradle Wrapper版本打开gradle/wrapper/gradle-wrapper.properties把distributionUrl改成目标版本。以AGP 8.2配合Gradle 8.2为例distributionUrlhttps\://services.gradle.org/distributions/gradle-8.2-bin.zip这里有个细节如果后面构建报错提示需要更高版本再往上调整Gradle版本。不要一次性跳到最高版本因为Gradle 8.5、8.6之后的某些行为变化可能会引入新的问题。修改完后在Terminal里执行./gradlew --version如果输出显示的是你指定的Gradle版本说明Wrapper已经生效。4.3 修改AGP版本在项目根目录的build.gradle或build.gradle.kts里将com.android.tools.build:gradle改成目标版本。以8.2.2为例plugins { id com.android.application version 8.2.2 apply false id com.android.library version 8.2.2 apply false }如果你是老式配置buildscript { repositories { google() mavenCentral() } dependencies { classpath com.android.tools.build:gradle:8.2.2 } }改完之后先执行一次./gradlew help或./gradlew clean看看同步阶段能否跑通。这一步能过滤掉大部分配置写法问题。4.4 处理namespace和package属性这一步是很多老项目升级AGP 8.x必踩的坑。在旧的AGP版本里AndroidManifest.xml的根节点上会写这个属性manifest xmlns:androidhttp://schemas.android.com/apk/res/android packagecom.example.myappAGP 7.x还能容忍这种写法但AGP 8.0直接抛出错误要求迁移到namespace。操作方式如下在对应模块的build.gradle或build.gradle.kts中增加namespace字段值就是原来manifest里的package值。把manifest根节点上的package属性删除。如果代码里有用到getPackageName()或者XML资源中引用到了原来的package名需要同步确认名称是否保持一致。完成后构建一次如果还有和R类、BuildConfig相关的错误继续看下一步。4.5 调整BuildConfig和R类相关依赖在AGP 8.0中BuildConfig默认不再为库模块生成。如果你的项目里有库模块并且代码里引用了BuildConfig.DEBUG之类的字段需要手动在模块的build.gradle中开启android { buildFeatures { buildConfig true } }还有一点AGP 8.0之后某些模块的R类不再是常量。如果你有在switch-case里引用R.id的代码升级编译时会报错需要改成if-else或者使用注解处理兼容方式。这个改动比较琐碎但好在编译器会给出明确的错误位置一个个修就行。4.6 处理第三方插件的兼容问题第三方插件是升级过程中最大的变量。我在一个实际项目里同时用到了Hilt、Gson、Room、Glide、ARouter。升级AGP 8.2后最先出问题的是Hilt因为它的Gradle插件版本太老需要至少2.48。Glide的注解处理器在新的构建环境下也会出现警告但可以忽略。这里有一个实用的考察方法进入插件源码或文档页面查看它的Maven坐标。如果插件版本最近一年没更新并且构建配置里对Gradle版本有硬性要求那大概率要一起升级。如果它的Maven坐标里写的是compileOnly方式提供的通常兼容性压力会小一些。我的建议是升级AGP前先把这些插件的版本都升到与目标AGP同期的稳定版本而不是等AGP报错后再一个个试。你不想在构建日志里来回翻滚三小时。4.7 回归验证构建通过只是第一步。我通常还会跑一遍核心功能的冒烟测试尤其是这些场景需要重点关注资源文件与多语言适配是否受影响。依赖推送与SDK初始化是否正常。多渠道打包是否还能正常执行。Debug和Release模式下是否都有差异。如果项目里有单元测试和UI测试尽量在本地跑一轮别急着只依赖CI。升级构建系统的第一天本地回归比远程CI反馈快得多。5. 常见问题与排查技巧实录5.1 构建报错速查表这里我整理了升级过程中最常遇到的问题、报错特征和对应的解决办法可以直接对照排查。现象/报错原因解决方案Minimum supported Gradle version is 8.0AGP版本要求的Gradle版本高于当前wrapper升级Gradle wrapper到目标版本Could not find com.android.tools.build:gradle:8.2.2AGP版本号写错或仓库没有该版本检查版本号是否真实存在检查google()仓库是否在repositories中Unsupported class file major version 61JDK版本过低将Gradle JDK切换到17The projects Gradle version 6.7.1 is incompatible with the Gradle JVM version ...Gradle版本与JDK版本不匹配要么降低JDK版本要么升级Gradle版本Gradles dependency cache may be corrupt依赖缓存损坏或网络问题导致下载不完整删除.gradle/caches目录下对应缓存重新同步Could not install Gradle distribution from https...下载Gradle发行版失败多因网络原因检查网络连通性或更换可访问的镜像下载地址D8: Cannot fit requested classes in a single dex file64K方法数超限或分包配置失效开启multidex检查minSdk和multiDexEnabled配置This project uses AndroidX dependencies, but ...项目未开启AndroidX在gradle.properties中设置android.useAndroidXtrueThe package attribute is deprecatedmanifest中仍在用package迁移到build.gradle中的namespaceBuildConfig generation is disabled模块中引用BuildConfig但未开启在模块中设置buildFeatures { buildConfig true }Configuration cache state could not be cached某些Task不满足配置缓存要求关闭配置缓存或用--no-configuration-cache标志Could not resolve all files for configuration :app:debugRuntimeClasspath依赖解析失败仓库不可达或依赖不存在检查依赖坐标、仓库配置清理缓存后重试Gradle sync failed: Could not get unknown property android for project项目级或模块级脚本写法错误检查插件是否已apply是否在错误位置使用android {}Kotlin could not find the required JDK toolsKotlin编译器找不到JDK工具确认JDK路径配置正确检查gradle.properties中的org.gradle.java.home这只是一张比较高频的排查表实际构建中还会出现很多组合性的错误。遇到报错先不要慌我的排查方法是先看错误信息里带有的版本号关键字判断是Gradle版本问题还是AGP版本问题再看报错发生在哪个Task如果是compile任务则多半是编译配置或依赖冲突如果是configuration任务则多半是脚本写法或插件兼容问题。5.2 下载太慢和依赖缓存损坏的处理热词里看到不少人卡在Gradle发行版下载太慢的问题。这个问题的本质是Gradle Wrapper启动时会去下载指定的distribution如果下载过程被网络问题拖住构建就卡死。常见报错是Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-8.7-bin.zip. Reason: java.net.SocketTimeoutException: timeout解决办法有几种按推荐排序使用IDE内下载Android Studio在打开Gradle项目时会通过自己的网络逻辑去下载很多场景下比手动执行命令行更稳。如果已经卡死先关掉所有Gradle相关JVM进程再通过Studio重新Sync。配置本地或内网分发源如果你所在团队有一台内网下载服务器可以把distributionUrl指向内网地址。但要注意这个方法对个人项目不太适合因为别人拉取你的代码仓库时还需要访问相同地址。复用已有的Gradle发行版如果你机器上已经有某个版本的Gradle可以手动解压到~/.gradle/wrapper/dists/下的对应目录并在gradle-wrapper.properties中指定相同版本这样Wrapper检测到已存在时就不会重复下载。这里必须说清楚不要使用任何非官方渠道获取Gradle发行版也不要去折腾那些来路不明的加速工具风险不可控涉及的安全和兼容问题不值得。如果下载已经完成但构建时出现“Gradles dependency cache may be corrupt”这类提示这通常是上一轮构建因网络中断或进程被杀导致的。解决方式很直接rm -rf ~/.gradle/caches然后重新同步。如果项目依赖很多删了之后第一次构建会慢一点但能排除缓存损坏的问题。不过要提醒一下删除~/.gradle/caches不会删除你项目里的依赖声明它只是重新下载依赖。如果你的构建脚本里有自定义的本地依赖路径那部分不受影响。5.3 Gradle JVM版本不匹配的处理有一个报错在热词里也出现了The projects Gradle version 6.7.1 is incompatible with the Gradle JVM version 17这属于Gradle自身版本和运行它的JVM版本不匹配。Gradle 6.7.1发布于2020年不支持JDK 17作为运行时运行时会直接报错。而AGP 8.x又要求你的JDK是17于是你陷入一个两难Gradle太老跑不了新JDKAGP太新需要新JDK。解决办法只有一个方向升级Gradle版本而不是降级JDK。Gradle 8.x对JDK 17的支持已经非常完善所以直接升级Gradle wrapper到8.x即可。这里还要注意一种情况你系统环境变量里Java是17但Gradle IDE用的却是另一个JVM两者不一致也会出问题。最好在Android Studio的Settings - Build Tools - Gradle - Gradle JDK里明确指定17这样IDE和命令行构建用的JDK就统一了。5.4 其他容易忽略的坑再分享几个我实际遇到过、但官方文档里不太会写的坑gradlew 脚本没有可执行权限。如果你在Linux/Mac下执行./gradlew提示Permission denied先运行chmod x gradlew。Android Studio的缓存也参与角色。升级AGP之后如果Studio里一直同步不过去可以尝试File - Invalidate Caches / Restart清掉IDE层缓存。插件版本写成动态版本号。比如version 这在一段时间内能用但升级后很可能拉到不兼容的版本。强烈建议使用固定版本号。本地Maven仓库优先级问题。如果项目里配了多个仓库而你的依赖在多个仓库里都存在Gradle会按声明顺序解析有可能用到了一个老版本。热词里也有“gradle 拉取本地maven仓库包”的内容所以这里特别提醒一下。网络代理与反向代理的干扰。虽然这里不展开任何违规加速通道但正常企业的内网代理可能导致Gradle下载失败需要检查环境变量中的HTTP_PROXY和HTTPS_PROXY设置是否影响下载。6. 一个实战迁移案例从AGP 7.4升级到8.2的全过程6.1 初始状态我之前接手过一个项目基本情况是这样的Android Studio版本Flamingo 2022.2.1Gradle版本7.5AGP版本7.4.2JDK版本11Kotlin版本1.7.10构建方式Groovy DSL模块数3个app 2个library第三方的Gradle插件Hilt、Google Services、Firebase目标是升级到AGP 8.2.2 Gradle 8.2 JDK 17。6.2 执行顺序我不是一次全部改完而是分阶段推进阶段一先备份和确认基线创建升级分支。跑一次完整构建确认基线无误。阶段二升级Gradle 8.2修改gradle-wrapper.properties。在Android Studio中把Gradle JDK切换到17。先执行./gradlew --version确认Gradle能启动。然后跑./gradlew help此时Gradle 8.2还未搭配新AGP项目里的AGP还是7.4.2理论上兼容性提示会警告“AGP版本太老不是最佳实践”但还能跑。这一步主要是筛选Gradle自身层面的问题。阶段三升级AGP到8.2.2修改根build.gradle中的AGP版本。同步后首先遇到的报错就是manifest里的package属性。迁移到namespace后继续遇到BuildConfig生成问题。开启buildConfig后Hilt的插件版本报错升级Hilt到2.48。将Kotlin从1.7.10升级到1.8.22。阶段四处理依赖和回归更新所有第三方SDK到适配版本。本地跑单测和核心流程。修复若干因为R类常量变化引发的问题。最后跑一次打正式包。整个过程大概花了一天半的时间。其中一半时间在等构建和下载依赖真正手动改代码的时间大概四五个小时。6.3 这个案例给你的启示一个比较重要的结论是升级AGP不能只升级AGP。它往往是Gradle、JDK、Kotlin、第三方插件一起联动的操作。如果你只改AGP版本而忽略其他部分报错会一轮接一轮好像在打地鼠。我的建议是先去官方兼容性页面确认目标AGP版本对应的Gradle版本和JDK版本再进入改造流程不要直接看某一个博客或旧文章里的老版本组合新老项目情况不一样。7. 版本选择的思路与后续建议7.1 版本选择的原则面对这么多版本号到底怎么选才合适结合我自己的实践可以归纳成三条原则新项目直接使用较新的稳定版本。比如当下的AGP 8.7.x配合Gradle 8.9JDK 17。这是最省事的组合因为新版本的工具链默认支持新特性遇到问题的概率相对低。老项目以稳定性为前提升级。如果你的老项目SDK版本不高、逻辑复杂、第三方依赖多选择AGP 7.4或8.0这样的过渡版本也行不必一步到位追最新。关键是确保Gradle版本不低于AGP要求的下限。不推荐在生产环境使用Android Studio Canary版本内置的AGP预览版。预览版可能引入新的行为变更而且兼容性文档往往不完整出了问题排查成本很高。另外我在实际使用中发现一个很值得参考的做法先看项目里的CI配置是否对JDK有硬性要求。如果CI用的是JDK 11那么你升级到AGP 8.x就得同时改CI环境不然本地没问题提交后CI直接挂掉。这个坑在团队协作里特别常见。7.2 关注官方发行说明Gradle和AGP的发行说明是版本对应关系的源头。每次新版本发布时里面会明确写出兼容范围、废弃特性和迁移指南比任何第三方文章都可靠。我自己的习惯是每次升级前先把目标版本的Release Notes从头到尾过一遍重点关注两个部分Deprecations and breaking changes这里会列出不再支持的特性。Compatibility and version matrix这里包含最低Gradle版本、最低JDK版本等硬性指标。如果你能坚持这样做会发现升级构建系统并没有那么玄乎就是一次一次按图索骥而已。7.3 多项目统一版本管理如果你在维护多个Android项目或者一个包含多个模块的大工程建议把Gradle和AGP的版本统一管理起来。比较推荐的方式是使用gradle/libs.versions.toml版本目录这种声明方式可以把依赖版本、插件版本集中在一个文件里方便批量升级也方便排查版本冲突。不过需要注意版本目录本身是Gradle 7.4才支持的特性如果你还在用老版本Gradle可以先升级Gradle再引入。用版本目录管理AGP后项目根目录的settings.gradle.kts里会多出这样一段plugins { alias(libs.plugins.android.application) apply false }这样你的AGP版本只会出现在一个地方不会在模块的build.gradle里写很多重复的版本号。7.4 遇到新版本要不要第一时间升级很多朋友一看到新版本发布就跃跃欲试。我的建议是不要在新版本发布后的前一两周内贸然升级生产项目。新版本发布初期的反馈还没有完全暴露可能存在一些Edge Case上的问题。等社区跑一段时间看看有没有集中性的反馈再决定是否升级。当然如果你只是做一个Demo或者个人项目尝鲜是没有问题的。注意备份就好。最后再分享一个小技巧构建过程中如果出现奇怪的错误先不要急着改代码。Gradle的报错信息有时候会把真正的原因隐藏在很长的堆栈后面。这时候可以用./gradlew --stacktrace --info重新跑一次能获得更多上下文。但不要把这组参数写死在gradle.properties里不然每次构建输出太大反而影响效率。我经历过太多次“凌晨三点还在跟版本号较劲”的场景也踩过很多次Gradle版本和AGP版本不匹配的坑。总结下来这个问题的本质并不复杂它只是一套互相依赖的版本系统。只要你掌握了对应关系表、理解了变更的原因、按照合理顺序去升级大部分问题都能在半小时内定位并解决。希望这篇经验整理能让你少走一些弯路。