Как очистить кэш gradle?


320

Я пытаюсь использовать Android Studio, и при первой загрузке на компиляцию уходит около 45 МИНУТ ... Если я не закрываю приложение, ничего страшного - каждая последующая компиляция / запуск приложения займет около 45 секунд.

Я попытался проверить некоторые из своих кешей: .gradle/cachesв моем домашнем каталоге есть папка, которая содержит 123 МБ.

В .gradleпапке моего проекта также есть папка ... одна из них taskArtifactsбыла размером 200 МБ. Я боюсь просто случайно убить их обоих. Какие части папок безопасно удалить?

Есть ли лучшее объяснение того, почему моя Android Studio всегда запускает gradle assembleзадачу при первой загрузке приложения?

Должен ли я также очистить кэш intellij?


3
Позже я узнал, что 45 минут для компиляции, потому что я изменил настройки на Compiler -> Gradleнет Use in-process build. не имеет ничего общего с кэшем
Дэвид Т.

Ни один из ответов не помог. Оказывается, некоторые изображения были повреждены. Открытие изображений в проводнике Windows быстро показывает, какие изображения повреждены (те, для которых он не загружает предварительный просмотр). Заменены эти изображения и вуаля!
Бимде

@ david-t Не могли бы вы указать местонахождение этой опции? У меня есть версия 3.3.1, но я не могу найти ее в Предпочтения - Сборка, Выполнение, Развертывание
Лев

Ответы:


262

Как отметил @ Bradford20000 в комментариях, там может быть gradle.propertiesфайл, а также глобальные скрипты Gradle $HOME/.gradle. В этом случае особое внимание должно быть уделено удалению содержимого этого каталога.

.gradle/cachesКаталог содержит Gradleкэш сборки. Так что, если у вас есть ошибка в кеше сборки, вы можете удалить ее.


43
Стоит отметить, что если у вас есть файл gradle.properties в папке .gradle в вашем домашнем каталоге, вы не захотите удалять всю папку. Как правило, простого удаления .gradle / caches достаточно, чтобы Gradle перезагружал все зависимости.
Bradford2000,

1
с каждым обновлением до Android Studio сборка gradle становится все медленнее и медленнее. Почему при развертывании на устройстве прекращают работу приложения, а затем снова развертывают (не касаясь кода вообще!), Что Android Studio снова требуется 2 минуты для сборки и развертывания. Это чертовски круто.
Кто-то где-то

1
В Android Studio для очистки системных кешей: в главном меню Android stdio выберите Файл | Invalidate Caches / Restart.and меню сборки> чистый проект
Shomu

367

Gradle кеш находится в

  • В Windows: %USER_HOME%\.gradle/caches/
  • На Mac / Unix: ~/.gradle/caches/

Вы можете перейти к этим каталогам и вручную удалить их или запустить

rm -rf $HOME/.gradle/caches/

в системе Unix. Выполнение этой команды также приведет к загрузке зависимостей.

Обновление 2: очистить кэш сборки Android текущего проекта

Примечание: файл Android Studio | Invalidate Caches / Restart не очищает кэш сборки Android, поэтому вам придется очищать его отдельно.

В Windows:

gradlew cleanBuildCache

На Mac или Linux:

./gradlew cleanBuildCache

20
Это не очистило кеш зависимостей maven. Я удалил библиотеку из репозитория maven и сделал недействительными кэши Android Studio, но проект все еще строится. Это означает, что кэш-память для зависимости maven не очищается.
Матем

2
Способ, который вы описали, будет очищать кэш только от основного проекта и его зависимостей от проекта, но зависимости библиотеки не затрагиваются. Вы описали, как очистить кэш AndroidStudio, но не кэш Gradle.
Leandroid

Да, но это не появляется на Mac, прежде чем я загружаю проект.
milosmns

это все еще хорошо работает на последней версии Android Studio
Раджу Пепе

2
если вы хотите очистить и очистить кеш, запустите обе задачи:gradlew clean cleanBuildCache
equiman

62

РЕДАКТИРОВАТЬ: cleanBuildCache больше не работает

плагин Android Gradle теперь использует функцию кэширования Gradle

REF: https://guides.gradle.org/using-build-cache/

Очистить кеш

Очистите каталог кеша, чтобы избежать попаданий из предыдущих сборок

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

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

ДРУГИЕ ВХОДЫ

смотрите здесь (включая правки).

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

ОБЗОРНАЯ ИНФОРМАЦИЯ:

Новейшее решение с использованием задачи Gradle

cleanBuildCache

доступно через плагин Android для Gradle, редакция 2.3.0 (февраль 2017 г.)

зависимости:

  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

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. окна - 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

43

Будьте осторожны с демоном gradle, вы должны остановить его до очистки и перезапустить gradle.

Остановите первый демон:

./gradlew --stop

Очистить кеш, используя:

rm -rf ~/.gradle/caches/

Запустите снова ваш сборник


Можете ли вы объяснить, почему или ссылку на документацию по этому вопросу?
tir38

1
Если ваш демон Gradle запущен, ваши кэши Gradle будут использоваться. Следовательно, ваша ОС скорее всего предотвратит удаление.
0x539

6

