service:gradle
Различия
Показаны различия между двумя версиями страницы.
service:gradle [08.04.2024 12:41] – [Проблемы больших проектов] viacheslav | service:gradle [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 2: | Строка 2: | ||
https:// | https:// | ||
+ | Gradle Tutorial - Crash Course: https:// | ||
+ | Understanding Gradle (playlist): https:// | ||
Gradle и система сборки Android: https:// | Gradle и система сборки Android: https:// | ||
Строка 379: | Строка 381: | ||
==== Конфигурация сборки и доп. логика сборки начинает смешиваться, | ==== Конфигурация сборки и доп. логика сборки начинает смешиваться, | ||
+ | m( С 49-й минуты - идиотское программистское красноглазие - мегаудобство, | ||
+ | |||
Например, | Например, | ||
<file java app/ | <file java app/ | ||
Строка 392: | Строка 396: | ||
</ | </ | ||
+ | Для решения этой проблемы изобрели Convention plugins. | ||
+ | |||
+ | Создаётся каталог с любым именем (ну, т. е., ещё один плагин/ | ||
+ | Затем, в корневом '' | ||
+ | <code java> | ||
+ | pluginManagement { | ||
+ | includeBuild(" | ||
+ | } | ||
+ | </ | ||
+ | В '' | ||
+ | <file java build-logic/ | ||
+ | dependencyResolutionManagement { | ||
+ | versionCatalogs { | ||
+ | create(" | ||
+ | from(files(" | ||
+ | } | ||
+ | } | ||
+ | repositories { | ||
+ | google() | ||
+ | mavenCentral() | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | Там же '' | ||
+ | <file java build-logic/ | ||
+ | plugins { | ||
+ | // без этого не взлетит | ||
+ | " | ||
+ | } | ||
+ | |||
+ | dependencies { | ||
+ | implementation(libs.agp) | ||
+ | implementation(libs.cotlin.gradle.plugin) | ||
+ | // Костыль для работы version plugins внутри Convention plugins, иначе не работает (система ниппель!) | ||
+ | implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) | ||
+ | } | ||
+ | </ | ||
+ | После этого можно создавать сами файлы Convention-плагинов. Вид дерева каталогов: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Названия файлов важны, т. к. к ним потом нужно будет обращаться. | ||
+ | |||
+ | <file java android-feature-convention.gradle.kts> | ||
+ | plugins { | ||
+ | id(" | ||
+ | id(" | ||
+ | } | ||
+ | |||
+ | android { | ||
+ | compileSdk = 33 | ||
+ | | ||
+ | defaultConfig { | ||
+ | minSdk = 24 | ||
+ | } | ||
+ | } | ||
+ | dependencies { | ||
+ | implementation(libs.bundles.feature.deps) | ||
+ | } | ||
+ | </ | ||
+ | В файле выше не будет работать конструкция '' | ||
+ | Поэтому надо найти плагин, | ||
+ | |||
+ | В файл '' | ||
+ | <file java publish-google-convention.gradle.kts> | ||
+ | import java.io.File | ||
+ | import java.net.URL | ||
+ | |||
+ | tasks.register(" | ||
+ | doLast { | ||
+ | in uploadApkToGoogle(file(File(rootDir, | ||
+ | } | ||
+ | } | ||
+ | tasks.findByName(" | ||
+ | </ | ||
+ | |||
+ | Теперь '' | ||
+ | |||
+ | <file java feature1/ | ||
+ | plugins { | ||
+ | id(" | ||
+ | } | ||
+ | |||
+ | android { | ||
+ | namespace = " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <file java app/ | ||
+ | plugins { | ||
+ | id(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Gradle wrapper ===== | ||
+ | Рекомендуемый способ от разработчика Gradle для работы с ним. Структура файлов: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Здесь команда '' | ||
+ | |||
+ | Основной параметр в файле '' | ||
+ | <file java gradle-wrapper.properties> | ||
+ | // Указывает, | ||
+ | distributionUrl=https\:// | ||
+ | </ | ||
+ | Если Гредл уже скачан, | ||
+ | |||
+ | Преимущества использования wrapper: | ||
+ | * Легко использовать Гредл без предварительной установки | ||
+ | * Стандартизация сборки. К примеру, | ||
+ | * Быстрое переключение версии Гредла для проекта. | ||
+ | |||
+ | ===== Gradle daemon ===== | ||
+ | Это фоновый JVM-процесс, | ||
+ | - Кэширует информацию о проектах между сборками | ||
+ | - Висит в фоне, поэтому при запуске сборки не тратится время на инициализацию JVM | ||
+ | - Следит за изменениями файлов проекта | ||
+ | |||
+ | Схема работы: | ||
+ | |||
+ | <code bash> | ||
+ | # Статус запущенных демонов | ||
+ | ./gradlew --status | ||
+ | # Запуск сборки с демоном из терминала | ||
+ | ./gradlew build --daemon | ||
+ | # Запуск сборки без демона | ||
+ | ./gradlew build --no-daemon | ||
+ | # Принудительно остановить все демоны (например, | ||
+ | ./gradlew --stop | ||
+ | </ | ||
+ | |||
+ | <file java gradle.properties> | ||
+ | // Настройка Гредла для запуска сборки с демоном (false - без демона) | ||
+ | org.gradle.daemon=true | ||
+ | </ | ||
+ | ===== Жизненный цикл сборки / Tasks ===== | ||
+ | * Инициализация | ||
+ | * Анализ '' | ||
+ | * Создание экземпляра класса Project для каждого проекта/ | ||
+ | * Конфигурация | ||
+ | * Анализ сценария сборки из '' | ||
+ | * Создание направленного ациклического графа задач (DAG) для каждого проекта. Задачи выполняются в порядке их зависимости друг от друга. | ||
+ | * Выполнение | ||
+ | * Планирование и выполнение всех задач в соответствии с построенным графом | ||
+ | Gradle task - кусок логики, |
service/gradle.1712580076.txt.gz · Последнее изменение: 30.07.2024 19:20 (внешнее изменение)