Connect with us

Разработка

Чистим Android-проект просто и правильно

По умолчанию команда Android Studio «Build → Clean Project» удаляет не все. Могут накапливаться кэши, артефакты из модулей, остатки файлов Gradle и результаты сборки.

Опубликовано

/

     
     

Зачем нужна расширенная очистка

При разработке Android-приложений дисковое пространство может быстро загрязняться результатами сборки, кэшами Gradle и конфигурационными файлами IDE.

По умолчанию команда Android Studio «Build → Clean Project» удаляет не все. Могут накапливаться кэши, артефакты из модулей, остатки файлов Gradle и результаты сборки.

В этой статье представлен один скрипт, который комплексно решает все эти проблемы, с фантастическим выводом консоли, показывающим использование пространства до и после. Мы рассмотрим macOS/Linux (с помощью Bash) и Windows (с помощью Batch), а также проясним, как Lite-чистка скрипта сравнивается с Build → Clean Project с точки зрения освобождаемого дискового пространства и объема проекта.

Как и все, что «удаляет» содержимое, используйте скрипт с осторожностью.

Почему бы просто не использовать Build → Clean Project?

  1. Ограниченная область применения: Как правило, он нацелен только на папки сборки того модуля(ей), который(ые) в данный момент открыт(ы) в IDE.
  2. Пропускает Gradle: При этом .gradle остается нетронутым; вы не сможете освободить это место или исправить поврежденные кэши.
  3. Нет групповой очистки: Если у вас несколько проектов в одной папке (например, ~/AndroidStudioProjects), вам придется открывать и очищать каждый проект вручную.

Легкая и глубокая очистка

Мы определяем два уровня очистки в нашем скрипте:

Lite Cleanup

  • Удаляет только файлы сборки (например, build, app/build), так что следующая сборка будет вынуждена перекомпилироваться.
  • Не удаляет .gradle (чтобы вам не пришлось заново загружать зависимости).
  • Освобождение дискового пространства: обычно аналогично Build → Clean Project, особенно для одномодульного проекта.

Deep Cleanup

  • Также удаляет папку .gradle, освобождая значительное место на диске, если кэш Gradle стал большим.
  • Освобожденное место: значительно больше, чем при стандартной очистке или очистке в IDE, поскольку размер .gradle может составлять гигабайты.

Как Lite Cleanup сравнивается с Build → Clean Project?

Освобождение дискового пространства:

  • В одномодульном проекте Lite очистка и Build → Clean Project обычно освобождают примерно одинаковое пространство (оба удаляют выходы сборки).
  • В многомодульном проекте или в массовом сценарии наша Lite очистка может удалить результаты сборки из всех модулей/папок, в то время как Build → Clean Project очищает только модули, открытые в данный момент в IDE, поэтому с помощью нашего сценария можно освободить немного больше места на диске.

Гибкость и автоматизация:

  • Наш Lite cleanup можно запустить из командной строки (или CI/CD), не открывая IDE.
  • Вы можете выполнить массовую очистку для нескольких проектов за один раз.

Никаких кэшей Gradle:

  • Как Build → Clean Project, так и Lite cleanup не удаляют .gradle. Для восстановления большого дискового пространства или поврежденных кэшей вам потребуется глубокая очистка.

Итог

Если вы привыкли к Build → Clean Project на однопроектной, одномодульной установке, то Lite cleanup примерно то же самое с точки зрения экономии дискового пространства.

Однако наш сценарий более удобен (особенно для многомодульной/массовой очистки) и легко расширяется до более глубокой очистки, когда это необходимо.

1. Универсальный сценарий для macOS/Linux

Ниже представлен единый Bash сценарий , поддерживающий следующие параметры:

Single vs. Bulk

  • bulk → очищает все подпапки, как будто каждая из них является отдельным проектом
  • single (по умолчанию) → очищает папку текущего проекта (должна находиться в корневой папке android-проекта).

Lite vs. Deep

  • lite → запускает gradlew/ clean (как «Build → Clean Project», но проще автоматизировать)
  • deep (по умолчанию) → это гораздо более агрессивный вариант, он удаляет папку .gradlew вместо запуска скрипта очистки gradle. Он также показывает обнаруженные модули (сканируя на наличие build.gradle или build.gradle.kts), включает поддержку buildSrc и выводит самые большие каталоги после очистки для диагностики.

