gradle. Новый уровень автоматизации для android
TRANSCRIPT
Gradle
Новый уровень автоматизации для
Android
Обо мне
• Антон Руткевич
• Android developer
• Яндекс
• Google Developer Group Minsk
Проблемы сборки (до Gradle)
Несколько слабо совместимых вариантов сборки
• Eclipse
• IntelliJ IDEA
• Ant
• Maven
• Свой велосипед
Сложное управление зависимостями
• Jar
• Library project
• Apklib
Тяжело сгенерировать несколько вариантов приложения
• С логами / без логов
• Тестовые / продакшн переменные
• Несколько похожих apk
Что такое Gradle?
Система автоматизации
Основной функционал – в плагинах
Основные идеи
Скрипт сборки – это код
• Язык – Groovy• Java +
• Динамическая типизация• Замыкания• Встроенные в язык коллекции• Много синтаксического сахара• ….
• Файл – build.gradle
Задачи (Tasks)
• Конфигурируются
• Состоят из действий
• Выстраиваются в цепочки зависимостей
Задачи сборки Android
• assemble
• check
• build = assemble + check
Hello world!
task hello << { println 'Hello world!'
}
> gradle hello
Hello world!
Управление зависимостями
Основы
• Maven, Ivy – артефакты• Удаленные и локальные
• Локальные файлы• Jar• Другие gradle-проекты
Android-style
+ aar
• Android – проект с ресурсами
• Только как артефакт, но
можно установить локально
Hello dependency!
repositories { mavenCentral() }
dependencies { compile 'com.google.code.gson:gson:2.2.4' compile files('libs') compile project(':libraryProjectName')}
Hello Android dependency!
repositories { mavenCentral() }
dependencies { compile 'com.actionbarcherlock:actionbarsherlock:4.4.0@aar'}
Варианты сборки
Конфигурации сборки
• Пример: debug / release
• Могут иметь свои • Зависимости• Особые шаги• Наборы ресурсов• Особые настройки
Типы сборки (Build types)
• По умолчанию• debug• release
• Что можно настроить• packageNameSuffix• BuildConfig.java• Свои ресурсы/код• Другие параметры
Особенности сборки(Build flavors)
• Способ легко генерировать несколько похожих apk
• Примеры использования• Платное / бесплатное• Видеокарты - Tegra / Qualcomm / PowerVR• Другие особенности приложений, для
которых был введен multiple apk
Варианты сборки (Build variants)
Особенность
Тип
Free
Paid
ReleaseDebug
PaidDebug
FreeDebug FreeRelease
PaidRelease
Вариант
Наборы ресурсов (Source sets)
src/main/
java/
resources/
…
config1/
config2/
Структура Android проекта
src/main/
java/
res/
…
AndroidManifest.xml
Наборы ресурсов для типов и вариантов сборки
src/
main/
release/
debug/
free/
paid/
Построение варианта сборки
main
free
debug
Особенности использования
Ant
• Отличная интеграция
• Возможность поэтапного перехода с Ant на Gradle
Дополнительные плагины
• Стандартные• Плагины дистрибуции• Вспомогательные плагины
• 3rd-party• Плагины конкретных библиотек
• Custom plugins• плагины для автоматизации внутренних
процессов в компании
Использование с системами непрерывной интеграции
• Передача параметров для сборки из CI в build.gradle
• Дополнительные действия при сборке с помощью CI
Недостатки
Сложность
• Groovy не всегда очевиден
• Иногда сложно найти, как достучаться до определенного параметра сборки
Отсутствие поддержки NDK
Отсутствует в версии 0.63
Решение:
a) ждать интеграции (базовая версия будет в 0.70)
b) сделать самому
Ограниченность библиотечных проектов
• Нет возможности реализовывать flavors
• При подключении к другим проектам всегда собираются в release версии библиотек
Версия начинается с 0
• Все еще бета (альфа?)
• Не все еще реализовано
• Баги
Когда стоит использовать Gradle?
Когда …
• … проекты небольшие
• … проекты большие, и есть возможность выделить время
• … процесс сборки сложный
• … нужно собирать несколько apk
• … используются системы CI
Ресурсы
Код
Open source
• Gradle• https://github.com/gradle/gradle
• Gradle-android-plugin• http://tools.android.com/build/gradleplugin
• Sample project• https://github.com/roottony/gdg-minsk-gradl
e-sample
Информация
• gradle.org• http://www.gradle.org
• Gradle Plugin User Guide• http://
tools.android.com/tech-docs/new-build-system/user-guide
• adt-dev – Google Groups• https://groups.google.com/forum/#!forum/ad
t-dev
Спасибо за внимание!
Вопросы?
http://www.linkedin.com/in/antonrutkevich
https://plus.google.com/u/1/communities/112573540938850912460
GDG Minsk BY