Туториал по плагину gradle

I. Введение в Gradle

1. Что такое Gradle?

Gradle — это инструмент для автоматизации проекта, который объявляет параметры проекта на основе языка Groovy, в то же время поддерживая файл kotlin xxx.gradle.kts в качестве языка, указанного в домене (DSL).

Сравните с другими инструментами сборки

Самое прямое сравнение — это сравнение между Gradle и Maven и Ant, но в настоящее время в основном нет проектов, построенных на основе Ant, здесь упоминаться не будет. Во-первых, Gradle намного проще, чем Maven. Groovy синтаксис гораздо проще писать и читать, чем Xml в Maven. Во-вторых, пользовательские функции в Gradle намного удобнее, чем в Maven. Вы можете настроить задачу в Gradle, и вам нужно написать плагин для ее реализации в Maven.

конфигурация идеи

Создайте новый файл на диске D(Используйте команду dos)), В качестве основного каталога хранилища пакетов jar, загруженного gradle, по умолчанию.  Откройте файл-> setting-> Build, Execution, Deployment-> Gradle, измените его следующим образом:Указан каталог файла GradleУказан домашний каталог Gradle Work

настройки склада

Рекомендуется установить следующим образом

Репозиторий — это просто набор файлов, упорядоченный по группе, имени и версии. По умолчанию Gradle не определяет никаких репозиториев. Хранилища используются здесь, чтобы указать хранилище. mavenLocal (): указывает на использование локального хранилища maven, а локальный склад указывает местоположение хранилища, указанное в файле настроек при настройке maven. Такие как, ПокаСкопируйте файл вПод каталогом, как правило, нетДля файлов gradle ищет пакеты jar в следующем порядке: : Укажите адрес ускорения изображения Alibaba Cloud mavenCentral (): это центральный склад Maven, который можно использовать напрямую без какой-либо настройки и объявления jcenter (): центральный склад JCenter фактически построен с использованием Maven, но он более дружественен, чем склад Maven, распространяется через CDN и поддерживает доступ https. позадиУкажите склад maven, обычно используйте адрес частного склада или другую стороннюю библиотеку Gradle ищет файлы jar в порядке конфигурации. Если он существует локально, он не будет загружен снова. Если он не существует, перейдите на склад Maven, чтобы загрузить его

Обратите внимание, что загруженный файл JAR находится не на складе Maven, а в главном рабочем каталоге Gradle, как показано выше.оглавление Ссылка«Gradle battle» как настроить использование локального склада Maven

Команда построения

Команды очистки

Команда сборки пакета

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

V. Резюме

Из этой статьи мы уже узнали, как настроить gradle для создания проектов Android и частично оптимизировать сборку проекта, но мы все еще очень мало знаем о принципах, таких как, почему можно определить android {в build.gradle } Для этой части кода, почему конфигурация проекта может быть реализована здесь.В отношении того, чтобы знать это и знать почему, мы должны продолжать исследовать gradle, понимать отличный синтаксис, понимать задачи в gradle и использовать пользовательскую сборку функция.

Справочные документы: andorid официальная сборка конфигурации документаhttps://developer.android.com/studio/build/официальная документация Gradle-сборка приложений для Androidhttps://guides.gradle.org/building-android-apps/Несколько предложений, упомянутых в Google I / O, чтобы улучшить скорость компиляции Android Studiohttps://blog.csdn.net/sd19871122/article/details/78550740

Сборка Java кода

Начнем с простого, создадим очень простой в корневой папке проекта(там,
где src), который содержит только одну строчку:

Эта единственная строчка в конфигурации сборки приносит значительную пользу. Запустите gradle tasks
снова и вы увидите новые задачи в списке, включая задачи для сборки проекта, создания JavaDoc и запуска тестов.

Вы будете изпользовать задачу gradle build достаточно часто. Эта задача компилирует, тестирует и
упаковывает код в JAR-файл. Вы можете запустить её таким образом:

