You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Gradle构建异常求助:未修改脚本却无法解析依赖

Android Gradle构建失败:无法解析com.android.tools:repository:26.0.1及tracker依赖

问题描述

近期执行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
  • 重新执行构建,让Gradle重新下载所有依赖

5. 移除jcenter仓库(长期方案)

jcenter已经停止维护,并且逐步移除旧包,建议直接从仓库配置中删除jcenter,用google()mavenCentral()替代——大部分Android相关的依赖都能在这两个仓库找到。如果有自定义依赖只能在jcenter,建议将这些依赖迁移到mavenCentral或者搭建私有仓库托管。


内容的提问来源于stack exchange,提问作者Pavel Santaev

火山引擎 最新活动