Gradle. Новый уровень автоматизации для Android

41
Gradle Новый уровень автоматизации для Android

description

Доклад Антон Руткевича на конференции Application Developer Days-4. г.Минск 13 декабря 2013

Transcript of Gradle. Новый уровень автоматизации для Android

Page 1: Gradle. Новый уровень автоматизации для Android

Gradle

Новый уровень

автоматизации для

Android

Page 2: Gradle. Новый уровень автоматизации для Android

Обо мне

• Антон Руткевич

• Android developer

• Яндекс

• Google Developer Group Minsk

Page 3: Gradle. Новый уровень автоматизации для Android

Проблемы сборки

(до Gradle)

Page 4: Gradle. Новый уровень автоматизации для Android

Несколько слабо совместимых

вариантов сборки

• Eclipse

• IntelliJ IDEA

• Ant

• Maven

• Свой велосипед

Page 5: Gradle. Новый уровень автоматизации для Android

Сложное управление

зависимостями

• Jar

• Library project

• Apklib

Page 6: Gradle. Новый уровень автоматизации для Android

Тяжело сгенерировать несколько

вариантов приложения

• С логами / без логов

• Тестовые / продакшн переменные

• Несколько похожих apk

Page 7: Gradle. Новый уровень автоматизации для Android

Что такое Gradle?

Page 8: Gradle. Новый уровень автоматизации для Android

Система автоматизации

• Сборки

• Тестирования

• …

Page 9: Gradle. Новый уровень автоматизации для Android

Основной функционал –

в плагинах

• Поддержка конкретных языков,

технологий

• Дополнительный функционал

Page 10: Gradle. Новый уровень автоматизации для Android

Основные идеи

Page 11: Gradle. Новый уровень автоматизации для Android

Скрипт сборки – это код

• Язык – Groovy

• Java +• Динамическая типизация

• Замыкания

• Встроенные в язык коллекции

• Много синтаксического сахара

• ….

• Файл – build.gradle

Page 12: Gradle. Новый уровень автоматизации для Android

Задачи (Tasks)

• Конфигурируются

• Состоят из действий

• Выстраиваются в цепочки

зависимостей

Page 13: Gradle. Новый уровень автоматизации для Android

Задачи сборки Android

• assemble

• check

• build = assemble + check

Page 14: Gradle. Новый уровень автоматизации для Android

Hello world!

task hello << {

println 'Hello world!'

}

> gradle hello

Hello world!

Page 15: Gradle. Новый уровень автоматизации для Android

Управление зависимостями

• Maven, Ivy – артефакты

• Удаленные и локальные

• Локальные файлы

• Jar

• Другие gradle-проекты

Page 16: Gradle. Новый уровень автоматизации для Android

Управление зависимостями

+ aar

• Android – проект с ресурсами

• Только как артефакт, но

можно установить локально

Page 17: Gradle. Новый уровень автоматизации для Android

Hello dependency!

repositories {

mavenCentral()

}

dependencies {

compile 'com.google.code.gson:gson:2.2.4'

compile files('libs')

compile project(':libraryProjectName')

}

Page 18: Gradle. Новый уровень автоматизации для Android

Hello Android dependency!

repositories {

mavenCentral()

}

dependencies {

compile

'com.actionbarcherlock:actionbarsherlock:4.4.0@aar'

}

Page 19: Gradle. Новый уровень автоматизации для Android

Конфигурации сборки

• Пример: debug / release

• Могут иметь свои

• Зависимости

• Особые шаги

• Наборы ресурсов

• Особые настройки

Page 20: Gradle. Новый уровень автоматизации для Android

Типы сборки (Build types)

• По умолчанию

• debug

• release

• Что можно настроить

• packageNameSuffix

• BuildConfig.java

• Свои ресурсы/код

• Другие параметры

Page 21: Gradle. Новый уровень автоматизации для Android

Особенности сборки

(Build flavors)

• Способ легко генерировать

несколько похожих apk

• Примеры использования

• Платное / бесплатное

• Видеокарты - Tegra / Qualcomm / PowerVR

• Другие особенности приложений, для

которых был введен multiple apk

Page 22: Gradle. Новый уровень автоматизации для Android

Варианты сборки

(Build variants)

Особенность

Тип

Free

Paid

ReleaseDebug

PaidDebug

FreeDebug FreeRelease

PaidRelease

Вариант

Page 23: Gradle. Новый уровень автоматизации для Android

Наборы ресурсов (Source sets)

src/

main/

java/

resources/

config1/

config2/

Page 24: Gradle. Новый уровень автоматизации для Android

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

src/

main/

java/

res/

AndroidManifest.xml

Page 25: Gradle. Новый уровень автоматизации для Android

Наборы ресурсов для типов и

вариантов сборки

src/

main/

release/

debug/

free/

paid/

Page 26: Gradle. Новый уровень автоматизации для Android

Построение варианта сборки

main

free

debug

Page 27: Gradle. Новый уровень автоматизации для Android

Особенности

использования

Page 28: Gradle. Новый уровень автоматизации для Android

Ant

• Отличная интеграция

• Возможность поэтапного

перехода с Ant на Gradle

Page 29: Gradle. Новый уровень автоматизации для Android

Дополнительные плагины

• Стандартные

• Плагины дистрибуции

• Вспомогательные плагины

• 3rd-party

• Плагины конкретных библиотек

• Custom plugins

• плагины для автоматизации внутренних

процессов в компании

Page 30: Gradle. Новый уровень автоматизации для Android

Использование с системами

непрерывной интеграции

• Передача параметров для сборки

из CI в build.gradle

• Дополнительные действия при

сборке с помощью CI

Page 31: Gradle. Новый уровень автоматизации для Android

Недостатки

Page 32: Gradle. Новый уровень автоматизации для Android

Сложность

• Groovy не всегда очевиден

• Иногда сложно найти, как

достучаться до определенного

параметра сборки

Page 33: Gradle. Новый уровень автоматизации для Android

Отсутствие поддержки NDK

Отсутствует в версии 0.63

Решение:

a) ждать интеграции (базовая

версия будет в 0.70)

b) сделать самому

Page 34: Gradle. Новый уровень автоматизации для Android

Ограниченность библиотечных

проектов

• Нет возможности реализовывать

flavors

• При подключении к другим

проектам всегда собираются в

release версии библиотек

Page 35: Gradle. Новый уровень автоматизации для Android

Версия начинается с 0

• Все еще бета (альфа?)

• Не все еще реализовано

• Баги

Page 36: Gradle. Новый уровень автоматизации для Android

Когда стоит

использовать

Gradle?

Page 37: Gradle. Новый уровень автоматизации для Android

Когда …

• … проекты небольшие

• … проекты большие, и есть

возможность выделить время

• … процесс сборки сложный

• … нужно унифицировать сборку

• … используются системы CI

Page 38: Gradle. Новый уровень автоматизации для Android

Ресурсы