
简介这是 Gradle 6.5 正式版的完整 zip 资源包适合在 Android Studio 或 Java/Kotlin 项目中需要离线构建工具的开发者。压缩包约 139MB包含约 2000 个文件除大量 Java、Groovy、Kotlin 源码外还有 HTML 文档、JAR 运行库、插件注册表、gradle wrapper 配置及跨平台启动脚本等解压后即可配置本地 Gradle 环境。已有 1059 人学习/下载。相比官网直连此包能规避网络不稳定的问题且内置 bin、lib、docs、src 等规范目录便于查阅文档或研究实现。Gradle 6.5 优化了缓存与增量构建机制可显著提升大型项目编译速度依赖解析器能更智能地处理间接依赖冲突同时增强了对 Android 插件和多语言项目的支持并改进了 Wrapper 的安全性。对 Android 开发者而言使用此包可以快速固定团队构建版本减少环境差异带来的问题适合离线搭建统一的构建环境。 gradle-6.5-all.zip 这个文件名字平平无奇但每一个被它折腾过的人都记得那种绝望项目同步永远卡在 distributionUrl 这一步gradle 下载太慢、下载到一半报 socket timeout然后整个 Android Studio 或 IDEA 就杵在那不动。这篇内容不打算讲 Gradle 基础概念而是围绕 gradle-6.5-all.zip 这一包把它是什么、为什么项目会锁它、下载慢怎么解决、装完怎么配环境、老项目里常见的版本冲突怎么排全部捋一遍。不管你是刚入门的 gradle 开发新手还是需要给 Flutter 项目、老安卓工程同步构建环境的老手下面这些内容应该都能直接拿来用。1. 这个zip包到底是什么为什么项目偏偏锁6.5的all版1.1 all版和bin版的差别别选错Gradle 官方发行包常见两个形态-bin.zip和-all.zip。bin只包含可执行文件和运行所需的库体积小下载快all在 bin 的基础上额外附带完整源码、文档和示例方便 IDE 跳转、源码调试。很多项目模板默认写的就是gradle-6.5-all.zip因为 Google 的旧模板和不少 Flutter 脚手架都直接引用了这个地址。代价就是 all 包体积比 bin 大不少官方源在国内下载极不稳定。所以我在带宽紧张的环境里会先把 distributionUrl 改成gradle-6.5-bin.zip应急项目能跑起来只是 IDE 里看 Gradle 源码时部分地方只能反编译。注意可以换 bin 或 all但不要轻易换版本号Gradle 和 Android Gradle PluginAGP对版本有硬性对应关系随便跳版本会引出下面第4章的一堆问题。1.2 Gradle 6.5 和 AGP、JDK 的三角关系Gradle 不是独立存在的它要跟你用的 AGP 插件、JDK 版本对上才行。Gradle 6.5 发布于 2020 年中当时很多工程选它是因为它正好是 AGP 4.1 的最低 Gradle 版本要求。常见对应关系大致如下AGP 版本最低 Gradle 版本常用 JDKAGP 4.0.xGradle 6.1.1JDK 8AGP 4.1.xGradle 6.5JDK 8 / 11AGP 7.0Gradle 7.0JDK 11AGP 8.xGradle 8.xJDK 17如果你项目里的 AGP 是 4.1wrapper 写 gradle-6.5-all.zip 是完全合理的反而升级到 Gradle 7 或 8 才会出问题。所以遇到下载问题时先别急着换最新版先确认项目当前的 AGP 是什么、JDK 是什么再决定下一步。1.3 wrapper 的原理一切下载行为都来自那一行配置Gradle Wrapper 的配置文件在项目根目录gradle/wrapper/gradle-wrapper.properties内容大概是distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps\://services.gradle.org/distributions/gradle-6.5-all.zip zipStoreBaseGRADLE_USER_HOME zipStorePathwrapper/dists看明白这五行很多问题就通了。Gradle 项目不直接调用你电脑上手动安装的全局 Gradle而是通过gradlew.bat或gradlew脚本按 distributionUrl 指向的地址去下载对应 zip缓存在GRADLE_USER_HOME/wrapper/dists下再解压执行。所以你执行gradlew.bat build时如果提示正在下载 Gradle或者卡在下载 Gradle distribution本质都是在跟这一行 URL 打交道。这也解释了为什么手动改了系统 PATH 里的全局 Gradle 版本项目可能还是用 wrapper 指定的 6.5 在跑。2. 下载超时问题从报错到解决的完整排查链路2.1 先看懂报错里到底在说什么最常见的报错长这样Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-6.5-all.zip. Reason: java.net.SocketTimeoutException: connect timed out意思是 wrapper 尝试从官方地址下载 zip连接超时了。官方服务器在国外国内网络环境这种错误非常常见。下载中断时系统会在缓存目录留下一个半截文件有的版本是.download后缀有的会生成.part下次构建时如果检测到这个不完整文件可能会复用并继续卡住或者直接报 checksum 校验失败。遇到这种情况我建议按下面的顺序做不要乱试。2.2 最稳的办法手动下载 zip 放进 wrapper 缓存目录因为 Gradle 缓存目录是根据 distributionUrl 计算出来的哈希目录所以手动放文件时先找到那个目录。以 Windows 为例路径一般是C:\Users\你的用户名\.gradle\wrapper\dists\gradle-6.5-all\一串随机哈希\不同项目对应不同哈希目录因为不同 distributionUrl 会生成不同 key。操作步骤先用浏览器或下载工具把gradle-6.5-all.zip完整下载下来。进入gradle-6.5-all目录找到对应的哈希子目录。把目录里已有的.download、.part、.lck等残留文件全部删掉再把 zip 放进去。确保 zip 文件完整大小跟官方一致然后重新跑gradlew.bat。wrapper 检测到本地已经有完整 zip 后不会再走网络请求会直接解压使用。这个方法也适用于公司内网隔离、多台机器共用一个缓存目录的场景比反复改镜像源稳定得多。2.3 改镜像源简单粗暴但要注意缓存如果嫌手动下载麻烦可以直接把 distributionUrl 改成国内镜像地址。我实际用过比较稳定的是腾讯云和华为云的镜像例如distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-6.5-all.zip或者distributionUrlhttps\://mirrors.huaweicloud.com/gradle/gradle-6.5-all.zip改完之后务必删除~/.gradle/wrapper/dists/gradle-6.5-all整个目录否则 Gradle 可能因为缓存 key 不匹配或旧文件残留出现明明改了镜像还是报超时的情况。另外gradle.properties 里如果有自定义的gradle.wrapperUrl或仓库代理配置也要检查一遍避免被旧配置干扰。2.4 缓存损坏的连带处理下载中断次数多了有时还会遇到Gradles dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)这是依赖缓存~/.gradle/caches/modules-2里的模块元数据不完整导致的。处理并不复杂关闭 IDE删除~/.gradle/caches/modules-2目录然后重新构建。如果嫌全删太重可以只删报错提示里对应的模块路径。注意这个操作会让全部依赖重新下载一遍网络不好时先配好镜像再操作否则会二次受罪。3. 下载完成不等于结束环境配置和 gradlew 不下载的怪现象3.1 本地安装 Gradle 6.5 和环境变量有些场景要求直接用命令行gradle build不通过 wrapper那就需要手动安装。解压gradle-6.5-all.zip到纯英文路径比如D:\gradle\gradle-6.5然后配置环境变量新建GRADLE_HOMED:\gradle\gradle-6.5在PATH里追加%GRADLE_HOME%\bin命令行执行gradle -v看到 Gradle 6.5 和 JVM 信息就说明成功了路径避免中文和空格否则部分场景会出诡异问题。还有一个容易被忽略的地方全局 Gradle 安装好并不代表项目会用这个版本项目构建优先看gradlew和 wrapper 配置。想跳过 wrapper 下载、直接用本地已装 Gradle 也能做到在 IDEA 或 Android Studio 里把 Gradle 的 Distribution 选成 Local installation指定本地路径即可。3.2 IDEA / Android Studio 里配置 Gradle 的常见坑IDEA 和 Android Studio 默认会使用项目 wrapper 配置同步时如果一直下载失败可以在 Settings 里检查三项Build Tools - Gradle - Gradle user home一般默认是用户目录下的.gradleC 盘空间不够时记得改到其他盘Gradle Projects - Distribution选 Wrapper 还是 Local installation网络差时建议选本地安装路径Gradle JDK这里特别关键 Gradle 6.5 对 JDK 版本有上限要求如果选了一个 Java 15 的 JDK构建时就会报 The projects Gradle version 6.7.1 is incompatible with the Gradle JVM version 这类错误。我项目里通常保留 JDK 8 和 JDK 17 两套环境Gradle 6.5 老项目用 JDK 8Gradle 8/9 新项目用 JDK 17互不干扰。3.3 为什么执行 gradlew.bat build 没有触发 Gradle 下载这个问题被问过很多次明明 wrapper 配置里有 distributionUrl为什么执行gradlew.bat build不下载 Gradle可能原因有几个缓存目录里已经有对应 zipGradle 直接复用了这是正常现象看错了目录wrapper 不在项目根目录或者gradle/wrapper/gradle-wrapper.jar缺失执行时报Could not find or load main class org.gradle.wrapper.GradleWrapperMain环境变量被改过GRADLE_USER_HOME被指到其他位置wrapper 找不到已有缓存gradle.properties里设置了org.gradle.java.home指向不存在的 JDK 路径或者指定了旧版本的 JDK构建初始化直接失败。排查的时候先看gradle-wrapper.properties里 distributionUrl 是否正确再看gradlew.bat所在目录最后检查环境变量。多机同步项目时建议把 distributionUrl 配成国内镜像并提交到版本库团队成员能少踩很多坑。3.4 从本地 Maven 仓库拉包配置方式要看清楚有些项目的依赖不在公网中央仓库而是放在本地 maven 仓库或公司内网私服。Gradle 里常见写法是这样repositories { // 使用本机 maven 本地仓库 ~/.m2/repository mavenLocal() // 使用项目相对目录的本地仓库 maven { url uri(${rootProject.dir}/repo) } // 使用绝对路径的 maven 仓库 maven { url file:///D:/maven/repo } }在旧版 Gradle 里repository 配置写在模块级build.gradle的repositories块在 Gradle 7 以上官方更推荐写到settings.gradle的dependencyResolutionManagement里。Gradle 6.5 这时候还能接受模块级配置但如果你打算升级 Gradle就要提前做迁移。另外本地 maven 仓库的包一定要带pom文件否则 Gradle 经常识别不了。4. 老项目最容易踩的三个兼容性地雷4.1 Projects Gradle version incompatible with the Gradle JVM version 的处理这个报错其实不是 Gradle 6.5 专属而是 Gradle 运行时的 JVM 版本不对。比如项目用的是 Gradle 6.7.1但 Android Studio 里 Gradle JDK 选的是 Java 17运行时就可能报The projects Gradle version 6.7.1 is incompatible with the Gradle JVM version 17处理方式不是去改 distributionUrl而是把 Gradle JDK 改成 8 或 11。在 Android Studio / IDEA 的 Settings 里找到 Builder - Build Tools - Gradle - Gradle JDK下拉选择 JDK 8。如果你的机器没装 JDK 8可以下载一个纯 Java 运行环境不用改系统默认 JDK只在 IDE 里指定路径就行。4.2 dependency cache 损坏根因和恢复顺序前面简单提过Gradles dependency cache may be corrupt这个报错在线程里面很常见比如 Android Studio 里常见Gradles dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)根因就是网络中断导致~/.gradle/caches/modules-2/files-2.1下面某个依赖的.jar或.pom只写了一半。修复顺序我建议从轻到重项目里执行gradlew build --refresh-dependencies让 Gradle 尝试重新检查依赖如果还报错按照报错里的路径删除对应的那个模块目录再不行关闭 IDE删掉整个~/.gradle/caches/modules-2然后重新构建前提是确保 distributionUrl 镜像可用不然所有依赖重新下载会非常痛苦。4.3 Flutter 项目里 applying Flutters main Gradle plugin imperatively 的修复新版 Flutter 对 Gradle 插件的加载方式收紧了如果项目还在老结构里手动加载 Flutter 的 Gradle 脚本会看到类似You are applying Flutters main Gradle plugin imperatively using the apply script method, which is no longer supported.原因是新版 Flutter 要求通过settings.gradle的pluginManagement和includeBuild方式注册 Flutter Gradle 插件而不是在app/build.gradle里用apply from: $flutterRoot/packages/flutter_tools/gradle/app_plugin_loader.gradle这种命令式写法。修复方法是把android/settings.gradle改成新模板结构pluginManagement { def flutterSdkPath { ... }() includeBuild($flutterSdkPath/packages/flutter_tools/gradle) repositories { google() mavenCentral() gradlePluginPortal() } } plugins { id dev.flutter.flutter-plugin-loader version 1.0.0 id com.android.application version 7.4.2 apply false id org.jetbrains.kotlin.android version 1.8.22 apply false }然后在android/app/build.gradle里用plugins块声明plugins { id com.android.application id kotlin-android id dev.flutter.flutter-gradle-plugin }去掉所有手动apply from的 Flutter 脚本。要留意的是改完这种方式AGP 和 Gradle 版本往往要跟着升级Gradle 6.5 不一定满足新模板要求这会牵扯回第1章的版本联动关系。5. 从6.5到9.x要不要升级我的判断和实操体会5.1 版本升级不是越新越好兼容表优先看到最近热搜里有gradle 9.1、gradle 9.4.1 bin很多朋友会想直接把老项目从 6.5 升到 9.x。我的建议是不要被新版冲昏头。Gradle 9.x 要求 JDK 17而且旧项目里的 AGP、依赖插件可能都没跟上。升级前先查清楚这三张表的对应关系Gradle 版本对应 AGP 版本AGP 版本对应 JDK 版本Flutter 项目还要加一张 Flutter SDK 对应 AGP/Gradle 版本的表。如果项目还停留在 AGP 4.1Gradle 6.5 就是合适的选择换 Gradle 9 反而会导致大量 API 废弃、行为变更改起来比修复下载问题费时得多。5.2 长期推荐的做法镜像源固定 缓存复用如果你的团队长期用 Gradle 6.5我建议把 distributionUrl 改成国内镜像后提交到仓库这样所有成员同步项目时不会卡在官方源。CI 环境里设置一个共享的GRADLE_USER_HOME比如 CI 机器上定义一个固定目录避免每次构建重复下载 Gradle 发行包和依赖。另外在~/.gradle/gradle.properties里可以加一行org.gradle.jvmargs-Xmx2048m -Dfile.encodingUTF-8内存不足导致的偶发构建失败会少很多。这个配置对所有 gradle 项目都生效不用每个项目都写。5.3 最后分享一个我常用的调试顺序如果你现在正盯着报错不知从哪下手按这个顺序来先看gradle-wrapper.properties确认 distributionUrl 是不是被改过再进~/.gradle/wrapper/dists看看有没有残留的半截文件然后检查 IDE 里的 Gradle JDK 是不是跟 Gradle 6.5 兼容最后才是动依赖缓存和升级版本。很多时候不能下载 Gradle 和 Gradle 不能用 其实是两码事前者花两分钟换镜像源的功夫别想成要重装整个构建环境。Gradle 6.5 虽然老但它还在大量项目里稳定跑着学会这套排查思路比盲目追新版实用得多。本文还有配套的精品资源点击获取