Android Gradle构建异常求助:未修改脚本却无法解析依赖
问题描述
近期执行Android Gradle构建时突然出现异常,但我完全没有修改过Gradle脚本。执行的构建命令为:
./gradlew clean assembleRelease
具体报错信息如下:
- 问题描述:配置根项目'*****'时发生错误。
无法解析':classpath'配置的所有文件。
找不到repository.jar(com.android.tools:repository:26.0.1)。已在以下位置搜索:
https://jcenter.bintray.com/com/android/tools/repository/26.0.1/repository-26.0.1.jar
找不到tracker.jar(com.android.tools.analytics-library:tracker:26.0.1)。已在以下位置搜索:
https://jcenter.bintray.com/com/android/tools/analytics-library/tracker/26.0.1/tracker-26.0.1.jar
项目构建脚本中配置的仓库包括:
jcenter() mavenCentral() maven { url 'https://maven.google.com' }
此外还有几个自定义仓库。
关键现象
- 上周构建完全正常,没有任何问题
- 部分同事的机器能正常构建,部分则失败
- 我本地机器清理Gradle缓存后,也开始出现构建失败的情况
- 有时错误列表会变化,看起来像是Maven仓库(尤其是jcenter)的访问或资源问题
请问有人遇到过类似问题吗?该如何解决?
解决方案
我之前碰到过几乎一模一样的问题,结合你描述的现象,大概率是旧仓库服务不稳定或者旧版本依赖被移除导致的,给你几个实用的解决方向:
1. 调整仓库优先级,优先使用Google Maven仓库
jcenter早在2021年就停止维护了,很多旧的Android工具依赖已经被移除或者访问不稳定。你当前的仓库配置里jcenter排在最前面,建议把Google Maven仓库(可以用google()简写,替代原来的maven { url 'https://maven.google.com' })移到最前面,让Gradle优先从Google官方仓库拉取Android相关依赖——毕竟这些工具类依赖本来就是Google维护的:
buildscript { repositories { google() // 优先使用官方仓库 mavenCentral() jcenter() // 可保留但放最后,或者直接移除 // 其他自定义仓库 } dependencies { // 确保这里的AGP版本和你使用的Build Tools版本匹配,比如26.0.1对应AGP 3.2.1 classpath 'com.android.tools.build:gradle:3.2.1' } }
2. 升级Android Gradle插件(AGP)版本
26.0.1对应的是比较老旧的Build Tools和AGP版本,这类旧版本的依赖在第三方仓库(比如jcenter)很可能已经被清理了。建议升级到一个更稳定、仍受支持的AGP版本(比如7.x系列,只要你的项目兼容)。升级时注意:
- 同步更新Build Tools版本到对应范围
- 检查项目中其他第三方依赖是否兼容新版本的AGP
3. 手动指定依赖的仓库来源(临时方案)
如果暂时不想升级AGP版本,可以在buildscript的依赖配置里,给这两个有问题的依赖明确指定仓库来源,强制Gradle从Google仓库拉取:
buildscript { repositories { google() mavenCentral() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.1' // 强制指定这两个依赖从Google仓库获取 classpath('com.android.tools:repository:26.0.1') { artifactUrls = ["https://maven.google.com"] } classpath('com.android.tools.analytics-library:tracker:26.0.1') { artifactUrls = ["https://maven.google.com"] } } }
4. 彻底清理Gradle缓存
虽然你已经清理过缓存,但可能有残留的损坏缓存文件。可以尝试:
- 执行命令清理构建缓存:
./gradlew cleanBuildCache - 删除本地Gradle缓存目录:
- Linux/macOS:
~/.gradle/caches - Windows:
C:\Users\<你的用户名>\.gradle\caches
- Linux/macOS:
- 重新执行构建,让Gradle重新下载所有依赖
5. 移除jcenter仓库(长期方案)
jcenter已经停止维护,并且逐步移除旧包,建议直接从仓库配置中删除jcenter,用google()和mavenCentral()替代——大部分Android相关的依赖都能在这两个仓库找到。如果有自定义依赖只能在jcenter,建议将这些依赖迁移到mavenCentral或者搭建私有仓库托管。
内容的提问来源于stack exchange,提问作者Pavel Santaev




