Скидка до 60% и курс в подарок 2 дня 09 :56 :09 Выбрать курс
Код
#статьи

Gradle для Android и Java: как установить, настроить и собрать первый проект

Знакомимся с главным сборщиком проектов на Java.

Фото: sutiporn somnam / Getty Images

При первом запуске Android Studio или сборке Java-проекта новичков часто пугает Gradle — инструмент для быстрой сборки кода. В папке с проектом появляется много незнакомых файлов, библиотеки приходится подключать через специальные блоки кода, а сборку — запускать командами в терминале.

В этой статье мы разберём, как устроена Gradle и зачем она нужна, что такое задачи, плагины и зависимости, как запустить проект через Gradle Wrapper без ручной установки, и соберём простое приложение.

Содержание


Что такое Gradle и зачем она нужна

Gradle — это система автоматизации сборки проектов для Java и Kotlin. Код приложений обычно состоит из десятков, а иногда и сотен файлов. Gradle автоматически связывает их между собой, скачивает нужные библиотеки, запускает тесты и упаковывает всё это в единый файл. Это может быть исполняемый JAR-файл или Android-приложение.

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

Окно Android Studio с открытым файлом build.gradle.kts и панелью Gradle
Скриншот: Gradle / Skillbox Media

Gradle появилась в 2007 году. Её создатели хотели сохранить гибкость Ant, добавить удобное управление зависимостями из Maven и отказаться от громоздкой настройки через XML. В 2013 году Google выбрал Gradle как основу системы сборки Android. Поэтому сегодня она встречается почти в каждом Android-проекте и во многих проектах на Java и Kotlin.

Чем Gradle отличается от Maven и Ant

Gradle — не единственный инструмент сборки проектов в экосистеме Java. До неё уже существовали Apache Ant и Maven, и обе до сих пор встречаются в продакшене. Между собой инструменты различаются подходом к сборке.

Например, Ant даёт много свободы, но каждый шаг сборки надо подробно описывать. Maven опирается на строгие соглашения и спасает от хаоса в коде, но с трудом адаптируется под нестандартные сценарии. Gradle сочетает в себе строгие правила с возможностью настроить сборку под проект.

Чтобы было проще понять различия, представим их в таблице.

КритерийAntMavenGradle
Как настраиваютОписывают каждый шаг в XMLИспользуют XML и строгие соглашенияПишут скрипт на Kotlin или Groovy DSL
ЗависимостиНетЕстьЕсть, с гибкими конфигурациями
Повторная сборкаОбычно медленнаяСредняяБыстрая за счёт кэша и проверки изменений
Где встречаетсяСтарые проектыКорпоративная JavaAndroid и современные Java-/Kotlin-проекты

Как устроен Gradle-проект

Чтобы не запутаться в конфигах, достаточно усвоить четыре базовых понятия, на которых построена вся работа с Gradle:

  • Задача (task) — одно действие: скомпилировать код, запустить тесты или собрать приложение. Команда build запускает сразу цепочку связанных задач.
  • Плагин (plugin) — готовый набор задач и настроек. Плагин java добавляет сборку Java-кода, а Android Gradle Plugin — сборку Android-приложения.
  • Зависимость — внешняя библиотека, которая нужна проекту. Gradle скачивает её из репозитория и добавляет в нужный этап сборки.
  • Скрипт сборки — файл build.gradle.kts или build.gradle, где подключают плагины, репозитории и зависимости. Скрипты можно писать на одном из двух языков: Groovy DSL или Kotlin DSL.

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

Основные файлы и папки

В каждом проекте с Gradle есть несколько папок и файлов, в которых хранится всё необходимое для сборки. Без них система не будет знать, что ей надо делать с кодом.

Вот для чего нужны каждый файл и папка:

  • build.gradle.kts — главный скрипт сборки модуля или проекта, в котором хранится список подключённых плагинов, зависимостей и репозиториев.
  • settings.gradle.kts — файл начальной настройки проекта. В нём задают имя проекта, перечисляют все входящие в него модули и описывают настройки управления зависимостями.
  • gradle.properties — файл с общими настройками Gradle. Здесь обычно задают параметры виртуальной машины Java (JVM), включают или отключают различные возможности Gradle и определяют глобальные свойства проекта.
  • gradlew, gradlew.bat и папка gradle/wrapper — эти файлы позволяют собрать проект даже на компьютере, где Gradle не установлена. Wrapper автоматически скачает нужную версию Gradle, указанную в настройках проекта, и запустит сборку.
  • .gradle — служебная папка Gradle с кэшем зависимостей, логами и промежуточными файлами сборки.

В проекте обязательно должны быть файлы settings.gradle.kts и build.gradle.kts, а остальные добавляют по мере необходимости. Например, если нужно собирать код на компьютере без Gradle, то добавляют gradlew и gradlew.bat.

Скрипты на Groovy DSL и Kotlin DSL

Скрипты Gradle пишут на одном из двух DSL (от англ. domain-specific language — язык под конкретную задачу) — языков для настройки сборки: Groovy DSL или Kotlin DSL.

Первым появился Groovy DSL с расширением файлов .gradle. Его до сих пор используют в старых проектах, но современные приложения собирают уже с помощью скриптов на Kotlin DSL с расширением файлов .gradle.kts. Его главное преимущество — статическая типизация: среда разработки подсказывает доступные методы, ловит опечатки сразу при написании, а не во время сборки.

Вот как выглядит фрагмент скрипта с подключением библиотеки на Groovy DSL:

// Groovy DSL — build.gradle
dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.11.0'
}

А так на Kotlin DSL:

// Kotlin DSL — build.gradle.kts
dependencies {
    implementation("com.squareup.retrofit2:retrofit:2.11.0")
}

Если вы только начинаете разбираться с Gradle, то выбирайте для своих проектов Kotlin DSL — это стандарт в сообществе.

Как Gradle собирает проект

Запуск Gradle проходит в три фазы по порядку. Понимание этого механизма пригодится, когда сборка начнёт тормозить и захочется разобраться почему.

Инициализация. Gradle читает файл settings.gradle и определяет, какие модули входят в сборку. На этом этапе она понимает, с чем конкретно предстоит работать.

Конфигурация. Gradle читает все скрипты сборки build.gradle и строит граф задач — что от чего зависит. Например, тесты не запустятся, пока не скомпилируется код. Gradle сама выстраивает этот порядок.

Выполнение. Gradle запускает те задачи, которые вы попросили в командной строке.

Ещё Gradle умеет пропускать лишнюю работу. Если исходники и результат задачи не менялись с прошлого раза, задача помечается как UP-TO-DATE и пропускается. Это называется инкрементальной сборкой, и именно она делает повторные запуски быстрыми.

Граф задач Java-проекта. Стрелки показывают зависимости между задачами: выполнение следующего блока начинается только после завершения работы над текущим
Изображение: Skillbox Media

Как запустить Gradle

Один из самых удобных способов запустить Gradle — Gradle Wrapper. Это специальный набор файлов, который автоматически скачивает нужную версию инструмента и запускает сборку проекта. Кроме того, Gradle Wrapper уже есть в Android Studio и IntelliJ IDEA.

Для запуска актуальной версии Gradle 9.x нужен JDK 17 или новее. Если на вашем компьютере ещё нет JDK, то можно установить его по нашему руководству.

После установки откройте проект в IDE и выполните в терминале следующую команду:

# macOS и Linux
./gradlew --version

# Windows
gradlew.bat --version

При первом запуске Wrapper скачает дистрибутив Gradle и сохранит его в пользовательской папке .gradle/wrapper/dists. Этот процесс может занять много времени, но следующие запуски будут быстрее.

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

Создаём и собираем проект

Рассмотрим весь путь сборки проекта на небольшом примере. Создадим необходимые папки, добавим зависимости и соберём код.

Шаг 1. Создаём файл в IDE

Для начала запустим IntelliJ IDEA или любую другую IDE для работы с Java. В окне создания проекта выбираем New Project, указываем язык Java, систему сборки Gradle с Kotlin DSL и JDK 17 или новее. В пункте Gradle distribution выбираем Wrapper и нажимаем на кнопку Create.

Скриншот: IntelliJ IDEA / Skillbox Media

На экране появится новый проект со всем необходимым окружением. В дереве файлов уже есть все нужные папки.

Скриншот: IntelliJ IDEA / Skillbox Media

Шаг 2. Добавляем зависимости

Зависимости подключают в блоке dependencies файла build.gradle.kts. В нашем файле уже есть зависимости от моделей фреймворка для юнит-тестирования JUnit.

В блоке repositories перечисляют репозитории, из которых Gradle скачивает нужные библиотеки. По умолчанию система добавляет Maven Central — один из самых больших и популярных публичных репозиториев с Java-библиотеками.

Скриншот: IntelliJ IDEA / Skillbox Media

При добавлении библиотеки нужно указать не только её название, но и конфигурацию — она определяет, когда библиотека будет использоваться.

Основные конфигурации:

  • implementation — зависимость нужна и при компиляции, и во время работы приложения. Самая распространённая конфигурация.
  • api — работает так же, как implementation, но делает библиотеку доступной другим модулям. Эту конфигурацию используют для работы с публичными API.
  • compileOnly — библиотека нужна только во время компиляции.
  • runtimeOnly — зависимость не нужна при компиляции, но должна присутствовать при запуске приложения.
  • testImplementation — библиотека нужна только для тестов (например, JUnit или Mockito).

Для примера добавим в блок repositories репозиторий google(), а в dependencies — библиотеку Gson, которая конвертирует Java-объекты в формат JSON:

// build.gradle.kts
repositories {
    mavenCentral()
    google()
}

dependencies {
    implementation("com.google.code.gson:gson:2.11.0")
}

Шаг 3. Запускаем сборку

Для сборки проекта через Wrapper достаточно выполнить в терминале IDE следующую команду:

# macOS и Linux
./gradlew build

# Windows
gradlew.bat build

Gradle скачает зависимости, скомпилирует код и запустит тесты. Успешная сборка заканчивается сообщением BUILD SUCCESSFUL в терминале. Результат Java-проекта обычно появляется в папке build/libs.

Скриншот: IntelliJ IDEA / Skillbox Media

Помимо ./gradlew в Gradle есть и другие полезные команды:

  • ./gradlew tasks — список всех доступных задач проекта;
  • ./gradlew clean — удалить результаты прошлых сборок;
  • ./gradlew test — только прогнать тесты.

Ещё больше команд и сценариев их использования можно посмотреть в официальной документации.

Особенности Gradle в Android

Android Studio использует Gradle вместе с Android Gradle Plugin (AGP). Этот плагин добавляет задачи для ресурсов, тестов, подписи и упаковки приложения в APK или AAB. Общая схема сборки описана в документации Android Developers.

В Android есть два варианта сборки: build type обычно отделяет отладочную сборку debug от релизной release, а product flavor — позволяет делать, например, бесплатную и платную версии приложения из одной кодовой базы.

Для отладочной сборки Android обычно используют команду ./gradlew assembleDebug, а для Android App Bundle — ./gradlew bundleRelease. Но в начале удобнее пользоваться кнопками Run и Build в Android Studio: IDE вызовет те же задачи и покажет результат в окне Build.

Полезные материалы

Когда базовые возможности освоены, можно переходить к более сложным темам: многомодульным проектам, собственным задачам и плагинам, каталогам версий и тонкой настройке производительности.

Разобраться во всём этом помогут следующие ресурсы:

  • Официальная документация Gradle — исчерпывающее руководство с регулярными обновлениями и правками.
  • Раздел Build на Android Developers — большой сборник статей и гайдов по работе с Gradle в экосистеме Android.
  • Документация по Gradle от команды JetBrains — лучшие практики для работы с Kotlin DSL.
  • Build Java Software With Gradle Like a Pro — семичасовой видеокурс по Gradle на английском языке.
  • Gradle in Action, Benjamin Muschko — книга от одного из разработчиков Gradle, в которой он подробно рассказывает про внутреннее устройство системы сборки.

Коротко о главном

  • Gradle — система сборки для проектов на Java, Kotlin и для Android-приложений. Она компилирует код, управляет зависимостями и собирает файлы в единый артефакт.
  • Работа с Gradle построена на четырёх понятиях: это задачи, плагины, зависимости и скрипты сборки.
  • Скрипты пишут на Groovy DSL (.gradle) или Kotlin DSL (.gradle.kts). В современных проектах по умолчанию используют Kotlin DSL.
  • Каждая сборка проходит три фазы: инициализацию, конфигурацию и выполнение.
  • Gradle можно не устанавливать вручную — просто используйте Gradle Wrapper.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Освойте Java на практике
Научитесь создавать приложения для банков, маркетплейсов, государственных корпораций и крупных компаний.
Узнать как
Курс по Java-разработке
4 сильных проекта в портфолио для бизнеса из разных сфер. Стажировка для лучших студентов уже во время обучения.
Узнать о курсе

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Курс с трудоустройством: «Профессия Java-разработчик + ИИ» Узнать о курсе
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована