Инструменты пользователя

Инструменты сайта


service:gradle

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

service:gradle [08.04.2024 14:06] – [Конфигурация сборки и доп. логика сборки начинает смешиваться, усложняя поддержку] viacheslavservice:gradle [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1
Строка 2: Строка 2:
 https://www.youtube.com/results?search_query=gradle+kotlin https://www.youtube.com/results?search_query=gradle+kotlin
  
 +Gradle Tutorial - Crash Course: https://www.youtube.com/watch?v=gKPMKRnnbXU\\
 +Understanding Gradle (playlist): https://www.youtube.com/playlist?list=PLWQK2ZdV4Yl2k2OmC_gsjDpdIBTN0qqkE\\
 Gradle и система сборки Android: https://www.youtube.com/watch?v=5SYaITerrjU Gradle и система сборки Android: https://www.youtube.com/watch?v=5SYaITerrjU
  
Строка 487: Строка 489:
 } }
 </file> </file>
 +
 +===== Gradle wrapper =====
 +Рекомендуемый способ от разработчика Gradle для работы с ним. Структура файлов:
 +
 +{{:service:pasted:20240409-062254.png?600}}
 +
 +Здесь команда ''gradle build'' не сработает, нужно запускать скрипт ''./gradlew build'' или в винде ''gradlew.bat''.
 +
 +Основной параметр в файле ''gradle-wrapper.properties'' - это
 +<file java gradle-wrapper.properties>
 +// Указывает, откуда враппер может скачать ту или иную версию Гредла, с которой он будет работать
 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
 +</file>
 +Если Гредл уже скачан, то при вызове ''./gradlew build'' команда сборки сразу передаётся этой конкретной версии Гредла.
 +
 +Преимущества использования wrapper:
 +  * Легко использовать Гредл без предварительной установки
 +  * Стандартизация сборки. К примеру, при отправке на CI будет собираться именно с Гредлом, который указан в параметрах, а не с тем, который установлен на удалённой машине.
 +  * Быстрое переключение версии Гредла для проекта.
 +
 +===== Gradle daemon =====
 +Это фоновый JVM-процесс, помогающий сокращать время сборки и конфигурации проекта (до 75% при повторной сборке). Что он делает:
 +  - Кэширует информацию о проектах между сборками
 +  - Висит в фоне, поэтому при запуске сборки не тратится время на инициализацию JVM
 +  - Следит за изменениями файлов проекта
 +
 +Схема работы: ''./gradlew build'' запускает Gradle client, а тот, в свою очередь, Gradle daemon. Если демона ещё нет, то он создаётся. Демон выполняет сборку и передаёт результат и логи клиенту, всё это отображается в терминале и клиент завершает работу вместе с запросом на сборку. Демон же продолжает висеть в фоне в статусе Idle и ждёт следующего обращения к нему.
 +
 +<code bash>
 +# Статус запущенных демонов
 +./gradlew --status
 +# Запуск сборки с демоном из терминала
 +./gradlew build --daemon
 +# Запуск сборки без демона
 +./gradlew build --no-daemon
 +# Принудительно остановить все демоны (например, если не подхватываются переменные или ещё по каким-то причинам)
 +./gradlew --stop
 +</code>
 +
 +<file java gradle.properties>
 +// Настройка Гредла для запуска сборки с демоном (false - без демона)
 +org.gradle.daemon=true
 +</file>
 +
 +===== Жизненный цикл сборки / Tasks =====
 +  * Инициализация
 +    * Анализ ''settings.gradle.kts'', определение, какие проекты включены (include) в сборку
 +    * Создание экземпляра класса Project для каждого проекта/модуля
 +  * Конфигурация
 +    * Анализ сценария сборки из ''build.gradle.kts'' каждого проекта
 +    * Создание направленного ациклического графа задач (DAG) для каждого проекта. Задачи выполняются в порядке их зависимости друг от друга.
 +  * Выполнение
 +    * Планирование и выполнение всех задач в соответствии с построенным графом
 +
 +Gradle task - кусок логики, который выполняется при сборке проекта. Задачи могут выполнять разные действия: сборка apk-файла, заупск тестов, установка приложения на устройство, выгрузка apk в Маркет и т. д. Задача состоит из действий (actions), выполняющихся последовательно.
service/gradle.1712585184.txt.gz · Последнее изменение: 30.07.2024 19:20 (внешнее изменение)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki