4. 常见错误信息解析

AGP 版本不匹配时,Gradle 同步或构建会抛出一堆红色日志。说实话,很多新手看到那一屏报错就慌了。别急,我来帮你拆解最常见的几种报错,教你一眼看出问题在哪。

核心原则: 报错日志前几行往往只是表象,真正的病因在 Cause 或 Caused by 那几行。
AGP 版本冲突错误分类与排查流程 AGP 版本升级 Gradle 版本过低 报错: "Minimum supported Gradle version is X.x" 解决: 升级 Gradle Kotlin 插件版本冲突 报错: "supports only Kotlin Gradle plugin version Y.y" 解决: 降级 Kotlin 或升级 AGP 依赖库版本冲突 报错: "Conflict with dependency 'com.android.support:appcompat'" 解决: force / exclude / 统一版本 验证: 运行 ./gradlew :app:dependencies

4.1 「Minimum supported Gradle version is X.x」

这个报错太经典了。你升级了 AGP 到 8.x,结果 Gradle 还在 7.x 晃悠。Gradle 同步直接罢工。

FAILURE: Build failed with an exception.

* What went wrong:
The Android Gradle plugin requires Gradle 8.0 or higher.
Current version is 7.5.1.
Please fix the project's Gradle settings.

日志解读:

  • Current version is 7.5.1 —— 当前 Gradle 版本号,一眼就能看到。
  • requires Gradle 8.0 or higher —— AGP 的最低要求。说白了,AGP 和 Gradle 是绑定的,高版本 AGP 必须配高版本 Gradle。
  • 原因:AGP 内部 API 变了,旧 Gradle 不识别新 AGP 的 DSL。
我的习惯: 升级 AGP 前,先查 Google 官方兼容性表格,把 Gradle 版本一并升级。不然就等着报错吧。

4.2 「Supports only Kotlin Gradle plugin version Y.y」

这个我项目中遇到过好几次。AGP 8.2 只支持 Kotlin 1.9.x,结果项目的 Kotlin 插件是 1.8.0。报错长这样:

ERROR: The Android Gradle plugin supports only Kotlin Gradle plugin version 1.9.0 and higher.
Project 'app' is using Kotlin plugin version 1.8.0.

日志含义:

  • AGP 发布了新版本后,会废弃一些旧的 Kotlin 编译接口。版本差太多,AGP 直接拒绝干活。
  • Kotlin 版本括号里写的是 1.9.0 and higher,并不是说必须正好 1.9.0,只要大于等于就行。
注意: 别盲目升级 Kotlin 到最新版。有时最新 Kotlin 又要求更高 AGP……会形成循环依赖。我建议先查官方 Compatibility Matrix。

4.3 「Conflict with dependency 'com.android.support:appcompat'」

AGP 升级后,最头疼的其实是依赖冲突。尤其是从 support 库迁移到 AndroidX 时,或者多个子模块引了不同版本的同一个库。

ERROR: Conflict with dependency 'com.android.support:appcompat-v7' in project ':app'.
Resolved versions for app (28.0.0) and test app (26.1.0) differ.

日志解读:

  • Resolved versions for app (28.0.0) and test app (26.1.0) differ —— 主模块和测试模块依赖的 appcompat 版本不一样,Gradle 不知道选哪个。
  • 本质:Gradle 在 dependency resolution 时发现同一个 group 下不同版本,无法自动统一。
  • 常见场景:某个第三方 SDK 强制依赖了旧版本,而你的项目用了新版本。
解决办法(按优先级):
  1. force 指定版本(但不推荐滥用)
  2. exclude 掉冲突的传递依赖
  3. 在 configurations.all 里用 resolutionStrategy 统一版本
configurations.all {
    resolutionStrategy {
        force 'com.android.support:appcompat-v7:28.0.0'
    }
}
// 或排除某个传递依赖
implementation('com.example:sdk:1.0.0') {
    exclude group: 'com.android.support'
}

4.4 「Could not find com.android.tools.build:gradle:X.Y.Z」

有时候你会看到这个报错,同步直接挂掉:

Could not find com.android.tools.build:gradle:4.2.0.
Searched in the following locations:
  - https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/4.2.0/gradle-4.2.0.pom
  - https://repo1.maven.org/maven2/com/android/tools/build/gradle/4.2.0/gradle-4.2.0.pom
Required by:
  project :

日志含义:

  • Gradle 找不到你声明的 AGP 版本。要么是你写错了版本号(比如 4.2.0 不存在),要么是你的仓库没配对。
  • 注意 URL 前缀:dl.google.com/dl/android/maven2 是 Google Maven 仓库。如果它不存在,可能是 AGP 版本太老已被下架,或者你忘了加 google() 仓库。
我曾经踩过的一个坑: 升级 AGP 到 7.4.2,写完 classpath 'com.android.tools.build:gradle:7.4.2',同步报找不到,最后发现 Google Maven 上根本没有 7.4.2,最新是 7.4.1。所以版本号一定要去官方 Releases 确认。

4.5 AGP 与 AndroidX 迁移报错

当 AGP 升级到 8.x,但项目还没完全迁移到 AndroidX 时,你会看到类似的报错:

error: Attribute "android:name" in tag "activity" requires a valid reference.
or
** android:name cannot be empty **

这看起来不像版本冲突,但根源就是 android.enableJetifier=true 和 android.useAndroidX=true 设置不当。

日志解读:

  • AGP 8.x 默认移除了对旧 support 库的编译支持。如果你还用的 support 库编译,但 Jetifier 没开,就会报这些奇怪的 attribute 错误。
  • 现象:XML 里的 android:name 属性明明写对了,但 Gradle 说无效。
  • 本质:support 库的 AAR 里引用了旧的 R 类或清单标记,新 AGP 无法处理。
注意: 如果你还在用 support 库,赶紧迁移到 AndroidX。实在无法迁移,至少保证 gradle.properties 里把这两个开关打开:
android.useAndroidX=true
android.enableJetifier=true

4.6 遇到报错时的标准排查步骤

我个人习惯按照这个流程来,能省不少时间:

步骤 操作 日志关键位置
1 看最后面 Cause Caused by: ... 后面的内容才是真凶
2 检查 AGP 版本号拼写 classpath 'com.android.tools.build:gradle:8.3.0'
3 检查 Gradle 版本 distributionUrl 里写的版本
4 检查 Kotlin 插件版本 org.jetbrains.kotlin.android 版本号
5 运行 ./gradlew :app:dependencies 查看冲突树,找 --- 下的不同版本
最后送你一句话: 报错不可怕,可怕的是不看 Cause 只看 Summary。下次遇到红字先别慌,按上面表格一步步来,80% 的 AGP 冲突都能在 5 分钟内解决。