Gradle в Android Studio

Ускоряем Gradle Build в Android Studio: 9 способов увеличить скорость сборки

В этой статье мы рассмотрим систему сборки Android проектов Gradle. Также узнаем почему она такая медленная и рассмотрим 9 способов ускорить сборку Gradle проекта в Android Studio. 

Что такое Gradle?

Gradle — это система сборки проектов. Она является следующим шагом в эволюции инструментов сборки на основе виртуальной Java машины (JVM). Gradle вобрал в себя лучшие идеи существующих инструментов (Ant и Maven), а также добавил больше гибкости и свободы в конфигурации сборки.

Кроме преимуществ новый подход несет и новые проблемы: даже самый простой Gradle вызов происходит довольно медленно. На ноутбуке среднего класса запуск простой задачи с выводом списка доступных задач проекта занимает не меньше 10 секунд. Официальная IDE для разработки Android приложений — Android Studio и в ней используется Gradle.

Android проекты становятся все более сложными, набирает популярность модульный подход разработки, поэтому производительность в новых реалиях имеет решающее значение. Увеличение скорости сборки проекта всего на несколько секунд дает хороший прирост в производительности.

Как увеличить скорость сборки проекта

Ниже я собрал методы, которые использую при сборке Gradle проекта:

1. Убедитесь, что вы всегда используете последнюю версию Gradle.

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

2. Постарайтесь свести к минимуму использование модулей

Иногда приходится форкнуть какую-то библиотеку, чтобы кое-что подправить или изменить под свои нужды. Избегайте таких ситуаций, так как сборка модуля занимает в ~4 раза больше времени, чем  любая jar или aar зависимость. Это происходит потому, что модуль каждый раз должен быть перестроен с нуля.

3. Включите автономную работу Gradle

Поставить галочку возле пункта автономной работы можно по пути: Preferences => Build, Execution, Deployment => Build Tools => Gradle. Это не позволит Gradle получить доступ к сети во время сборки и заставит его работать с зависимостями проекта в своем кэше.

Обратите внимание, что эта функция корректно работает только тогда, когда все зависимости уже успешно загружены и сохранены в кэше. Если вам нужно изменить или добавить новую зависимость в файлике build.gradle, то придется отключить опцию автономной работы — иначе «сборка завалится».

4. Используйте Gradle Daemon

Откройте файл gradle.properties в корне вашего проекта и добавьте следующую строчку кода:

org.gradle.daemon=true

Это позволяет сэкономить время, нужное для старта Gradle, так как он становится фоновым процессом. Следует отметить, что после добавление этой опции Gradle будет потреблять еще больше оперативной памяти при сборке проекта.

5. Используйте распараллеливание процесса сборки

org.gradle.parallel=true

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

6. Оптимизируйте конфигурацию проекта перед сборкой

Добавьте опцию org.gradle.configureondemand=true и Gradle сможет проверять изменения на уровне проекта и повторно использовать конфигурацию.

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

7. Настройте параметры компиляции проекта

Замените стандартные настройки использования памяти на следующие:

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Это позволит Java-компилятору использовать до 2Гб (параметр -Xmx2048m) доступной оперативной памяти. Разумеется, делать это можно только в случае, если у вас есть объем доступной памяти больше, чем 2 Гб.

8. Избегайте динамических зависимостей

Пример: compile 'com.android.support:design:+'

Вот этот плюсик (+) в конце говорит нам о том, что используется динамическая зависимость.

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

9. Используйте только нужные зависимости

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

compile 'com.google.android.gms:play-services:10.0.1'

следует всегда писать так:

compile 'com.google.android.gms:play-services-maps:10.0.1'.

Надеюсь, эти способы оптимизации процесса сборки сэкономят вам парочку часов разработки 🙂

А какие способы ускорить Gradle используете вы в своих проектах?

Подписывайтесь на новые статьи по разработке под Android и программированию на Java!

One thought to “Ускоряем Gradle Build в Android Studio: 9 способов увеличить скорость сборки”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *