23
Сборка Android-приложений с помощью Gradle Любовь Поволоцкая [email protected]

Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Embed Size (px)

Citation preview

Page 1: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Сборка Android-приложений с помощью Gradle

Любовь Поволоцкая [email protected]

Page 2: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Собираем android приложение

• IDE (Eclipse, IntelliJ IDEA/Android Studio)

• Ant

• Maven

• Gradle

Page 3: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Что нам дает Gradle для Android?

• Groovy vs. XML • Возможность кастомизации процесса сборки • Build variants • Управление зависимостями • Поддержка Maven Central и Ivy • Конфигурация Manifest-файла для различных

сборок • Android Signing Configuration • ProGuard • Тестирование

Page 4: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Android Plugin

• Текущая версия 0.12.1

• Поддержка Gradle 1.12

Page 5: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Подключаем android plugin

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath 'com.android.tools.build:gradle:0.12.+'

}

}

apply plugin: 'com.android.application'

Page 6: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

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

Source sets • src/main/ • src/androidTest/ Код и ресурсы • java/ • resources/ • AndroidManifest.xml • res/ • assets/ • aidl/ • rs/ • jni/

Page 7: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Dependencies

• Зависимости от локальных библиотек

compile fileTree(dir: 'libs', include: ['*.jar'])

• Артефакты Maven и Ivy

compile 'com.google.code.gson:gson:2.2.+

• Library projects

compile project(':ViewPagerIndicator')

Page 8: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Build Types

• debug

• release

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

Page 9: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Product Flavors

defaultConfig { minSdkVersion 8 versionCode 10 } productFlavors { flavor1 { applicationId "com.example.flavor1" versionCode 20 } flavor2 { applicationId "com.example.flavor2" minSdkVersion 14 } }

Page 10: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Что мы можем настроить для различных типов сборок и 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" }

Page 11: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Что мы можем настроить для различных типов сборок и flavors?

• Настройка параметров подписи (keystore, alias, password)

signingConfigs {

debug {

storeFile file('../debug.keystore')

}

release {

storeFile file('../release.keystore')

storePassword 'android'

keyAlias 'releasekey'

keyPassword 'android'

}

}

Page 12: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Что мы можем настроить для различных типов сборок и flavors?

• Использование кастомных placeholders в AndroidManifest:

defaultConfig {

manifestPlaceholders = [activityLabel:"defaultName"]

}

<activity android:name=".MainActivity" android:label="${activityLabel}" >

• Полный список можно посмотреть в классах DefaultBuildType и DefaultProductFlavor, а также BaseConfigImpl

Page 13: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Build Type + Product Flavor = Build Variant

Page 14: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

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

• Free/Paid версия

• Брендирование приложения

• Демо и продакшн версия

Page 15: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Задача из практики

• Необходима возможность сборки нескольких apk приложения, которые будут отличаться UI, а также иметь несущественные отличия в функционале

• Обязательна возможность установки нескольких версий приложения на одно устройство

Page 16: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Шаг 1

• Для каждого варианта приложения создаем отдельный flavor

productFlavors { flavor1 { packageName "com.example.flavor1" } flavor2 { packageName "com.example.flavor2" } }

Page 17: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Шаг 2

• Для каждого flavor создается своя папка со специфическими ресурсами, манифестом и исходниками (по необходимости)

src/{flavor name}/java

src/{flavor name}/res

src/{flavor name}/AndroidManifest.xml

Page 18: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Шаг 3

• Общие исходники и ресурсы помещаем в src/main

Page 19: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Android Studio + Gradle

• Полная поддерка и регулярное обновление для новых версий Gradle Android plugin

• Возможность работы с различными BuildVariants

• Единая система сборки в IDE и command line

• Gradle wrapper

Page 20: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

GradleWrapper

• Не нужно качать и устанавливать Gradle на локальной машине

• Поставка используемой версии Gradle вместе с проектом

• Shell скрипты для Windows, Mac, Linux для простого и быстрого запуска комманд для сборки

Page 21: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Заключение

• Gradle активно продвигается Google

• Фактически принудительный переход на Gradle в новых проектах при условии использования Android Studio

• Подавляющее большинство современных библиотек поддерживает Gradle

• Android Plugin активно развивается, но пока не очень хорошо документирован

Page 22: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Источники

• 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

Page 23: Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle

Спасибо

Любовь Поволоцкая Email: [email protected]

Skype: t_ulip