Программирование • 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 — и попрактиковаться на реальных задачах.

Возможности 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.

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

В Gradle зависимости описываются в файлах build.gradle. Можно указать, какие нужны в проекте, с помощью ключевого слова dependencies. Например, если проект использует библиотеку Google Play Services, можно добавить следующую строку в файл build.gradle:

dependencies {
implementation '
com.google.android.gms:play-services-location:17.0.0'
}

Здесь implementation указывает, что зависимость должна быть включена в окончательный Android Package Kit — архив, куда упаковывается всё необходимое для запуска приложения. А com.google.android.gms:play-services-location:17.0.0 — это координаты зависимости, которые включают группу пакетов (com.google.android.gms), название пакета (play-services-location) и конкретную версию (17.0.0).

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

Вот несколько примеров зависимостей, которые часто используются в Android-разработке с Gradle:

  • com.android.support:appcompat-v7 — библиотека поддержки для создания совместимых с различными версиями Android приложений;
  • com.google.android.gms:play-services-location — библиотека Google Play Services для доступа к функциям геолокации;
  • com.jakewharton.timber:timber — библиотека Timber для упрощения логирования;
  • com.github.bumptech.glide:glide — библиотека Glide для эффективной загрузки изображений;
  • org.jetbrains.kotlin:kotlin-stdlib — библиотека Kotlin Standard Library для использования в проекте языка Kotlin.

Как установить Gradle и работать с ним

Если разработчик скачал Android Studio, вместе с ней он скачал и Gradle. В таком случае отдельно ничего устанавливать не нужно.

Но если среда разработки другая и Gradle в ней нет, можно установить его самостоятельно.

  1. Скачать последнюю версию Gradle с официального сайта.
  2. Разархивировать скачанный файл на компьютере.
  3. Добавить путь к директории Gradle в переменную PATH операционной системы.
  4. Проверить, что Gradle установлен правильно. Это можно сделать с помощью команды gradle gradle - - version в командной строке.

Вот как может выглядеть файл build.gradle в Android-проекте

Разберём, как работать с Gradle, на примере создания приложения для заказа еды.

1. Создание нового проекта. В Android Studio нужно выбрать тип проекта «Empty Activity» и указать имя.

2. Добавление зависимостей. В файле build.gradle проекта — добавить зависимости, которые понадобятся для работы приложения. Например, библиотеки для работы с сетью, базы данных, карты.

dependencies {

implementation 'com.android.support:appcompat-v7:28.0.0'

implementation 'com.google.firebase:firebase-core:17.2.1'

implementation 'com.squareup.retrofit2:retrofit:2.6.2'

// Другие зависимости...
}

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

4. Разработка клиентского приложения. Нужно написать код для клиентской части приложения, который будет взаимодействовать с сервером через API.

5. Тестирование и отладка. Запустить тесты можно в Gradle — с помощью задач test, debug или connectedCheck.

6. Публикация. После завершения разработки и тестирования можно с помощью Gradle собрать финальный Android Package Kit и опубликовать его в Google Play Store.

Лайфхаки

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

● Используйте параметр org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8, чтобы контролировать нагрузку на память компьютера.

Этот параметр можно найти в файле gradle.properties. Он указывает на то, что Gradle может использовать, например, 2048 Мб оперативной памяти устройства. Можно поэкспериментировать с параметром: если компьютер мощный, поменять это число на большее, и Gradle, будет собирать проект быстрее.

● Изучите инструмент buildTypes.

Он позволяет делать разные виды сборки с разными параметрами — например, отдельную для тестирования и отдельную для релиза.

● Используйте doFirst и doLast.

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

Пример Gradle-проекта

Любое приложение, которое создано с использованием Android Studio, может быть примером Gradle-проекта. Пример Java-приложения для бегунов, которое собрано в Gradle:

// build.gradle
plugins {
id 'java'
}

repositories {
mavenCentral()
}

dependencies {
implementation 'com.google.guava:guava:30.1.1-jre'
implementation 'org.slf4j:slf4j-api:1.7.30'
runtimeOnly 'ch.qos.logback:logback-classic:1.2.3'
}

task run(type: JavaExec) {
main = 'com.example.RunnerApp'
classpath sourceSets.main.runtimeClasspath
}

Приложение использует библиотеки Guava и SLF4J для логирования, а также Logback для логирования в консоль. Код приложения может выглядеть примерно так:

package com.example;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RunnerApp {
private static final Logger logger =
LoggerFactory.getLogger(RunnerApp.class);

public static void main(String[] args) {
logger.info("Starting runner app");
// Здесь может быть код для отслеживания тренировок
}
}

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

Совет эксперта

Михаил Вассер
Начинающему Android-разработчику стоит сфокусироваться на написании основного кода приложения, а не на инфраструктурной части. Кроме того, важно в первую очередь выучить языки Groovy и Kotlin, которые используются для Gradle. Это поможет в будущем разобраться, почему он настроен неправильно и что за ошибки выдаёт. А как только будет понимание, что такое Gradle, можно попробовать написать свои задачи — например, загрузку готовой сборки в Telegram.
Статью подготовили:
Михаил Вассер
Яндекс Практикум
Наставник и автор, Head of Mobile в AGIMA
Надежда Низамова
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Tue Nov 12 2024 12:54:56 GMT+0300 (Moscow Standard Time)