Як очистити кеш-пам'ять gradle?


317

Я намагаюся використовувати 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, але не можу її знайти в розділі Налаштування - Створення, виконання, розгортання
Лев

Відповіді:


261

Як @ Bradford20000 вказував у коментарях, може бути як gradle.propertiesфайл, так і глобальні сценарії gradle, розташовані під $HOME/.gradle. У такому випадку слід звернути особливу увагу при видаленні вмісту цього каталогу.

.gradle/cachesКаталог містить Gradleкеш збірки. Тож якщо у вас є помилка щодо кешу збірки, ви можете її видалити.


43
Слід зазначити, що якщо у папці .gradle у вашому домашньому каталозі є файл gradle.properties, ви не хочете видаляти всю папку. Як правило, достатньо лише видалити .gradle / кеші, щоб Gradle перезавантажив усі залежності.
Bradford2000

1
З кожним оновленням до Android Studio збірки gradle здаються повільнішими та повільнішими. Чому саме тоді, коли я розгортаю на пристрої, зупиняю запуск програми та знову розгортаю (не торкаючись жодного коду!), Що студії Android знову потрібні дві хвилини, щоб зробити збірку та розгорнути її. Це фріггін нутс.
Хтось десь

1
На Android Studio для очищення системних кешів: у головному меню Android stdio виберіть Файл | Недійсні кеші / 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 не очищений.
mattm

2
Описаний вами спосіб очистить кеш-пам'ять лише від основного проекту та його залежностей від проекту, але залежність бібліотеки недоторканою. Ви описали, як очистити кеш AndroidStudio, але не кеш gradle.
Леандроїд

Так, але це не з'являється на Mac, перш ніж завантажувати проект.
milosmns

він все ще добре працює на останній версії Android Studio
Raju yourPepe

2
якщо ви хочете чистий і чистий кеш, виконайте обидва завдання:gradlew clean cleanBuildCache
еквіман

62

EDIT: 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. Оцінка 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 і новіші, використовують кеш збірки за замовчуванням. Щоб дізнатися більше, прочитайте «Покращення швидкості збирання за допомогою кешу збірки».

Примітка. Завдання 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/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 працює кеш градулів, вони будуть використані. Отже, ваша ОС, швидше за все, запобіжить видаленню.
0x539

6

Демон gradle також створює безліч великих текстових файлів кожного журналу збірки. Вони зберігаються тут:

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

"XX" - це версія grade, що використовується, як "4.4", а "XXXX" - це лише випадкові числа, наприклад "1234".

Загальний розмір може вирости до декількох сотень МБ всього за кілька місяців . Немає можливості відключити ведення журналу, і файли не видаляються автоматично, і їх дійсно не потрібно зберігати.

Але ви можете створити невелике завдання 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 -> Перегляд -> Інструмент Windows -> Збірка. Потім натисніть кнопку "Переключити перегляд" у цьому вікні, щоб показати текст.

Зауважте, що синхронізація Gradle або будь-яка збірка Gradle спровокує видалення файлів.

Кращим способом буде автоматичне переміщення файлів у кошик для сміття / кошик або принаймні спочатку скопіюйте їх у папку Кошик. Але я не знаю, як це зробити.


Щоб надсилати елементи OSX до пошуку / сміття, а не безпосередньо видаляти, схоже, у цій публікації є багато хороших ідей apple.stackexchange.com/questions/50844/…
AnneTheAgile

4

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

моє розуміння полягає в тому, що кеш Android передує (і надихнув) Gradle, але я можу помилитися. чи буде / розробник Android буде оновлений, щоб використовувати кеш Gradle та вилучати свій власний, я не знаю.

РЕДАКТУЙТЕ: кеш-пам'ять будівельника Android застарів і його було усунено. тепер плагін Android Gradle замість цього використовується кеш-пам'ять збірки Gradle. для управління цим кешем тепер потрібно взаємодіяти з загальною інфраструктурою кешу Gradle.

ПОРАДА: шукайте довідку щодо кешу Gradle в Інтернеті, не згадуючи ключове слово "android", щоб отримати довідку про поточний відповідний кеш.

EDIT 2: через запитання tir38 у коментарі нижче, я тестую за допомогою плагіна Android Gradle v3.4.2. кеш gradle увімкнено org.gradle.caching=trueв gradle.properties. Я роблю пару 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 приховані, файли нульової довжини маркера).

висновки:

  1. кешування всіх звичайних завдань для розробника Android здійснює Gradle.
  2. Виконання cleanBuildCacheне очищає і не впливає на кеш збірки.
  3. там ще зберігається кеш-пам’ятник Android. це може бути вестигіальний код, який команда побудови Android забула видалити, або він насправді може кешувати щось дивне, що з будь-якої причини не може або не може бути перенесено для використання кешу Gradle. (Варіант "не можна" є дуже незмінним, IMHO.)

Наступний, я відключити Gradle кеш, видаливши org.gradle.caching=trueз gradle.propertiesі я спробувати пару clean build:

  • нарощування відбувається повільно.
  • всі завдання показують їх стан як виконаний, а не кешований або оновлений.
  • 3.4.2/каталог продовжує бути порожнім.

більше висновків:

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

EDIT 3: користувач tir38 підтвердив , що кеш Android будівельника застарів і був усунутий з цією знахідкою . tir38 також створив це питання . Дякую!


Чи можете ви посилання на те, де ви читали, що кеш-пам'ять будівельника Android застарілий і тепер замість нього використовується кеш-збірка Gradle?
tir38

@ tir38, nope. але я оновив свою відповідь вище власним тестуванням. Дякую.
Ланчон

Дякуємо купу за ваше старанне дослідження. Ви підтверджуєте більшість того, що я бачив і на тестуванні: 1. порожній 3.4.2/реж. 2. наявність cleanBuildCacheзавдання 3. відключення кеш-пам'яті збірки gradle та відновлення не показали жодних доказів того, що андроїдські завдання вражають кеш.
tir38

2
Ще трішки потік, і я отримав фактичне підтвердження того, що кеш-пам’ять андроїда є / був перенесений у gradle's issueetracker.google.com/isissue/37324009#comment3, я відкрив запит на документ, щоб видалити цю сторінку документа: issueetracker.google.com/isissue/148169019
tir38

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.