如何清除gradle缓存?


317

我正在尝试使用Android Studio,并且首次启动时,它的编译时间约为45分钟...如果我不退出应用程序,就可以了-以后每次编译/运行该应用程序都需要大约45秒。

我尝试检查一些缓存:.gradle/caches主目录中有一个文件夹,其中包含123 MB。

.gradle我的项目文件夹中还有一个文件夹...其中一个taskArtifacts就像200 MB。我害怕只是随机地将它们都核弹。文件夹的哪些部分可以安全删除?

对于为什么我的Android Studio gradle assemble在首次加载应用程序时会花费很多时间来运行任务,还有更好的解释吗?

我还需要清除intellij缓存吗?


3
后来我发现编译45分钟是因为我将设置更改为Compiler -> GradleUse in-process build。与缓存无关
David T.

没有答案有帮助。原来有些图像已损坏。在Windows资源管理器中打开图像会快速显示出哪些图像已损坏(哪些图像未加载预览)。替换了这些图像,瞧!
比姆德(Bimde)'17

@ david-t您能否指出此选项的下落?我有3.3.1版,但在“偏好设置-构建,执行,部署
-Leo

Answers:


261

正如@ Bradford20000在评论中指出的那样,可能gradle.properties在下有一个文件以及全局gradle脚本$HOME/.gradle。在这种情况下,删除此目录的内容时必须特别注意。

.gradle/caches目录包含Gradle构建缓存。因此,如果您对构建缓存有任何错误,可以将其删除。


43
要注意的一件事是,如果您的主目录的.gradle文件夹中有gradle.properties文件,则您将不希望删除整个文件夹。通常,仅删除.gradle / caches就足以使Gradle重新下载所有依赖项。
Bradford2000

1
随着Android Studio的每次更新,gradle构建似乎变得越来越慢。为什么当我部署到设备时,停止运行应用程序,然后再次部署(完全不接触任何代码!),Android Studio再次需要2分钟来进行构建和部署。是friggin nutz。
某处某人

1
在Android Studio上清理系统缓存:在Android stdio主菜单上,选择File | 使缓存无效/Restart.and构建菜单>清理项目
Shomu,

367

Gradle缓存位于

  • 在Windows上: %USER_HOME%\.gradle/caches/
  • 在Mac / Unix上: ~/.gradle/caches/

您可以浏览到这些目录并手动将其删除或运行

rm -rf $HOME/.gradle/caches/

在Unix系统上。运行此命令还将强制下载依赖项。

更新2: 清除当前项目的Android构建缓存

注意:Android Studio的文件| 无效缓存/重启不会清除Android构建缓存,因此您必须单独清理它。

在Windows上:

gradlew cleanBuildCache

在Mac或Linux上:

./gradlew cleanBuildCache

20
这并没有清除Maven依赖项的缓存。我从Maven存储库中删除了该库,并使Android Studio缓存无效,但该项目仍在构建。这意味着未清除针对Maven依赖项的gradle缓存。
mattm 2015年

2
您所描述的方式只会清除主项目及其项目依赖项中的缓存,而库依赖项是完整的。您描述了如何清除AndroidStudio的缓存,而不是gradle的缓存。
Leandroid

是的,但是在加载项目之前,这在Mac上不会出现。
milosmns 2015年

它仍然可以在最新版本的Android Studio上正常运行
Raju yourPepe '18

2
如果您想要干净的缓存,请运行以下两个任务:gradlew clean cleanBuildCache
equiman

62

编辑: cleanBuildCache不再有效

android gradle插件现在利用gradle缓存功能

参考:https : //guides.gradle.org/using-build-cache/

清除缓存

清理缓存目录,以避免先前版本的任何命中

 rm -rf $GRADLE_HOME/caches/build-cache-*

参考:https : //guides.gradle.org/using-build-cache/#caching_android_projects

其他分部

参见此处(包括编辑内容)。

================

过时的信息:

使用 Gradle任务的最新解决方案

cleanBuildCache

可通过适用于Gradle版本2.3.0的android插件获得(2017年2月)

依存关系:

  1. Gradle 3.3或更高版本。
  2. Build Tools 25.0.0或更高版本。

更多内容:

https://developer.android.com/studio/build/build-cache.html#clear_the_build_cache

背景

构建缓存:

存储在构建项目时Android插件生成的某些输出(例如未打包的AAR和预先删除的远程依赖项)。使用缓存时,您的干净构建速度要快得多,因为构建系统可以在后续构建过程中简单地重用那些缓存的文件,而不用重新创建它们。使用Android插件2.3.0及更高版本的项目默认情况下使用构建缓存。要了解更多信息,请阅读“使用构建缓存提高构建速度”。

注意:如果禁用构建缓存,cleanBuildCache任务将不可用。

用法:

视窗

gradlew cleanBuildCache

Linux / Mac

gradle cleanBuildCache

Android Studio / IntelliJ

gradle tab (default on right) select and run the task or add it via the configuration window 

** gradle / gradlew是包含脚本的系统特定文件-请参阅系统信息,了解如何执行脚本

  1. linux- https://www.cyberciti.biz/faq/howto-run-a-script-in-linux/
  2. Windows- https: //technet.microsoft.com/zh-CN/library/bb613481( v=vs.85).aspx
  3. mac https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/index.html

43

小心gradle守护程序,您必须先停止它,然后再清除并重新运行gradle。

停止第一个守护程序:

./gradlew --stop

使用以下命令清除缓存:

rm -rf ~/.gradle/caches/

再次运行编译


