Программирование • 29 июля 2024 • 5 мин чтения

Что такое Gradle и как он помогает Android-разработчику

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

Что такое gradle в Android-проекте

Gradle — это система автоматической сборки приложений в Android. Он похож на строителя, который складывает все необходимые файлы и библиотеки в один большой проект.

Михаил Вассер, Head of Mobile в AGIMA, наставник и автор в Яндекс Практикум
Java-разработчики по всему миру делали одно и то же: писали много дополнительных команд в консоли, чтобы скомпилировать код — перевести его на понятный машине язык. Компания Apache Software Foundation решила автоматизировать этот процесс и выпустила две системы автоматической сборки: Ant и Maven. Но оба этих инструмента не очень хорошо справлялись с большими многомодульными проектами. Так появился Gradle — универсальный инструмент для сборки приложений, который переводит Java-код в двоичный. Он работает по умным алгоритмам и сам выбирает пути в конкретном проекте: как и что собрать.

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

Михаил Вассер
Когда разработчик создаёт новый проект, появляется файловая иерархия. В неё уже включены два файла с расширением .gradle: проектный и основной. Специалист написал код и нажимает кнопку Play, чтобы результат появился на экране смартфона. В этот момент происходит сборка проекта — Gradle собирает все файлы и библиотеки, которые необходимы для создания исполняемого файла приложения.

Научиться работать с Gradle и другими инструментами для создания приложений можно на курсе «Android-разработчик». Студенты могут с нуля освоить программирование на языках Java и Kotlin — и попрактиковаться на реальных задачах.

Получите профессию Android-разработчика за 9 месяцев
Освоите программирование на Java и Kotlin, будете учиться на реальных задачах junior-разработчиков.

Возможности Gradle

У Gradle есть много особенностей, которые помогают Android-разработчикам создавать проекты быстрее.

gradle.settings. Это файл, который отвечает за настройки Gradle, в том числе за ограничения. Например, он отслеживает, сколько памяти можно потреблять на компьютере, чтобы внезапно не заполнить её всю.

Gradle Wrapper. Это инструмент, который позволяет собирать Android-проект на разных видах операционных систем.

Поддержка разных языков программирования. Gradle изначально был ориентирован на Java, но позже стал поддерживать другие языки программирования — например, Kotlin, Scala, Groovy и C/C++.

Использование направленного ациклического графа. Направленный ациклический граф — это структура данных в виде набора узлов и дуг, где каждая дуга указывает направление от одного узла к другому. В Gradle используется для определения порядка выполнения задач сборки. Это нужно, чтобы не происходило повторных запусков.

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

Мультипроектные сборки. Gradle удобен при создании крупных мобильных приложений. С его помощью можно разделить проект на несколько модулей, например app, library, и управлять ими.

Поддержка сборочных скриптов и задач. В Gradle можно создавать собственные задачи и скрипты для выполнения кастомных операций в процессе сборки. Например, написать скрипт на отправку сборки в свой Телеграм-канал.

Поддержка сборочных конфигураций. В Gradle можно создавать различные сборочные конфигурации (build variants) для разработки, тестирования и выпуска — например, конфигурации для бесплатной и платной версий приложения:

android {
buildTypes {
release {
minifyEnabled true
proguardFiles
getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro'
}
debug {
applicationIdSuffix ".debug"
versionNameSuffix "-DEBUG"
}
}

productFlavors {
free {
applicationId "com.example.myapp.free"
}
paid {
applicationId "com.example.myapp.paid"
}
}
}

Задачи

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

Задачи в Gradle описываются в конфигурационных файлах build.gradle. Каждая имеет имя и может принимать параметры, которые определяют её поведение. Например, задача compileJava компилирует Java-код, а задача assemble собирает все артефакты проекта в одну единицу.

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

В направленном ациклическом графе стрелки указывают, в какой очерёдности должны выполняться задачи

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

Михаил Вассер
Задачи, из которых состоит Gradle, уже написаны разработчиками, и можно добавлять новые. Но сейчас усилия больше направлены на оптимизацию этих задач, то есть, например, на сокращение времени сборок. Потому что большие Android-проекты или Java-проекты могут собираться по 30 минут, что, конечно, долго.
Вот ещё несколько задач, кроме compileJava и assemble, которые часто используются в Android-разработке:
  • clean — эта задача очищает все промежуточные файлы и результаты и создаёт чистую среду для следующей сборки;
  • build как и assemble, собирает все артефакты проекта в одну единицу, а также проверяет код;
  • test — запускает тесты проекта, во время которых проверяет его функциональность и покрытие кода;
  • publishToMavenLocal — публикует артефакты проекта в локальном репозитории Maven, благодаря чему их могут использовать другие разработчики в своих приложениях;
  • install — устанавливает артефакты проекта в локальный репозиторий Gradle, после чего ими также могут пользоваться другие разработчики;
  • check — выполняет все проверки, включая тесты и статический анализ кода, чтобы убедиться, что проект соответствует стандартам качества;
  • connectedCheck — запускает тесты на подключённых устройствах, чтобы проверить работу на реальном оборудовании.

Зависимости

Зависимости в Gradle — это библиотеки и другие ресурсы, которые нужны проекту для работы. Например, Apache Commons или Google Play Services.