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

Комментарии 7

Подскажите пожалуйста, а где можно почитать про написание собственных скриптов? Проблема в том, что все статьи что я видел сводятся к примерно такой формулировке "Если вы хотите сделать X, просто вставьте Y в build.gradle". А хотелось бы понять внутреннюю логику градла: как формируется список задач, как самому создать задачу (или это умеют только плагины?), как можно создать переменную с необходимой областью видимости,…. И ещё непонятно почему плагин добавляется в одном месте, а настраивается в другом. Хотелось бы чувствовать себя при редактировании build.gradle так же комфортно как и при редактировании самого кода программы.

Очень рекомендую доклад с прошлогоднего Мобиуса Степан Гончаров — Gradle от A до Я.


Почитать можно официальную документацию. Там будет очень много Java-специфичного и ничего Android-специфичного, но там вполне хорошо изложена база.


А если кратко по вашим вопросам:
Gradle работает с проектами (мы их обычно называем модулями), проект по сути ничего не умеет сам, он только предоставляет контекст. Плагины могут добавлять к проекту расширения (те самые блоки android { minSdk = 20 }) и задачи (например задачу сборки APK). Задачу еще можно объявить прямо внутри build.gradle без каких либо плагинов и сразу же добавить ее к текущему проекту. Переменную можно создать в области видимости конкретного скрипта (просто def myVar = 0 с нулевым отступом), блока в скрипте, или в проекте (текущем или корневом) через механизм Extra Properties (такие переменные можно будет вытащить из других скриптов). Почему конфигурация и добавление плагина разделены на два разных этапа я ответить не могу. Возможно было бы все и правда легче, если бы мы могли конфигурацию прокинуть как будто в конструктор плагина. Но тогда мы бы потеряли динамичность в настройке.

Спасибо, попробую почитать, разобраться

Еще рекомендую попробовать использовать Kotlin в Gradle скриптах. Вся Groovy магия резко пропадает оставляя Вас один на один с чистым Gradle API и небольшим количеством скодогенерированных расширений. Сначала будет очень больно, но со временем Вы разберетесь.

Я пробовал. Но это все таки не Kotlin, а Kotlin DSL, так что от привычного синтаксиса котлина там мало что есть. Ну и главная проблема этого подхода, что даже статьи "Если вы хотите сделать X, просто вставьте Y в build.gradle" перестают помогать, т.к. они обычно на groovy. А перевести на котлин без понимания принципов работы не получается

У меня долго была такая же проблема, но однажды я решился разложить для себя эту магию по полочкам и сделал доклад на наш внутренний митап: www.youtube.com/watch?v=WOBok2u-SL8

Спасибо. Посмотрел, начала появляться ясность.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий