gradle Непонимание того, как работает Gradle, может затруднить процесс разработки и превратить отладку проблем, связанных с Gradle, в кошмар для разработчика. В этой статье попытаемся дать общий обзор того, как этот инструмент сборки работает в целом и в частности в экосистеме Android. Общие сведения Gradle — это инструмент сборки, который базируется на концепциях более старых инструментов, таких как Apache Maven и Ant. Его использование DSL (предметно-ориентированного языка) устраняет необходимость в громоздких и длинных XML-файлах и позволяет разработчику только объявлять, что должно происходить во время сборки, используя особый и чистый синтаксис. Логику сборки следует определять только в плагинах, чтобы ограничить файл конфигурации сборки лишь объявлениями данных, хотя Gradle пока не считает это ошибкой. Структура Gradle Gradle работает в основном посредством задач и плагинов — комбинаций задач и их конфигураций. Входными данными задачи могут быть файлы или каталоги, а также любые другие данные Java-типа, но результатом служат только каталоги или файлы, записываемые на диск. Кроме того, если определяется задача, которая принимает результат другой задачи в качестве входных данных, мы создаем зависимость, и первая задача должна запускаться до начала выполнения другой. Жизненный цикл Gradle Сборка в Gradle выполняется в 3 этапа: Инициализация. Конфигурация. Выполнение. Пример конфигурации на DSL Следующий пример показывает, как можно задать конфигурацию для Android-части приложения: android { namespace = "com.example.app" compileSdk = 34 // … defaultConfig { applicationId = "com.example.app" minSdk = 34 // … } } Этот код, по сути, преобразуется в классы с такими же элементами данных и соответствующими функциями. Внешние зависимости Одной из важных функций Gradle является управление зависимостями. Все, что нужно сделать, — это объявить зависимость в формате group:artifact:version (название-компании:название-библиотеки:версия), и Gradle выполнит поиск в настроенных репозиториях, например, в Maven-репозитории. Если зависимость найдется в объявленных репозиториях, она загрузится и добавится в сборку. Варианты сборки и Build Flavors Gradle позволяет объявлять варианты сборки, такие как release и debug, для различных конфигураций приложения. Например, тип сборки debug не обфусцирует Android-приложение, что приводит к более быстрой сборке. Технология Build Flavors также позволяет создавать различия на уровне приложения для каждого набора исходного кода, например, для различных версий приложения, таких как платная и бесплатная. Файлы, связанные со сборкой в Android Studio В Android Studio есть множество файлов, связанных с системой сборки Gradle. Некоторые из них никогда не следует изменять: ./gradle: файлы кэша для дистрибутива Gradle (управляются оберткой Gradle), файлы проекта и конфигурационные файлы. .idea: метаданные IDE. build.gradle.kts (в корне): объявления classpath-плагинов для всех подпроектов. gradle.properties: содержит свойства Gradle, а также временные свойства Android. gradlew.bat: загружает указанную версию Gradle и перенаправляет команды в загруженный дистрибутив Gradle (если доступно). local.properties: содержит свойства, связанные с вашим локальным компьютером. settings.gradle.kts: содержит глобальную информацию о сборке для инициализации и конфигурации Gradle. gradle/libs.version.toml: объявленные зависимости во всех подпроектах. gradle/wrapper/gradle-wrapper.jar: загружает указанный дистрибутив Gradle и запускает его. gradle/wrapper/gradle-wrapper.properties: указывает версию и место загрузки дистрибутива Gradle. subprojects: любой каталог с файлом build.gradle, включенный в settings.gradle.kts. subproject/build.gradle.kts: объявления плагинов + блоки конфигурации для подключенных плагинов + зависимости. src/* : файлы, связанные с проектом. app/proguard-rules.pro: определяет правила для управления операциями R8. Основные компоненты сборки в Android: Исходный код: код, которым вы управляете. Зависимости библиотек: внешние библиотеки, используемые в проекте. Инструменты: компиляторы, плагины и SDK. Ниже представлен упрощенный процесс того, что происходит при нажатии кнопки Run в Android Studio, с фокусом на Kotlin Android Plugin: Запускается gradlew.bat. Запускается gradle-wrapper.jar и читается gradle-wrapper.properties для проверки необходимости загрузки дистрибутива Gradle; либо производится запуск для вызова демона Gradle. Демон Gradle находит расположение JVM в .idea/gradle.xml и использует его при необходимости (передается в gradlew через Android Studio). Применяется Kotlin Android Plugin, читаются соответствующие блоки конфигурации (как показано ниже) и регистрируются связанные с ним задачи. compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } Gradle выполняет задачи и компилирует файлы проекта. Затем Android Gradle Plugin (AGP) получает выходные данные плагина и преобразует их в DEX-файлы в рамках другой зарегистрированной задачи, которую выполняет Gradle. Заключение Данная статья лишь поверхностно затрагивает инструмент сборки Gradle и то, как он интегрирован в Android Studio для сборки Android-проектов. Хотя он гораздо более многофункционален, в большинстве случаев Android-разработчикам для управления проектами достаточно знакомства с концепциями высокого уровня, подобными рассмотренным здесь. Удачи в работе! Читайте также: Отладка зависимостей в Gradle 6 рекомендаций по запуску современной кодовой базы Android с нуля Как использовать управляемые Gradle устройства с собственными девайсами Читайте нас в Telegram, VK и Дзен Перевод статьи Salma Khodaei: Understanding Gradle in Android Projects ============== Gradle — это мощный инструмент сборки, используемый в Android-разработке для управления зависимостями, конфигурацией сборки и выполнением задач. Он предоставляет DSL для объявления конфигурации сборки, поддерживает различные варианты сборки (release, debug) и позволяет управлять внешними зависимостями. Структура Gradle включает в себя задачи и плагины, которые используются для выполнения различных операций сборки. Конфигурация сборки в Gradle осуществляется через DSL, который упрощает определение правил сборки. Gradle поддерживает управление зависимостями, позволяя разработчикам указывать необходимые библиотеки и автоматически управлять их загрузкой и использованием. Кроме того, Gradle предоставляет возможности для создания вариантов сборки и управления различными конфигурациями приложения.