您能解释一下原因或链接到一些文档吗?
tir38 '19

1
如果您的gradle守护程序正在运行,则将使用gradle缓存。因此,您的操作系统可能会阻止删除。
0x539

6

gradle守护程序还会为每个构建日志创建许多大型文本文件。它们存储在这里:

~/.gradle/daemon/X.X/daemon-XXXX.out.log

“ XX”是使用的gradle版本,例如“ 4.4”,“ XXXX”只是随机数,例如“ 1234”。

在短短几个月内,总大小可以增长到数百MB。无法禁用日志记录,并且文件不会自动删除,并且实际上不需要保留它们。

但是您可以创建一个小的gradle任务来自动删除它们,并释放大量磁盘空间:

将此添加到您的app/build.gradle

android {

    buildTypes {
        ...
    }

    // Delete large build log files from ~/.gradle/daemon/X.X/daemon-XXX.out.log
    // Source: https://discuss.gradle.org/t/gradle-daemon-produces-a-lot-of-logs/9905
    def gradle = project.getGradle()
    new File("${gradle.getGradleUserHomeDir().getAbsolutePath()}/daemon/${gradle.getGradleVersion()}").listFiles().each {
        if (it.getName().endsWith('.out.log')) {
            // println("Deleting gradle log file: $it") // Optional debug output
            it.delete()
        }
    }
}

要查看要删除的文件,可以在Android Studio->视图->工具窗口->构建中查看调试输出。然后在该窗口上按“切换视图”按钮以显示文本输出。

请注意,Gradle Sync或任何Gradle Build都会触发文件删除。

更好的方法是将文件自动移动到“垃圾箱/回收站”,或者至少首先将它们复制到“垃圾箱”文件夹。但是我不知道该怎么做。


要发送OSX项目发现者/垃圾桶,而不是直接删除,这个职位似乎有很多好的想法apple.stackexchange.com/questions/50844/...
AnneTheAgile

4

这里似乎发布了错误的信息。有人报告如何清除Android构建器缓存(带有任务cleanBuildCache),但似乎没有意识到该缓存独立于Gradle的构建缓存AFAIK。

我的理解是,Android的缓存早于Gradle的缓存(并且受启发),但是我可能错了。我不知道是否会更新Android构建器以使用Gradle的缓存并退出它自己的缓存。

编辑: Android构建器缓存已过时,已被淘汰。Android Gradle插件现在改为使用Gradle的构建缓存。要控制此缓存,您现在必须与Gradle的通用缓存基础结构进行交互。

提示:在线搜索Gradle的缓存帮助,而无需提及关键字“ android”以获取当前相关缓存的帮助。

编辑2:由于下面的评论中tir38的问题,我正在测试使用Android Gradle插件v3.4.2项目。gradle缓存由org.gradle.caching=truein 启用gradle.properties。我做了几次,clean build第二次大多数任务显示FROM-CACHE为它们的状态,表明缓存正在工作。

令人惊讶的是,我有一个cleanBuildCachegradle任务和一个<user-home>/.android/build-cache/3.4.2/目录,都暗示了Android构建器缓存的存在。

我执行cleanBuildCache3.4.2/目录不见了。接下来,我再做一个clean build

  • 没有任何变化:大多数任务显示FROM-CACHE为它们的状态,并且构建以启用缓存的速度完成。
  • 3.4.2/目录是重新创建。
  • 3.4.2/目录为空(保存2隐藏的,零长度的标记文件)。

结论:

  1. 所有正常的Android构建器任务的缓存都由Gradle处理。
  2. 执行cleanBuildCache不会以任何方式清除或影响构建缓存。
  3. 那里仍然有一个Android构建器缓存。这可能是Android构建团队忘记删除的遗迹代码,或者实际上可能缓存了某种奇怪的东西,无论出于何种原因,该奇怪东西都没有或无法移植到使用Gradle缓存中。(恕我直言,“ cannot”选项非常可取。)

接下来,我通过org.gradle.caching=true从中删除来禁用Gradle缓存,gradle.properties然后尝试以下几种方法clean build

  • 构建缓慢。
  • 所有任务都将其状态显示为已执行且未缓存或为最新状态。
  • 3.4.2/目录继续为空。

更多结论:

  1. 当Gradle缓存无法命中时,没有Android构建器缓存回退。
  2. 正如我之前所说,确实已经消除了Android构建器缓存(至少用于常见任务)。
  3. 相关的android文档包含过时的信息。特别是默认情况下,缓存未默认启用,而Gradle缓存必须手动启用。

编辑3:用户tir38确认Android构建器缓存已过时,并已通过此查找消除。tir38也造成了这个问题。谢谢!


您是否可以链接到阅读到的内容,即Android构建器缓存现在已过时,而现在使用了Gradle的构建缓存?
tir38

@ tir38,不。但是我用自己的测试更新了上面的答案。谢谢。
朗肯

感谢您的辛勤研究。您也确认了我在测试中看到的大部分内容:1.空3.4.2/目录。2. cleanBuildCache任务的存在3.禁用gradle构建缓存并进行重建没有显示任何迹象表明android任务达到了缓存。
tir38

2
再戳一点,我得到了关于android的构建缓存已/已卷入gradle的issuetracker.google.com/issues/37324009#comment3的实际确认信息,我打开了一个文档请求以删除该文档页面:issuetracker.google.com/issues/148169019
tir38

2

命令: rm -rf ~/.gradle/caches/


1
@JonAdams,请原谅,但问题明确指出“如何清除gradle缓存?”
Serj Ardovic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.