Gradle三个文件夹的关联及离线命令行编译缓存迁移咨询
解决无网络环境下Gradle离线编译缓存问题
先搞懂三个Gradle文件夹的关联
我来给你拆解这三个文件夹的作用,搞清楚它们谁管啥,你就知道该复制啥了:
- Android Studio安装目录下的gradle文件夹
这个是AS自带的“工具包”:里面的gradle-4.1是Gradle的核心运行程序(也就是Gradle发行版),m2repository是AS预存的本地Maven仓库,放了一些常用的Android依赖插件。但命令行编译默认不会直接用这个,除非你手动配置,所以它不是重点。 - C:\Users\ACAndroid.gradle目录
这才是全局核心缓存目录!所有项目共用的,你用--debug看到程序搜这个文件夹就是因为它是Gradle默认的缓存根目录:caches/modules-2:存所有下载过的依赖包、Gradle插件(包括你报错的com.android.tools.build:gradle:3.0.1),是按Maven结构组织的缓存;caches/gradle-x.x:Gradle运行时的临时缓存、构建脚本缓存;wrapper/dists:存通过Gradle Wrapper下载的Gradle发行版。
- 项目根目录下的.gradle文件夹
这个是项目专属的本地缓存:里面的wrapper定义了项目要用的Gradle版本,4.1文件夹是这个项目独有的构建缓存(比如任务缓存、脚本编译缓存),其他项目不会共用,就算没有也能重新生成,只是第一次编译慢一点。
离线编译的缓存复制步骤
既然命令行优先用全局的C:\Users\ACAndroid\.gradle缓存,你只需要从能正常编译的机器上复制以下内容到无网络机器的对应路径:
- 必复制:依赖与插件缓存
把正常机器上C:\Users\[正常机器用户名]\.gradle\caches\modules-2整个文件夹,复制到无网络机器的C:\Users\ACAndroid\.gradle\caches\modules-2,直接覆盖或合并就行,这里面就包含了你缺的Gradle 3.0.1插件缓存。 - 可选但建议:Gradle发行版缓存
检查无网络机器的C:\Users\ACAndroid\.gradle\wrapper\dists\gradle-4.1是否存在,如果没有,从正常机器的同路径复制过来,或者从AS目录下的gradle-4.1复制到这个路径(注意要放在wrapper的dists子文件夹里,符合目录结构)。 - 可选:项目专属缓存
要是想让第一次离线编译更快,可以把正常机器上项目根目录的.gradle文件夹复制到无网络机器的项目根目录,这个不是必须的,只是省点时间。
最后验证一下,在无网络机器的项目根目录打开命令行,执行:
gradlew assembleRelease --offline
如果还有问题,再用--debug看缺哪个缓存,对应补上就行。
内容的提问来源于stack exchange,提问作者Dim
相关产品推荐
相关产品推荐

