Сборка Android-приложений с помощью Gradle 
Любовь Поволоцкая lyubov.povolotskaya@dataart.com
Собираем 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
Спасибо Любовь Поволоцкая Email: lyubov.povolotskaya@dataart.com Skype: t_ulip

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

  • 1.
    Сборка Android-приложений спомощью Gradle Любовь Поволоцкая lyubov.povolotskaya@dataart.com
  • 2.
    Собираем android приложение •IDE (Eclipse, IntelliJ IDEA/Android Studio) •Ant •Maven •Gradle
  • 3.
    Что нам даетGradle для Android? •Groovy vs. XML •Возможность кастомизации процесса сборки •Build variants •Управление зависимостями •Поддержка Maven Central и Ivy •Конфигурация Manifest-файла для различных сборок •Android Signing Configuration •ProGuard •Тестирование
  • 4.
    Android Plugin •Текущаяверсия 0.12.1 •Поддержка Gradle 1.12
  • 5.
    Подключаем android plugin buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' } } apply plugin: 'com.android.application'
  • 6.
    Структура проекта Sourcesets •src/main/ •src/androidTest/ Код и ресурсы •java/ •resources/ •AndroidManifest.xml •res/ •assets/ •aidl/ •rs/ •jni/
  • 7.
    Dependencies •Зависимости отлокальных библиотек compile fileTree(dir: 'libs', include: ['*.jar']) •Артефакты Maven и Ivy compile 'com.google.code.gson:gson:2.2.+ •Library projects compile project(':ViewPagerIndicator')
  • 8.
    Build Types •debug •release •Кастомные типы сборок
  • 9.
    Product Flavors defaultConfig{ minSdkVersion 8 versionCode 10 } productFlavors { flavor1 { applicationId "com.example.flavor1" versionCode 20 } flavor2 { applicationId "com.example.flavor2" minSdkVersion 14 } }
  • 10.
    Что мы можемнастроить для различных типов сборок и 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" }
  • 11.
    Что мы можемнастроить для различных типов сборок и flavors? •Настройка параметров подписи (keystore, alias, password) signingConfigs { debug { storeFile file('../debug.keystore') } release { storeFile file('../release.keystore') storePassword 'android' keyAlias 'releasekey' keyPassword 'android' } }
  • 12.
    Что мы можемнастроить для различных типов сборок и flavors? •Использование кастомных placeholders в AndroidManifest: defaultConfig { manifestPlaceholders = [activityLabel:"defaultName"] } <activity android:name=".MainActivity" android:label="${activityLabel}" > •Полный список можно посмотреть в классах DefaultBuildType и DefaultProductFlavor, а также BaseConfigImpl
  • 13.
    Build Type +Product Flavor = Build Variant
  • 14.
    Примеры использования несколькихсборок •Free/Paid версия •Брендирование приложения •Демо и продакшн версия
  • 15.
    Задача из практики •Необходима возможность сборки нескольких apk приложения, которые будут отличаться UI, а также иметь несущественные отличия в функционале •Обязательна возможность установки нескольких версий приложения на одно устройство
  • 16.
    Шаг 1 •Длякаждого варианта приложения создаем отдельный flavor productFlavors { flavor1 { packageName "com.example.flavor1" } flavor2 { packageName "com.example.flavor2" } }
  • 17.
    Шаг 2 •Длякаждого flavor создается своя папка со специфическими ресурсами, манифестом и исходниками (по необходимости) src/{flavor name}/java src/{flavor name}/res src/{flavor name}/AndroidManifest.xml
  • 18.
    Шаг 3 •Общиеисходники и ресурсы помещаем в src/main
  • 19.
    Android Studio +Gradle •Полная поддерка и регулярное обновление для новых версий Gradle Android plugin •Возможность работы с различными BuildVariants •Единая система сборки в IDE и command line •Gradle wrapper
  • 20.
    GradleWrapper •Не нужнокачать и устанавливать Gradle на локальной машине •Поставка используемой версии Gradle вместе с проектом •Shell скрипты для Windows, Mac, Linux для простого и быстрого запуска комманд для сборки
  • 21.
    Заключение •Gradle активнопродвигается Google •Фактически принудительный переход на Gradle в новых проектах при условии использования Android Studio •Подавляющее большинство современных библиотек поддерживает Gradle •Android Plugin активно развивается, но пока не очень хорошо документирован
  • 22.
    Источники •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
  • 23.
    Спасибо Любовь ПоволоцкаяEmail: lyubov.povolotskaya@dataart.com Skype: t_ulip