Комментарии 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. А перевести на котлин без понимания принципов работы не получается
Композитная сборка как альтернатива buildSrc в Gradle