Через несколько секунд, «BUILD SUCCESSFUL» будет означать, что сборка прошла успешно.

Чтобы увидеть результаты сборки, посмотрите на содержимое каталога build. Здесь
вы найдете несколько директорий, среди которых три наиболее значимые:

  • classes. Скомпилированные .class файлы
  • reports. Отчеты в течении сборки(такие как отчеты о тестировании)
  • libs. Библиотеки для сборки проекта(обычно в виде JAR и/или WAR файлов)

Классы в каталоге с .class файлами генерируются во время сборки Java-кода. Соответственно,
вы должны найти там HelloWorld.class и Greeter.class.

На данный момент проект не имеет зависимостей от библиотек, поэтому ничего нет в папке dependency_cache.

Каталог отчетов должен содержать отчет о выполнении тестов для проекта. Т.к. проект пока не содержит тестов,
данный отчет будет нам неинтересен.

Каталог библиотек должен содержать JAR-файл с названием каталога проекта. В дальнейшем, вы увидите,
как указывать имя JAR-файла и его версию.

Создание плагина для standalone проекта

Для этого проекта не нужно придумывать что-то хитрое – просто создается плагин, который добавляет текстовый файл и зависимости в этом файле. Создание standalone проекта дает вам возможность публиковать и делиться им с другими. Предпочтительный и самый простой способ – это использование плагина Java Gradle. Он автоматически добавит зависимость gradleApi(), сгенерирует необходимые дескрипторы плагина в итоговом JAR файле и сконфигурирует Plugin Marker Artifact для пользования после публикации.

Для начала разахрхивируйте и откройте стартовый проект с названием ProjectTrackerPlugin в IntelliJ.

В build.gradle добавьте java-gradle-plugin и maven внутри задач plugins. Будет выглядеть примерно так:

Эти два плагина помогут создать плагин и опубликовать его. После внесения изменений загрузите их с помощью команды Command-Shift-I для macOS или Control-Shift-O для ПК. Далее создайте package внутри директории src/main/kotlin и назовите его com.raywenderlich.plugin. Внутри создайте Kotlin класс SaveDependencyTask и расширьте его с DefaultTask().

Создайте companion object и добавьте следующие константы, которые помогут определить, куда сохранить текстовый файл:

Создайте переменную configuration типа Collection и объявите ее с @Input:

Вышеперечисленное позволит вам определить наличие входного значения для этой задачи. Оно будет использовано для передачи списка конфигураций из модуля, использующего плагин, так, что у него будет доступ ко всем зависимостям.

Далее создайте функцию checkDependency и добавьте аннотацию через @Input. Внутри функции:

Этот код во многом похож на тот, что вы написали в плагине buildSrc. Вы проверяете наличие пути и при его отсутствии создаете требуемые директории и файлы.

И, наконец, добавьте оставшиеся функции, которые фактически будут выполнять запись в текстовый файл:

После этого ваша задача готова. Теперь создайте Kotlin класс в той же директории и назовите его SaveDependancy и имплементируйте Plugin. В применимой функции зарегистрируйте созданную задачу:

Вуаля! Вы сделали собственный Gradle плагин в standalone проекте.

Далее посмотрим, как использовать этот плагин в проектах Android Studio.

14 ответов

Лучший ответ

Добавьте в зависимости нашего скрипта сборки:

1. В build.gradle на уровне проекта

И примените плагин :

2. В build.gradle на уровне модуля

Исходный ответ:

Скорее всего это ошибка в плагине Kotlin. Я зарегистрировал проблему на их трекере.

202

GameScripting
2 Окт 2016 в 22:35

Я нашел, почему мой не работал. Мои блоки были потеряны, и, переместив блок перед плагинами, как показано ниже, я заработал:

8

E-Kami
13 Дек 2015 в 11:57

Я не могу найти его в официальной документации, но вы должны применить плагин добавив в файл следующее:

32

Maxime
9 Фев 2016 в 08:09

