Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Transcript of Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая [email protected]
Собираем android приложение
• IDE (Eclipse, IntelliJ IDEA/Android Studio)
• Ant
• Maven
• Gradle
Что нам дает Gradle для Android?
• Groovy vs. XML • Возможность кастомизации процесса сборки • Build variants • Управление зависимостями • Поддержка Maven Central и Ivy • Конфигурация Manifest-файла для различных
сборок • Android Signing Configuration • ProGuard • Тестирование
Android Plugin
• Текущая версия 0.12.1
• Поддержка Gradle 1.12
Подключаем android plugin
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
}
}
apply plugin: 'com.android.application'
Структура проекта
Source sets • src/main/ • src/androidTest/ Код и ресурсы • java/ • resources/ • AndroidManifest.xml • res/ • assets/ • aidl/ • rs/ • jni/
Dependencies
• Зависимости от локальных библиотек
compile fileTree(dir: 'libs', include: ['*.jar'])
• Артефакты Maven и Ivy
compile 'com.google.code.gson:gson:2.2.+
• Library projects
compile project(':ViewPagerIndicator')
Build Types
• debug
• release
• Кастомные типы сборок
Product Flavors
defaultConfig { minSdkVersion 8 versionCode 10 } productFlavors { flavor1 { applicationId "com.example.flavor1" versionCode 20 } flavor2 { applicationId "com.example.flavor2" minSdkVersion 14 } }
Что мы можем настроить для различных типов сборок и flavors?
• Поля класса BuildConfig flavour1{ applicationId "com.example.package" buildConfigField "String", "NAMESPACE", "\"$applicationId \"" buildConfigField "String", "PROVIDER_AUTHORITY", "NAMESPACE" }
• Конфигурация AndroidManifest (версия SDK, номер и имя версии приложения, пакет)
defaultConfig { minSdkVersion 16 targetSdkVersion 19 versionCode 1 versionName "0.9" }
Что мы можем настроить для различных типов сборок и flavors?
• Настройка параметров подписи (keystore, alias, password)
signingConfigs {
debug {
storeFile file('../debug.keystore')
}
release {
storeFile file('../release.keystore')
storePassword 'android'
keyAlias 'releasekey'
keyPassword 'android'
}
}
Что мы можем настроить для различных типов сборок и flavors?
• Использование кастомных placeholders в AndroidManifest:
defaultConfig {
manifestPlaceholders = [activityLabel:"defaultName"]
}
<activity android:name=".MainActivity" android:label="${activityLabel}" >
• Полный список можно посмотреть в классах DefaultBuildType и DefaultProductFlavor, а также BaseConfigImpl
Build Type + Product Flavor = Build Variant
Примеры использования нескольких сборок
• Free/Paid версия
• Брендирование приложения
• Демо и продакшн версия
Задача из практики
• Необходима возможность сборки нескольких apk приложения, которые будут отличаться UI, а также иметь несущественные отличия в функционале
• Обязательна возможность установки нескольких версий приложения на одно устройство
Шаг 1
• Для каждого варианта приложения создаем отдельный flavor
productFlavors { flavor1 { packageName "com.example.flavor1" } flavor2 { packageName "com.example.flavor2" } }
Шаг 2
• Для каждого flavor создается своя папка со специфическими ресурсами, манифестом и исходниками (по необходимости)
src/{flavor name}/java
src/{flavor name}/res
src/{flavor name}/AndroidManifest.xml
Шаг 3
• Общие исходники и ресурсы помещаем в src/main
Android Studio + Gradle
• Полная поддерка и регулярное обновление для новых версий Gradle Android plugin
• Возможность работы с различными BuildVariants
• Единая система сборки в IDE и command line
• Gradle wrapper
GradleWrapper
• Не нужно качать и устанавливать Gradle на локальной машине
• Поставка используемой версии Gradle вместе с проектом
• Shell скрипты для Windows, Mac, Linux для простого и быстрого запуска комманд для сборки
Заключение
• Gradle активно продвигается Google
• Фактически принудительный переход на Gradle в новых проектах при условии использования Android Studio
• Подавляющее большинство современных библиотек поддерживает Gradle
• Android Plugin активно развивается, но пока не очень хорошо документирован
Источники
• http://developer.android.com/sdk/installing/studio-build.html
• http://www.gradleware.com/android/gradle-the-new-android-build-system/
• http://tools.android.com/tech-docs/new-build-system/user-guide