Демон gradle также создает множество больших текстовых файлов для каждого журнала сборки. Они хранятся здесь:

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

«XX» - это используемая версия gradle, например «4.4», а «XXXX» - просто случайные числа, например «1234».

Общий размер может вырасти до нескольких сотен МБ всего за несколько месяцев . Нет возможности отключить ведение журнала, и файлы не удаляются автоматически, и их не нужно сохранять.

Но вы можете создать небольшую задачу для автоматического удаления и освободить много дискового пространства:

Добавьте это к вашему 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 -> Вид -> Инструмент Windows -> Построить. Затем нажмите кнопку «Переключить вид» в этом окне, чтобы показать вывод текста.

Обратите внимание, что Gradle Sync или любая Gradle Build вызовут удаление файла.

Лучшим способом было бы автоматически переместить файлы в корзину или, по крайней мере, сначала скопировать их в папку «Корзина». Но я не знаю, как это сделать.


Похоже, что в этом посте есть много хороших идей для отправки элементов OSX в поиск / мусор вместо прямого удаления apple.stackexchange.com/questions/50844/…
AnneTheAgile

4

Кажется, здесь размещена неверная информация. некоторые люди сообщают о том, как очистить кэш сборщика Android (с заданием cleanBuildCache), но, похоже, не понимают, что указанный кэш не зависит от кеша сборки Gradle, AFAIK.

Насколько я понимаю, кэш Android предшествует (и вдохновлен) кешей Gradle, но я могу ошибаться. Будет ли Android-строитель обновлен, чтобы использовать кеш Gradle и удалить свой собственный, я не знаю.

РЕДАКТИРОВАТЬ: кэш Android Builder устарел и был удален. плагин Android Gradle теперь использует кеш сборки Gradle. для управления этим кешем вы должны теперь взаимодействовать с общей инфраструктурой кеша Gradle.

СОВЕТ: ищите онлайн-справку по кешу Gradle, не упоминая ключевое слово «android», чтобы получить справку для актуального кеша.

РЕДАКТИРОВАТЬ 2: из-за вопроса tir38 в комментарии ниже, я тестирую с помощью плагина Android Gradle v3.4.2 проекта. кэширование gradle включено org.gradle.caching=trueв gradle.properties. я делаю пару clean buildи во второй раз большинство задач показывают FROM-CACHEкак их статус, показывая, что кеш работает.

Удивительно, но у меня есть cleanBuildCacheпростая задача и <user-home>/.android/build-cache/3.4.2/каталог, намекающий на наличие кеша Android Builder.

я исполняю cleanBuildCache и 3.4.2/каталог исчез. затем я делаю другое clean build:

  • ничего не изменилось: большинство задач отображается в FROM-CACHEвиде своего состояния, а сборка завершена на скорости кэш-памяти.
  • 3.4.2/каталог заново.
  • 3.4.2/каталог пуст (за исключением 2 скрытые, файлы нулевой длины маркера).

выводы:

  1. кэширование всех обычных задач Android Builder выполняется Gradle.
  2. выполнение cleanBuildCacheне очищает и никак не влияет на кэш сборки.
  3. там все еще есть кэш Android Builder. это может быть рудиментарный код, который команда разработчиков Android забыла удалить, или он может фактически кэшировать что-то странное, что по какой-либо причине не может или не может быть перенесено на использование кэша Gradle. (вариант «не может» быть очень улучшаемым, ИМХО.)

Затем я отключаю кеш Gradle, удаляя org.gradle.caching=trueиз него, gradle.propertiesи я пробую пару clean build:

  • сборки медленные.
  • все задачи показывают свой статус как выполненный и не кэшированный или не обновленный.
  • 3.4.2/каталог продолжает быть пустым.

больше выводов:

  1. в случае сбоя кэша Gradle отсутствует резервная копия кэша Android-компоновщика.
  2. кеш Android Builder, по крайней мере для общих задач, действительно был устранен, как я уже говорил ранее.
  3. соответствующий документ Android содержит устаревшую информацию. в частности, кеш не включен по умолчанию, как указано там, и кеш Gradle должен быть включен вручную.

РЕДАКТИРОВАТЬ 3: пользователь tir38 подтвердил, что кэш Android Builder устарел и был удален с этой находкой . tir38 также создал эту проблему . Спасибо!


Можете ли вы указать, где вы читали, что кэш Android Builder теперь устарел и что вместо него теперь используется кэш сборки Gradle?
tir38

@ tir38, нет. но я обновил свой ответ выше с моим собственным тестированием. Спасибо.
Ланшон

Большое спасибо за ваши усердные исследования. Вы подтверждаете большую часть того, что я видел в тестировании тоже: 1. пустой 3.4.2/каталог. 2. Наличие cleanBuildCacheзадачи. 3. Отключение кэша сборки Gradle и перестройка не показали никаких признаков того, что задачи Android ударяют о кеш.
tir38

2
Немного больше тыкаю, и я получил фактическое подтверждение того, что кэш сборки Android был / свернут в Grade Issueracker.google.com/issues/37324009#comment3 Я открыл запрос на документ, чтобы удалить эту страницу документа: issetracker.google.com/issues/148169019
tir38

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.