Когда вы используете Android Studio 2.0 и kotlin 1.0.1-2, вы ошибетесь. Вы не можете настроить расширения kotlin android в build.gradle своего проекта, вам необходимо настроить и kotlin расширения android в каждом модуле build.gradle следующим образом:

Что наиболее важно, даже если в плагин kotlin включено расширение kotlin для android, вам также необходимо настроить kotlin-android-extensions в своем модуле bulid.gradle следующим образом:

Конечно, вы можете настроить путь к классам плагина kotlin в build.gradle вашего проекта.

38

zhuochangjing
10 Апр 2016 в 06:22

Пожалуйста, попробуйте добавить в блок зависимостей следующее:

Denys Zotov
20 Апр 2020 в 12:49

Вот как это сработало для меня. Когда я впервые настроил Kotlin в Project, я выбрал версию 1.1.2-3 вместо 1.1.2-4 и добавил следующую строку в файл приложения build.gradle

После этого я синхронизировал сборку, и все заработало, как ожидалось.

Dobai Csaba Arpad
23 Май 2017 в 19:58

Проблема для меня заключалась в порядке, в котором я применил плагины.

Вы должны применить плагин kotlin-android перед плагином kotlin-android-extensions

4

lbenedetto
11 Июн 2019 в 20:17

Удаление следующего импорта устранило проблему для меня.

4

Nopx
12 Май 2019 в 21:28

Блок buildscript, содержащий зависимость kotlin-android-extensions, по-видимому, должен находиться в модуле приложения build.gradle, а не на верхнем уровне.

10

iajn
21 Янв 2016 в 22:12

Для меня единственное, что помогло, — это нажать «Файл» -> «Недействительные кеши / Перезагрузить …»

Uriel Frankel
13 Сен 2020 в 07:27

Добавить в .

Если вы уже добавили его, попробуйте удалить его и синхронизировать gradle, когда синхронизация будет завершена, затем добавьте его обратно и снова синхронизируйте Gradle. Эта работа для меня.

5

angryd
29 Дек 2017 в 03:49

После применения упомянутых выше исправлений мне пришлось перезапустить Android Studio, чтобы она заработала.

1

Dawit Abraham
10 Окт 2019 в 09:22

Я обнаружил, что одновременно поддерживаю C ++ и Kotlin, что вызывает проблемы при сборке.

При запуске нового проекта убедитесь, что поддержка C ++ не отмечена, а поддержка Kotlin отмечена. Это устранило проблему для меня.

Stephen Rauch
15 Янв 2018 в 01:37

В моем случае я поместил код, ссылающийся на представление, в . Как глупо..

KYHSGeekCode
7 Мар 2020 в 06:17

Предыстория.

Вот раньше был Ant. Простой и понятный инструмент для сборки проектов. Открываешь xml-ку и видишь: здесь мы хотим скомпилировать файлы, здесь скопировать всё в папку dist, а здесь сделать jar-ик.

Потом придумали Maven. Это была небольшая революция. Искать и подключать популярные библиотеки стало намного проще. Все стали использовать приблизительно одинаковую структуру проектов (исходники хранились в одной папке, конфигурационные файлы — в другой, тесты — в третьей).

В результате, в некоторых программерских компаниях разработчиков стали насильно пересаживать на Maven. Так наступило время, в течение которого процесс сборки проектов для некоторых программистов был окутан туманом.

Разобраться, как работает Maven; понять, что означают все эти тэги – было весьма затруднительно. Всё взаимодействие ограничивалось, как правило, запуском команды mvn clean install. Для многих это действие означало что-то похожее на взмах волшебной палочки с параллельным произнесением заклинаний: «Expelliarmus» или «Avada Kedavra».

Любая проблема, требующая каких-либо нестандартных исправлений в pom.xml, первым делом решалась поиском «нужного заклинания» в stackoverflow или Google. Главная причина недовольства, которое высказывали многие программисты, что не понятно как и в какой последовательности всё работает. Например, что нужно сделать, чтобы просто скопировать файлик и затем выложить его на ftp (или запустить обфускатор)?