Почему Deep по умолчанию?

  • Освобождает больше места: Удаление .gradle может освободить больше дискового пространства.
  • Избегает избыточных загрузок: Пропуская ./gradlew clean, мы не будем вызывать Gradle для загрузки дистрибутива или библиотек только для того, чтобы сразу же их удалить.
  • Все еще необязательно: Если вам нужна более легкая очистка «только для сборки», перейдите на lite.

1. Версия для macOS/Linux (Bash)

Сохраните следующий скрипт под именем android-cleanup.sh, сделайте его исполняемым (chmod +x android-cleanup.sh) и поместите его в любое удобное для вас место (например, ~/Scripts).

Использование в macOS/Linux

  • Default (без аргументов) → Глубокая очистка (удаляет .gradle, без тасков Gradle).
  • lite → Стандартная/легкая очистка (удаляет только папки сборки, вызывает gradlew clean).
  • bulk → Обработка всех вложенных папок в текущем каталоге.
  • bulk lite → Массовая, но легкая очистка.
  • bulk deep → Избыточно (поскольку deep используется по умолчанию), но для ясности используется.

2. Версия для Windows (PowerShell)

Сохраните файл android-cleanup.ps1 и запустите его с помощью PowerShell (или Windows Terminal). Если заблокировано политикой, можно обойти ее с помощью:

Политика выполнения PowerShell

По умолчанию PowerShell может запретить выполнение скриптов, если они не подписаны:

Вариант 1:

Временно обойдите с помощью

Вариант 2:

Сделайте Set-ExecutionPolicy RemoteSigned (или Unrestricted), чтобы разрешить запуск локальных скриптов.

Убедитесь, что вы доверяете сценарию, прежде чем изменять эти политики.

Использование в Windows

  • Без аргументов → Глубокая очистка текущей папки, без изменения директории.
  • lite → Стандартная очистка в текущей папке, вызывает Gradle clean.
  • bulk → Проверьте каждую вложенную папку как отдельный проект Android, выполняет глубокую очистку.
  • bulk lite → Групповая очистка, но с «легким» подходом.

Отдельное спасибо Джахангиру Джади за помощь на этапе создания и тестирования PowerShell-версии скрипта.

Пример использования скрипта

Lite для одного проекта (Mac)

Когда вы указываете lite для отдельного проекта, он эффективно вызывает ./gradlew clean за вас, не открывая проект в Android Studio. Вы увидите вывод о том, какие модули были обнаружены и сколько места было освобождено.

Как видите, проект уменьшился с 219 до 5.8 МБ.

Deep для одного проекта (Mac)

Если мы ничего не указываем, по умолчанию используется режим глубокой очистки. Это значительно быстрее, поскольку не выполняется скрипт Gradle, и папка .gradle удаляется, освобождая еще больше места.

Мы перешли с 218 до 2 МБ — огромная экономия.

Массовая Lite очистка (Mac)

Массовая Deep очистка (Mac)

Массовая Deep очистка (Windows PowerShell)

Итого

При использовании глубокой очистки по умолчанию этот скрипт освобождает максимум места без лишних загрузок Gradle. Если вам нужна только build-only очистка (как обычная «Gradle clean»), используйте lite. Опционально добавьте bulk для очистки нескольких подпапок (полезно, если вы храните много проектов Android в одной директории).

Финальные мысли

  • Обнаружение модулей: мы выявляем модули, сканируя build.gradle / build.gradle.kts.
  • Обработка Wildcard путей: */build гарантирует, что подмодули не будут пропущены.
  • Поддержка BuildSrc: мы явно удаляем buildSrc/.gradle и buildSrc/build для расширенных сборок Gradle.
  • Диагностика: мы печатаем самые большие необработанные каталоги, чтобы помочь вам найти большие папки.

Наслаждайтесь удобством одного скрипта, который значительно превосходит встроенную в Android Studio функцию Clean Project, удаляя кэш, поддерживая сценарии с несколькими модулями или несколькими проектами и автоматизируя все в массовом режиме. Счастливой уборки!

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: