如何清除gradle缓存?

Dav*_* T. 255 ide android caching intellij-idea gradle

我正在尝试使用Android Studio,第一次启动时,编译需要45分钟......如果我不退出应用程序,那就没关系 - 每次后续编译/运行应用程序都需要像45秒.

我试图检查一些我的缓存:.gradle/caches我的主目录中有一个文件夹,它就像123 MB大.

.gradle我的项目文件夹中还有一个文件夹...其中一个taskArtifacts就像是200 MB.我害怕只是随意地将它们两者核对.删除文件夹的哪些部分是安全的?

有没有更好的解释为什么我的Android Studio gradle assemble在第一次加载应用程序时将永远运行任务?

我是否还必须清除intellij缓存?

Bao*_* Le 311

Gradle缓存位于

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

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

rm -rf $HOME/.gradle/caches/
Run Code Online (Sandbox Code Playgroud)

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

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

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

在Windows上:

gradlew cleanBuildCache
Run Code Online (Sandbox Code Playgroud)

在Mac或Linux上:

./gradlew cleanBuildCache
Run Code Online (Sandbox Code Playgroud)

  • 这并没有清除maven依赖的缓存.我从maven存储库中删除了库并使Android Studio缓存失效,但该项目仍然构建.这意味着不清除maven依赖项的gradle缓存. (18认同)
  • 您描述的方式只会清除主项目中的缓存及其项目依赖项,但库依赖项完好无损.您描述了如何清理AndroidStudio的缓存,而不是gradle的缓存. (2认同)
  • 您可能不想转储整个缓存目录,只想转储构建缓存。改用`rm -rf ~/.gradle/caches/build-cache-1`。如果您需要让 gradle 重新下载依赖项,请使用 --refresh-dependencies 调用构建 (2认同)
  • 如果你想要干净和干净的缓存,运行两个任务:`gradlew clean cleanBuildCache` (2认同)

Opa*_*pal 235

您可以安全地删除.gradle项目目录下的整个文件夹.每次运行任务时都会重新创建它.同样适用.gradle于主目录下.它也将被重新创建,但必须再次下载整个依赖项 - 这非常耗时.

正如我在各个地方看到的那样,通过网络进行Android开发的速度很慢,人们抱怨它.不知道究竟是什么原因 - 这就是它的工作原理.

我不认为低性能是因为大文件夹.实际上他们帮助它更快.

正如@ Bradford20000在评论中指出的那样,可能存在一个gradle.properties文件以及位于其下的全局gradle脚本$HOME/.gradle.在这种情况下,删除此目录的内容时必须特别注意.缓存目录包含Gradle构建缓存.因此,如果您有任何错误,可以删除它.它在.gradle/caches

  • 需要注意的一点是,如果主目录中的.gradle文件夹中有gradle.properties文件,则不需要删除整个文件夹.通常,只需删除.gradle/caches即可让Gradle重新下载所有依赖项. (38认同)
  • 随着 Android Studio 的每次更新,gradle 构建似乎变得越来越慢。为什么当我部署到设备时,停止运行应用程序,然后再次部署(根本不接触任何代码!)Android Studio 再次需要 2 分钟来构建和部署它。这是他妈的疯子。 (3认同)
  • 在 Android Studio 上清理系统缓存:Android stdio 主菜单,选择 File | Invalidate Caches/Restart.and build menu >clean project (2认同)
  • 如果您使用的是 Windows,则需要先终止守护进程:/sf/ask/3793274131/ (2认同)

cep*_*3us 56

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

cleanBuildCache

可通过Android插件获取Gradle,修订版2.3.0(2017年2月)

依赖关系:

  1. Gradle 3.3或更高.
  2. 构建工具25.0.0或更高版本.

更多:

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

背景

构建缓存:

存储Android插件在构建项目时生成的某些输出(例如未打包的AAR和预定义的远程依赖项).使用缓存时,干净的构建要快得多,因为构建系统可以在后续构建期间简单地重用这些缓存的文件,而不是重新创建它们.使用Android插件2.3.0及更高版本的项目默认使用构建缓存.要了解更多信息,请阅读使用Build Cache提高构建速度.

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

用法:

视窗

gradlew cleanBuildCache
Run Code Online (Sandbox Code Playgroud)

linux/mac

gradle cleanBuildCache
Run Code Online (Sandbox Code Playgroud)

Android Studio/IntelliJ

gradle tab (default on right) select and run the task or add it via the configuration window 
Run Code Online (Sandbox Code Playgroud)

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

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


小智 24

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

停止第一个守护程序:

./gradlew --stop
Run Code Online (Sandbox Code Playgroud)

使用以下命令清除缓存:

rm -rf ~/.gradle/caches/
Run Code Online (Sandbox Code Playgroud)

再次运行编译

  • 如果你的 gradle 守护进程正在运行,你的 gradle 缓存将会被使用。因此,您的操作系统可能会阻止删除。 (4认同)

Ant*_*ord 17

我的~/.gradle/caches/文件夹用的是14G。

使用以下方案后,从14G变成了1.7G。

$ rm -rf ~/.gradle/caches/transforms-*

$ rm -rf ~/.gradle/caches/build-cache-*
Run Code Online (Sandbox Code Playgroud)

奖金:

该命令详细显示已使用的缓存空间

$ sudo du -ah --max-depth 1 ~/.gradle/caches/ | sort -hr
Run Code Online (Sandbox Code Playgroud)


Mr-*_*IDE 9

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()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要查看哪些文件正在被删除,您可以在 Android Studio -> View -> Tool Windows -> Build 中查看调试输出。然后按该窗口上的“切换视图”按钮以显示文本输出。

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

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


Lan*_*hon 9

这里发布的信息似乎不正确。有些人报告了如何清除 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 缓存进行移植。(恕我直言,“不能”选项是高度可改进的。)

接下来,我通过删除org.gradle.caching=true来禁用 Gradle 缓存,gradle.properties然后尝试以下操作clean build

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

更多结论:

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

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

  • 再稍微戳一下,我得到了实际的确认,即 android 的构建缓存已卷入 gradle 的 https://issuetracker.google.com/issues/37324009#comment3 我打开了一个文档请求来删除该文档页面:https://issuetracker .google.com/issues/148169019 (2认同)