Тем не менее, Maven постепенно занял свое место в умах людей. Кто-то из любопытствующих и упорных в итоге разобрался в его внутреннем устройстве. Кто-то просто свыкся. Но время идет, мода меняется. Находятся люди, для которых уже и Мaven — это неудобный и даже архаичный инструмент.

Время не щадит никого…

Структура проекта

Итак, главная сущность в мире Gradle – это Project. Project-ом выступает само наше приложение, которое мы только что создали. У project-а могут быть subproject-ы, у subproject-а могут быть свои subproject-ы, и таким образом получается древовидная структура. Хорошей практикой является подход, при котором степень вложенности не превышает двух. Такая структура подходит для большинства проектов. При этом subproject-ы можно просто называть Gradle-модулями.

Если вы пользуетесь IDE от JetBrains или Android Studio, по умолчанию они не дадут вам создать иерархию больше двух (для стандартных проектов), что уже наталкивает на мысль, что так делать не стоит. 

На картинке снизу subproject-ы (Gradle-модули) — это app и lib. Корнем Gradle-структуры является сам проект (вот эта маленькая точка сверху):

Project узнаёт обо всех своих subproject из файла конфигурации settings.gradle (.kts). Написанный здесь скрипт будет выполняться на этапе инициализации проекта.

Итак, начнем

Загрузите материалы, используя кнопку «Загрузить материалы» вверху или внизу этой статьи. Распакуйте и откройте стартовый проект в вашей директории под названием ProjectTracker в Android Studio.

Запустите. Вы увидите что-то похожее на:

Это очень простое и понятное приложение. Когда пользователь что-то вводит в текстовое поле и нажимает на кнопку Enter Value, текст появляется на экране. Вот и все!

Вам не нужно беспокоиться о том, что происходит в приложении, так как вы будете работать с директорией buildSrc и файлами build.gradle.

Перед тем, как занырнуть в код и испачкать руки, очень важно понять, что такое Gradle и как создавать плагины с его помощью

Сборка

Вот мы и плавно подобрались к тому, что чаще всего поджигает наш ноутбук рождает приложение на свет. На этом этапе Gradle начинает выполнять задачи, которые были добавлены в граф зависимости на этапе конфигурации в нужном порядке. 

Коротко про Gradle Task

Gradle Task представляет собой единицу работы, которую выполняет сборка. К примеру, это может быть компиляция классов, создание JAR, создание документации Javadoc или публикация в репозиторий. 

Простейшим вариантом написать задачу для этапа сборки является реализация лямбды в , как на примере ниже:

Задаче очень желательно добавлять description и group, чтобы без лишних телодвижений было понятно, чем она занимается. После добавления group задачу будет удобно искать и запускать:

Задачу можно выполнить также и через консоль с помощью команды: 

Gradle Daemon

Непосредственным выполнением сборки занимается Gradle Daemon. Он включен по умолчанию для Gradle версии 3.0 и выше. Gradle Daemon является долгоживущим системным процессом, периодически осуществляющим сборку, когда мы этого хотим. Внутри него происходит много in-memory кеша, оптимизации работы с файловой системой и оптимизации кода выполнения сборки. Если коротко — всё идет на пользу. Пожалуй, исключение только одно — он довольно прожорлив, и Gradle любит держать несколько демонов на разные случаи жизни. Если система начинает ощутимо лагать, всегда можно всех за раз прибить командой 

Несколько советов по оптимизации скорости сборки

Нетрудно понять, что сборка — это самый трудозатратный этап, занимающий львиную долю всего времени работы Gradle. Есть несколько базовых рекомендаций для того, как нам её ускорить, первая из которых — запастись терпением:

Параллельное выполнение тасок.  
Всё просто — в вашем gradle.properties, и Gradle будет стараться максимально распараллелить выполнения тасок на этапе сборки

Этот параметр по умолчанию включен при создании проекта.

Обновление Gradle.
Gradle важно периодически обновлять. Связано это с тем, что с каждой версией в Gradle привносят улучшения по скорости сборки, исправления багов и новые интересные плюшки

Для удобства обновления, был придуман Gradle Wrapper (или просто Wrapper).  Это ни что иное, как обычная Gradle-задача. Теперь для обновления версии можно написать в рутовом build.gradle (.kts) следующее:

, а затем выполнить команду . Или же выполнить

, где вместо gradle_version указываем желаемую версию Gradle. Тем самым Gradle сам загрузит нужную версию и положит её в папку с проектом. Она же будет использоваться в дальнейшем по умолчанию, а счастливые мы сможем запускать задачи с помощью скрипта gradlew, который появится в папке с нашим проектом.  

Правильное использование api/implementation. 
При изменении реализации зависимости Gradle пересобирает «на холодную» все зависящие от неё модули. Я уже упомянул про api и implementation в разговоре о , и теперь понятно, что при подключении зависимости через api, она также транзитивно попадает в classpath-ы модулей, в которые мы подключили наш модуль. Тем самым увеличивается количество модулей, которые gradle будет пересобирать при изменении зависимости. Если нет необходимости в транзитивном использовании кода из зависимости, для её подключения следует использовать implementation.

Инкрементальность и build-кеш.
Оптимизация Gradle позволяет нам пропускать выполнение задачи при определенных условиях. У Gradle существует 5 состояний задач — EXECUTED, UP-TO-DATE, FROM-CACHE, SKIPPED и NO-SOURCE. В разговоре про кеш нам интересны два из них — UP-TO-DATE и FROM-CACHE. Они сигнализируют о том, что результаты выполнения наших тасок были успешно подтянуты гредлом из результатов предыдущей сборки. Об остальных состояниях можно .
UP-TO-DATE. Возникает в случае, если разработчик задачи позаботился о ней и самостоятельно реализовал инкрементальность её выполнения (проверки на up-to-date), или же все зависимости этой задачи, если они есть, были успешно взяты из кеша, или признаны гредлом up-to-date. 
FROM-CACHE. Это состояние возникает в случае, если Gradle смог восстановить outputs задачи из билд-кеша. При этом по умолчанию build-cache выключен. Build-cache довольно удобно использовать на CI, таким образом ускорив выполнение пайплайнов Gradle-сборки. Как организовать build-cache всегда можно узнать .

Предложения по улучшению скорости компиляции

1. Используйте последний плагин для Android

Команда разработчиков инструментов Google работает над улучшением скорости компиляции Android Studio. Последний плагин Gradle может быть использован для ускорения компиляции. После Android Gradle Plugin 3.0.0 Google ввел новый метод зависимости и заставил отказаться от старого метода зависимости, разделив исходный метод закрытия компиляции на реализацию, API для очистки проектных зависимостей. Реализация действительна только для текущей зависимости модуля. API такой же, как и при компиляции, и транзитивность зависимости существует. Неправильное использование приведет к двойной загрузке зависимостей, что увеличит время компиляции. Дополнительные функции после 3.0.0 см. в разделе «Конфигурации зависимостей» в официальном документе.https://developer.android.com/studio/build/dependencies

Избегайте использования мультидекса

Когда minSdkVersion меньше 21 (не включая 21), время компиляции значительно увеличится. Мы можем скомпилировать minSdkVersion до 21, чтобы повысить эффективность разработки, настроив версию для разработки. Конкретная конфигурация следующая:

3. Избегайте использования multi-APK (редко используется)

Этот метод можно использовать, когда вам нужно поддерживать разные ABI или dpi, используйте splts {}, чтобы сгенерировать разные apk для проекта. При разработке и отладке отключите функцию разбиения. Конкретная конфигурация выглядит следующим образом:

Используйте эту команду при сборке из командной строки:

При сборке с Android Studio вы можете выполнить следующую настройку: Откройте Preferences-> Build, Execution, Deployment-> Compiler, заполните -PdevBuild после параметра командной строки, как показано на рисунке ниже:

4. Уменьшите упакованные файлы ресурсов

Когда мы разрабатываем и отлаживаем, нет необходимости компилировать все файлы ресурсов. Обычно выбирается только один, чтобы сократить время компиляции. Конкретная конфигурация выглядит следующим образом:

5. Отключить сжатие PNG

При сборке Android сжатие PNG включено по умолчанию. При разработке и отладке вы можете отключить сжатие PNG. Конкретная конфигурация выглядит следующим образом:

6. Используйте Мгновенный запуск

Andorid studio 3.0 значительно оптимизировала мгновенный запуск. Обновленный код в предыдущей версии не работал на телефоне, поэтому он был закрыт. Попробуй это сейчас.

8. Не используйте динамически зависимые версии

Проект является неопределенным во время процесса сборки, и он может занять слишком много времени для компиляции или сбоя из-за сетевых проблем И Gradle проверяет наличие новых версий зависимостей каждые 24 часа, чтобы увеличить время разрешения зависимостей. Не используйте следующие зависимости

9. Распределение максимального размера кучи для фоновых процессов Gradle.

Выделение большего объема памяти может сократить время на создание большого проекта, в зависимости от других факторов, таких как конфигурация компьютера. Для получения дополнительной информации см. Официальный веб-сайт Gradle Настройка памяти JVM: Настраивается в gradle.properties при настройке новой версии

Не настраивать в build.gradle со старой версией

10. Используйте Gradle кеш

Кэширование Gradle — это новая функция Gradle 3.5. Когда кэширование включено, Gradle будет кэшировать и повторно использовать результаты предыдущих сборок. В частности, добавьте следующую конфигурацию в gradle.properties:

Вышеуказанные пункты относятся к конференции ввода-вывода Google 2017. Подробнее см. В видео конференции.https://www.youtube.com/watch?v=7ll-rkLCtyk

11. Специфическая оптимизация для времени строительства проекта

Для построения каждого проекта конкретная оптимизация не будет одинаковой: мы можем вывести конкретное время строительства нашего проекта в документ и проанализировать, какое время строительства слишком длинное для целевой оптимизации. Конкретные команды следующие:

  • —Profile: включить профилирование
  • —Recompile-scripts: принудительно перекомпилировать сценарии при обходе кэша.
  • —Offline: отключить Gradle от получения онлайн-зависимостей. Это гарантирует, что любая задержка, вызванная Gradle при попытке обновить зависимости, не повлияет на ваши данные анализа. Вы должны были собрать проект один раз, чтобы убедиться, что Gradle загрузил и кэшировал ваши зависимости.
  • —Rerun-tasks: заставить Gradle перезапустить все задачи и игнорировать любые оптимизации задач. После завершения сборки откройте сгенерированный профиль в браузере в каталоге _project-root_ / build / reports / profile / profile-timestamp.html, чтобы увидеть конкретные отчеты о времени сборки.

The dependencies{ } Block

There should be only one block left (if you don’t have any extra configs hopefully) that is the dependencies{} block.

Here, implementation, kapt, api, testImplementation, androidTestImplementation, etc are functions.

The fileTree in implementation() is also a function which takes a map as an argument. Here’s how it will look like:

Before

dependencies {    implementation fileTree(dir: 'libs', include: )    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.21"    implementation 'androidx.appcompat:appcompat:1.1.0-alpha02'    implementation 'androidx.core:core-ktx:1.1.0-alpha04'    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'androidx.test:runner:1.1.2-alpha01'    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.2-alpha01'}

After

dependencies {implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.21")implementation("androidx.appcompat:appcompat:1.1.0-alpha02")implementation("androidx.core:core-ktx:1.1.0-alpha04")implementation("androidx.constraintlayout:constraintlayout:1.1.3")    testImplementation("junit:junit:4.12")androidTestImplementation("androidx.test:runner:1.1.2-alpha01")androidTestImplementation("androidx.test.espresso:espresso-core:3.1.2-alpha01")}

Here is the whole app level build.gradle.kts file:

plugins {id("com.android.application")kotlin("android")kotlin("android.extensions")}android {compileSdkVersion(28)    defaultConfig {applicationId = "com.birjuvachhani.gradlekotlindsldemo"        minSdkVersion(19)        targetSdkVersion(28)versionCode = 1versionName = "1.0"testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"}buildTypes {getByName("release") {isMinifyEnabled = false            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")}    }}dependencies {implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.21")implementation("androidx.appcompat:appcompat:1.1.0-alpha02")implementation("androidx.core:core-ktx:1.1.0-alpha04")implementation("androidx.constraintlayout:constraintlayout:1.1.3")    testImplementation("junit:junit:4.12")androidTestImplementation("androidx.test:runner:1.1.2-alpha01")androidTestImplementation("androidx.test.espresso:espresso-core:3.1.2-alpha01")}

Hell Yeah! Sync the project (Hopefully it will compile, let’s have some faith in Gradle). There you go, your project is converted in Kotlin build scripts. Say goodbye to Groovy!

If you’re reading this and you have made it then you’d be probably like this:

or maybe this (I don’t know how you function, it’s an educated guess):

It depends on you. It’s just a matter of time, Gradle will provide kotlin script support by default. That means this all will be directly generated for you. How amazing is that! Till then, Happy coding folks!

Here is the sample project on github you can refer for this tutorial.

Бонус для дочитавших до конца: Gradle-плагины

Gradle-плагины являются своеобразными контейнерами, в которых может содержаться логика инициализации, конфигурации и сборки. Как правило, плагины используются для внедрения какой-то законченной бизнес-логики в Gradle. На самом деле, плагин есть ни что иное как обычный интерфейс с одним методом apply, где в качестве generic-типа чаще всего выступает Project:

Для написания плагина можно пойти . Каждый из них рассмотрим в следующей статье, а сейчас лишь скажу что самый простой из них мы уже видели в разговоре про то, Да, это есть ни что иное, как script-плагин для Gradle.

Пожалуй, самыми яркими примерами будут являться представители из Android Gradle Plugin: «com.android.application» и «com.android.library». Подключая их в билдскрипты, мы получаем возможность собирать и конфигурировать сборку Android-приложений.

Подключать плагины в наши билдскрипты мы можем с помощью :

, или в блоке :

На примере выше видно, как красиво Kotlin позволяет подключать плагины с помощью extension-функций. По аналогии можно написать свои экстеншены и использовать их для подключения плагинов. Красота!

Кому уже сейчас хочется попробовать себя в разработке плагинов, добро пожаловать в . Также можно посмотреть доклад с AppsConf 2019. В нем раскрываются способы реализации плагинов, а также идет разговор об областях их применения. Возможно, после просмотра вы поймете, что с их помощью вам будет проще решить производственную задачу.

The “android{ }” Block

Note these points to convert this block in Kotlin:

  • compileSdkVersion is a function.
  • applicationId is a property.
  • minSdkVersion and targetSdkVersion are functions too.
  • versionCode and versionName are properties again.

According to the above points, this block will look like this:

Before

android {    compileSdkVersion 28    defaultConfig {        applicationId "com.birjuvachhani.gradlekotlindsldemo"        minSdkVersion 19        targetSdkVersion 28        versionCode 1        versionName "1.0"        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"    }    ...    ...}

After

android {compileSdkVersion(28)    defaultConfig {applicationId = "com.birjuvachhani.gradlekotlindsldemo"        minSdkVersion(19)        targetSdkVersion(28)versionCode = 1versionName = "1.0"testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"}    ...    ...}

buildTypes{ } block is a bit tricky. A function getByName(String) is used to get a build type.

minifyEnabled is a property with name isMinifyEnabled.

proguardFiles and getDefaultProguardFile are functions.

This is how it will look like:

Before

android {    ...    ...    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'        }    }}

After

android {    ...    ...buildTypes {getByName("release") {isMinifyEnabled = false            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")}    }}
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: