🧐 Правильно ли мы понимаем Gradle?
❓Знаете ли вы, что такое Gradle? Как работает? А ведь мы его постоянно запускаем при сборке, тестах и прочих действиях и даже не задумываемся что он есть такое. Для большинства это "система сборки". А что это значит? Как она вообще собирает проекты?
📚 Немного теории:
Gradle — это система сборки с открытым исходным кодом, которая используется для разработки на Java, Kotlin и Android (но не только). Она упрощает процесс сборки, позволяя разработчикам сосредоточиться на написании кода, а не на рутинных задачах.
❗️ Только тут внимание - Gradle ничего не знает про Android и как его собирать, если ему об этом не "показать". Как?
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false
}
Думаю вы часто видели эти строчки. Как раз с помощью них Gradle понимает, что данный код является Андроид проектом написанным на Котлин и знает как его собрать в .apk или .aab.
🖊 В этих строчках я пытаюсь до вас донести, что Gradle является неким "умелым человеком-сборщиком", который может собрать почти всё что угодно по макету и выданных ему материалов. Из макета (гредл файлов в каждом модуле) и материалов (код и подключенный зависимости) он собирает/упаковывает в готовый продукт/товар/приложение. Это не магия Студии. Gradle - это отдельный от Студии и Котлина инструмент, который может работать вообще без каких либо IDE, в отличие от человека программистов. А студия просто прячет запуск работы (они же Gradle Tasks) нашего "сборщика" за красивыми кнопочками, чтобы разрабам было не так больно.
Пример, где создается проект с помощь консоли (c 6:10).
💁 Но всё про такой мощный инструмент рассказать за один пост физически невозможно, поэтому покажу еще только маленькую часть - зависимости.
...Вторым мощным преимуществом градла стал его менеджер зависимостей. Мало того, что градл позволяет без проблем работать с любыми внешними зависимостями, так градл еще позволяет работать хорошо с внутренними зависимостями. В частности, в градле вы без проблем можете создавать модули и многомодульные проекты...
© Авторский курс "Modern Android Warrior", Алексей Гладков
📖Основные конфигурации зависимостей в Gradle:
--- implementation – зависимость доступна только в текущем модуле. Улучшает скорость сборки, так как изменения в ней не затрагивают другие модули;
--- api – делает зависимость доступной и в других модулях, зависящих от текущего. Используется, если библиотека или модуль должны быть видны наружу;
--- compileOnly – зависимость нужна только на этапе компиляции, но не включается в итоговый файл, что уменьшает размер приложения. Не подходит для AAR-библиотек;
---runtimeOnly – зависимость подключается только на этапе выполнения, но не используется при компиляции;
--- ksp / kapt / annotationProcessor – используются для обработки аннотаций и генерации кода перед компиляцией;
--- lintChecks – добавляет дополнительные проверки lint в процесс сборки;
--- lintPublish – позволяет библиотекам включать свои lint-правила в AAR;
(ставь лайк, если не про все знал - мне будет приятно)
👋 В завершении поста хочется еще раз напомнить, что под капотом студии при сборке проекта никакой магии нет.. Точнее она есть, пока ты действительно туда не взглянешь a там фиксики. Gradle - это просто еще один инструмент разработки, на который не обращаешь внимание, пока есть возможность без крашей запускать проект на зеленую кнопочку студии ▶️ ))
...И здесь мы сталкиваемся с тем, что бОльшая часть разработчиков, к сожалению, обладает очень низкой базой знаний и осознанностью (что собственно и призван исправить этот курс), что приводит к бездумному использованию плагинов и полному непониманию того как все эти плагины будут взаимодействовать между собой, что в свою очередь, приводит к непониманию источника возникновения ошибок.
То есть проще говоря под капотом творится какая-то дичь, эта дичь выдает ошибки и неочевидное поведение, человек расстраивается и думает, что проблема в градле...
© Авторский курс "Modern Android Warrior", Алексей Гладков
Подписаться |
Boosty |
YouTube