我正在尝试使用 Android Studio,第一次启动它时,编译需要大约 45 分钟...如果我不退出应用程序,没关系 - 每次后续编译/运行应用程序都需要大约 45 秒。
我试图检查我的一些缓存:我的主目录中有一个 .gradle/caches
文件夹,它包含 123 MB。
我的项目文件夹中还有一个 .gradle
文件夹...其中一个 taskArtifacts
大约 200 MB。我害怕只是随意地对他们俩进行核弹。文件夹的哪些部分可以安全删除?
有没有更好的解释为什么我的 Android Studio 在第一次加载应用程序时会永远运行 gradle assemble
任务?
我也必须清除intellij缓存吗?
Compiler -> Gradle
的设置更改为不是 Use in-process build
。与缓存无关
./gradlew clean build --no-build-cache
将在不使用构建缓存的情况下强制构建项目。
Gradle 缓存位于
在 Windows 上:%USERPROFILE%\.gradle\caches
在 Mac / UNIX 上:~/.gradle/caches/
您可以浏览到这些目录并手动删除它或运行
rm -r $HOME/.gradle/caches/
在 UNIX 系统上。运行此命令还将强制下载依赖项。
更新
Clear the Android build cache of current project
注意:Android Studio 的 File > Invalidate Caches / Restart
不会清除 Android 构建缓存,因此您必须单独清理它。
在 Windows 上:
gradlew cleanBuildCache
在 Mac 或 UNIX 上:
./gradlew cleanBuildCache
更新 2
这篇文章 Put your Android Studio on a diet 提供了有关 Android Studio 缓存的更多详细信息
正如@Bradford20000 在评论中指出的那样,可能有一个 gradle.properties
文件以及位于 $HOME/.gradle
下的全局 gradle 脚本。在这种情况下,删除该目录的内容时必须特别注意。
.gradle/caches
目录包含 Gradle
构建缓存。因此,如果您对构建缓存有任何错误,可以将其删除。
--no-build-cache 选项将在没有构建缓存的情况下运行 gradle。
MS Windows 上的守护程序 如果您使用的是 Windows,则需要先杀死守护程序,然后它才能清除这些目录。有关详细信息,请参阅 Kill all Gradle Daemons Regardless Version?。
更新
cleanBuildCache
不再有效。
Android Gradle 插件现在利用 Gradle 缓存功能
https://guides.gradle.org/using-build-cache/
TO CLEAR CACHE 清理缓存目录以避免以前构建的任何命中 rm -rf $GRADLE_HOME/caches/build-cache-*
https://guides.gradle.org/using-build-cache/#caching_android_projects
其他题外话:参见here(包括修改)。
=== 过时的信息 ===
使用 Gradle 任务的最新解决方案:
cleanBuildCache
可通过 Gradle 的 Android 插件获得,修订版 2.3.0(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 任务不可用。
用法
视窗:
gradlew cleanBuildCache
Linux / Mac:
gradle cleanBuildCache
安卓工作室/IntelliJ:
gradle tab (default on right) select and run the task or add it via the configuration window
注意:gradle
/ gradlew
是包含脚本的系统特定文件。请参阅相关系统信息如何执行脚本:
Linux
视窗
苹果电脑
小心 gradle 守护进程,你必须在清除并重新运行 gradle 之前停止它。
停止第一个守护进程:
./gradlew --stop
清理缓存使用:
rm -rf ~/.gradle/caches/
再次运行你的编译
./gradlew --stop
这条线做了一切。
gradle 守护进程还会为每个构建日志创建许多大文本文件。它们存储在这里:
~/.gradle/daemon/XX/daemon-XXXX.out.log
“XX”是使用的gradle版本,如“4.4”,“XXXX”只是随机数,如“1234”。
总大小可以在短短几个月内增长到数百 MB。没有办法禁用日志记录,文件不会自动删除,也不需要保留。
但是您可以创建一个 small gradle task to automatically delete them,并释放大量磁盘空间:
将此添加到您的 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 -> View -> Tool Windows -> Build 中查看调试输出。然后按该窗口上的“切换视图”按钮以显示文本输出。
请注意,Gradle Sync 或任何 Gradle Build 都会触发文件删除。
更好的方法是自动将文件移动到垃圾箱/回收站,或者至少先将它们复制到垃圾箱文件夹。但我不知道该怎么做。
这里似乎发布了不正确的信息。有些人报告了如何清除 Android 构建器缓存(使用任务 cleanBuildCache
),但似乎没有意识到所述缓存独立于 Gradle 的构建缓存 AFAIK。
我的理解是 Android 的缓存早于 Gradle 的(并且受到启发),但我可能是错的。 Android builder 是否会/被更新为使用 Gradle 的缓存并退出它自己的缓存,我不知道。
编辑:Android builder 缓存已过时并已被淘汰。 Android Gradle 插件现在改用 Gradle 的构建缓存。要控制此缓存,您现在必须与 Gradle 的通用缓存基础架构进行交互。
提示:在线搜索 Gradle 的缓存帮助,不要提及关键字 'android' 以获得当前相关缓存的帮助。
编辑 2: 由于 tir38 在下面的评论中提出问题,我正在使用 Android Gradle 插件 v3.4.2 项目进行测试。 gradle 缓存由 gradle.properties
中的 org.gradle.caching=true
启用。我做了几个 clean build
,第二次大多数任务显示 FROM-CACHE
作为它们的状态,表明缓存正在工作。
令人惊讶的是,我有一个 cleanBuildCache
gradle 任务和一个 <user-home>/.android/build-cache/3.4.2/
目录,两者都暗示了 Android 构建器缓存的存在。
我执行 cleanBuildCache
并且 3.4.2/
目录消失了。接下来我再做一个clean build
:
没有任何改变:大多数任务将 FROM-CACHE 显示为它们的状态,并且构建以启用缓存的速度完成。
3.4.2/ 目录被重新创建。
3.4.2/ 目录为空(保存 2 个隐藏的零长度标记文件)。
结论:
Gradle 处理所有普通 Android 构建器任务的缓存。执行 cleanBuildCache 不会以任何方式清除或影响构建缓存。那里仍然有一个 Android 构建器缓存。这可能是 Android 构建团队忘记删除的残留代码,或者它实际上可能缓存一些奇怪的东西,无论出于何种原因,这些东西都没有或不能移植到使用 Gradle 缓存。 (恕我直言,“不能”选项是高度可改进的。)
接下来,我通过从 gradle.properties
中删除 org.gradle.caching=true
来禁用 Gradle 缓存,然后我尝试了几个 clean build
:
构建速度很慢。
所有任务都将其状态显示为正在执行而不是缓存或最新的。
3.4.2/ 目录仍然是空的。
更多结论:
当 Gradle 缓存未能命中时,没有 Android 构建器缓存回退。正如我之前所说,至少对于常见任务而言,Android builder 缓存确实已被淘汰。相关的 android 文档包含过时的信息。特别是默认情况下不启用缓存,如那里所述,必须手动启用 Gradle 缓存。
编辑 3:用户 tir38 确认 Android 构建器缓存已过时并且已使用 this find 消除。 tir38 还创建了 this issue。谢谢!
3.4.2/
目录。 2. 存在 cleanBuildCache
任务 3. 禁用 gradle 构建缓存和重建没有显示任何 android 任务命中缓存的证据。
我的 ~/.gradle/caches/
文件夹使用 14G。
使用以下解决方案后,它从 14G 变为 1.7G。
$ rm -rf ~/.gradle/caches/transforms-*
$ rm -rf ~/.gradle/caches/build-cache-*
奖金:
此命令详细显示已使用的缓存空间
$ sudo du -ah --max-depth 1 ~/.gradle/caches/ | sort -hr
清理特定项目/jar 的缓存:
查找与该项目相关的所有缓存文件
find ~/.gradle/caches -name yourproject
上面的命令会返回所有与你的项目相关的缓存文件
rm -rf <each file returned>
您需要将缓存文件的路径传递给上述命令。
gradle clean install
最后拉取最新的工件
更新:
删除缓存的一个衬垫:
for file in `find ~/.gradle/caches -name yourprojectartifactid`; do `rm -rf $file`; done
最新命令:
--no-build-cache
位于:https://docs.gradle.org/current/userguide/build_cache.html 非常适合以下命令:
./gradlew SomeApp:installDebug --no-build-cache
在 android studio 打开 View > Tool Windows > Terminal 并执行以下命令
在 Windows 上:
gradlew cleanBuildCache
在 Mac 或 Linux 上:
./gradlew cleanBuildCache
如果您想从项目中禁用缓存,请将其添加到 gradle 构建属性中
(警告:如果没有缓存,这可能会降低您的 PC 性能,而不是在每次运行应用程序期间消耗相同的时间)
android.enableBuildCache=false
要在 android studio 中清除 gradle 缓存:
打开终端并运行 gradlew clean
rm -rf ~/.gradle/caches/build-cache-1
。如果您需要 gradle 重新下载依赖项,请使用 --refresh-dependencies 调用构建gradlew clean cleanBuildCache