关于android:如何清除gradle缓存?

How to clear gradle cache?

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

我尝试检查一些缓存:主目录中有一个.gradle/caches文件夹,它的大小约为123 MB。

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

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

我是否还需要清除intellij缓存?


Gradle缓存位于

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

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

1
rm -rf $HOME/.gradle/caches/

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

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

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

在Windows上:

1
gradlew cleanBuildCache

在Mac或Linux上:

1
./gradlew cleanBuildCache


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

正如我在网上各处看到的,对于Android开发来说,gradle相当缓慢,人们对此表示抱怨。不知道到底是什么原因-这就是它的工作原理。

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

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


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

cleanBuildCache

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

依存关系:

  • Gradle 3.3或更高版本。
  • 构建工具25.0.0或更高版本。
  • 更多内容:

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

    背景

    构建缓存:

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

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

    用法:

    视窗

    1
    gradlew cleanBuildCache

    Linux / Mac

    1
    gradle cleanBuildCache

    Android Studio / IntelliJ

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

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

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

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

    停止第一个守护程序:

    1
    ./gradlew --stop

    使用以下命令清除缓存:

    1
    rm -rf ~/.gradle/caches/

    再次运行编译


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

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

    " X.X"是使用的gradle版本,例如" 4.4"," XXXX"只是随机数,例如" 1234"。

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

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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都会触发文件删除。

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


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


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

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