根本原因是Gradle版本与仓库声明方式不匹配:AGP 7.0+强制要求仓库统一在settings.gradle中声明,且google()需同时配置在pluginManagement.repositories(下载AGP插件)和dependencyResolutionManagement.repositories(下载项目依赖)中。

Gradle 构建 Android 项目时找不到 google() 仓库的依赖(比如 androidx.appcompat:appcompat),根本原因不是“Google 仓库没了”,而是你当前的仓库声明方式和 Gradle 版本不匹配,或者 google() 根本没被真正启用。
build.gradle 里写 google() 现在会直接报错
AGP 7.0+(对应 Android Studio Giraffe 及更新版本)强制要求仓库统一由 settings.gradle 管理。如果你还在项目级 build.gradle 的 buildscript { repositories { } } 或 allprojects { repositories { } } 里写了 google(),就会触发:
Build was configured to prefer settings repositories but repository 'google' was added by build file 'build.gradle':17
这不是警告,是构建失败。Gradle 拒绝执行,因为它要防止多处声明导致来源混乱。
- 删掉
build.gradle中所有repositories块(包括buildscript.repositories和allprojects.repositories) - 确认
settings.gradle中已启用dependencyResolutionManagement,且repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)是默认值,不用显式写 - 不要在
buildscript.dependencies里依赖需要google()的插件——com.android.tools.build:gradle本身必须从google()下载,所以它的仓库必须在pluginManagement.repositories里声明
settings.gradle 里漏了 pluginManagement 或写错顺序
google() 必须出现在两个地方才真正生效:
-
pluginManagement.repositories:用于下载 AGP、Google Services 等插件(classpath) -
dependencyResolutionManagement.repositories:用于下载项目依赖(implementation)
常见错误是只写了后者,忘了前者——结果连 com.android.tools.build:gradle 都拉不下来,Sync 直接卡在 classpath 解析阶段。
正确写法(Groovy):
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
// ⚠️ jcenter() 已彻底停服,删掉
}
}
国内网络下 google() 超时或 403,但又不能用镜像替代
google() 是 Gradle 内置函数,它背后实际访问的是 https://dl.google.com/dl/android/maven2/。这个地址在国内直连极不稳定,常返回 403 或超时,但你不能简单把 google() 替换成阿里云或清华的 maven { url '...' }——因为 Google 官方组件(尤其是旧版 AndroidX)的 POM 文件中硬编码了 https://dl.google.com/... 作为元数据来源,镜像站不会反代这部分内容,会导致校验失败或依赖树断裂。
- 首选方案:用
google()+ 科学网络环境(仅开发机临时配置,非全局) - 次选方案:升级依赖版本,优先选用发布在
mavenCentral()的新版(如androidx.appcompat:appcompat:1.6.1+),它们已同步到 Maven Central,无需google() - 不推荐方案:手动下载 AAR/POM 放进
libs/或本地 Maven 仓库——维护成本高,无法传递 transitive 依赖
依赖坐标本身已废弃,但 build.gradle 还在用老版本
很多报错看似是“找不到”,实则是“找得到但拒绝加载”。例如 androidx.appcompat:appcompat:1.1.0 这类 2019 年发布的包,只存在于 JCenter 历史快照中,而 JCenter 已于 2023 年底大规模下线。即使你删了 jcenter(),如果 Gradle 因配置残留(如第三方插件偷偷注入)仍尝试访问它,就会卡在 403,不再继续查 google() 或 mavenCentral()。
- 运行
./gradlew app:dependencies --configuration debugCompileClasspath --scan查看真实解析路径 - 检查是否引入了旧版插件(如过时的
com.github.dcendents:android-maven-gradle-plugin),它们可能隐式添加jcenter() - 搜索整个工程:
grep -r "jcenter" . --include="*.gradle*",包括gradle.properties里的systemProp.配置
最麻烦的点往往不在你写的代码里,而在你没意识到的插件行为或全局 Gradle 配置中——它们会悄悄覆盖你的仓库策略,而且不报错,只让依赖“静默失效”。


















