SlideShare a Scribd company logo
Системы
автоматизированной сборки
Android
Александр Вайцеховский
Преимущества
Windows, Linux, MacOS
Зависимости
Автоматическое создание:
JavaDoc
Web-страниц проекта
Отчеты
Непрерывная интеграция
Автоматизация сборки
Автоматизированное тестирование
Сборка проектов на Java
1976
Make
2000
2004
2009
XML-сценарий build.xml*
Императивная настройка
Цели target
Могут зависеть друг от друга
Задачи task
ant, antcall,
mkdir, copy, delete, move, exec, get,
jar, java, javac, javadoc,
property, tstamp, style, cvs, echo
Не умеет управлять зависимостями** :(
* Может называться как угодно, по умолчанию ant будет искать build.xml
** Для зависимостей нужно использовать вместе с Apache Ivy
Пример build.xml
1 <project name="MyProject" default="run" basedir=".">
2 <description>Simple example build file</description>
3 <property name="src" location="src"/>
4 <property name="build" location="build"/>
5 <property name="dist" location="dist"/>
6 <property name="class" value="com.noveogroup.Main"/>
7
8 <target name="clean">
9 <delete dir="${build}"/>
10 <delete dir="${dist}"/>
11 </target>
12
13 <target name="init" depends="clean">
14 <tstamp/> <!-- Create the time stamp -->
15 <mkdir dir="${build}"/>
16 <mkdir dir="${build}/META-INF"/>
17 </target>
18
19 <target name="compile" depends="init">
20 <javac srcdir="${src}" destdir="${build}"/>
21 <manifest file="${build}/META-INF/MANIFEST.MF">
22 <attribute name="Main-Class" value="${class}"/>
23 </manifest>
Фреймворк
Сценарий сборки pom.xml*
Декларативная настройка
Стандартная структура директорий
Жизненный цикл:   clean, compile, test, package, install, deploy
Плагины
*Похож на XML
Maven-репозиторий
Управление зависимостями
Maven: Pom.xml
1 <project>
2 <modelVersion>4.0.0</modelVersion>
3
4 <groupId>com.noveogroup.example</groupId>
5 <artifactId>maven</artifactId>
6 <version>1.0</version>
7
8 <dependencies>
9 <dependency>
10 <groupId>com.noveogroup.example</groupId>
11 <artifactId>library</artifactId>
12 <version>3.0.1</version>
13 </dependency>
14 <dependency>
15 <groupId>junit</groupId>
16 <artifactId>junit</artifactId>
17 </dependency>
18 </dependencies>
19 </project>
Maven: минимальная конфигурация
версия конфигурационного файла
координаты проекта:
artifactId: имя проекта
groupId: автор проекта
version: версия проекта
"groupId:artifcatId:version"
Любую зависимость можно указать через эту тройку  
Супер Pom обеспечивает конфигурацию модулей по умолчанию
Maven: структура проекта
Системы автоматизированной сборки (Lecture 05 – gradle)
Это DSL - Domain Speci c Language (ура, не XML)
Основан на Groovy
Статическая и динамическая типизация
Замыкания
Перегрузка операций
Улучшенный синтаксис Java
Интеграция с Maven-репозиторием
Стандартная структура директорий
Плагины для сборки проекта, настраеваемые декларативно
Направленный ациклический граф задач
Встроенная поддержка задач Apache Ant
Императивное описание задачи
Gradle Daemon, Wrapper
Gradle: плагины
1 //эмуляция жизненного цикла maven
2 apply plugin: 'java'
3
4 //запуск java-приложения
5 apply plugin: 'application'
6
7 //сборка android-приложения  
8 apply plugin: 'com.android.application'
Системы автоматизированной сборки (Lecture 05 – gradle)
Gradle: Структура директорий
Gradle: Структура директорий
Build Script
allprojects {}
настройки для всех проектов (подхватываются каждым модулем)
buildscript {}
настройка build-скрипта Gradle
repositories {}
откуда нужно качать зависимости
чтобы не указывать в каждом модуле - выносим в корень
dependencies {}
какие зависимости нужны
О репозиториях
Maven Central
jCenter
Можно поднимать свои серваки с репозиториями
./build.gradle
1 buildscript {
2 repositories {
3 jcenter()
4 }
5 dependencies {
6 /* Плагин для сборки регистрируется как зависимость:
7 com.android.tools.build - группа
8 gradle - идентификатор
9 2.1.2 - версия */
10 classpath 'com.android.tools.build:gradle:2.1.2'
11 }
12 }
13
14 allprojects {
15 repositories {
16 jcenter()
17 }
18 }
./settings.gradle
1 include ':app', ':super-library', 'one-more-module'
./application/build.gradle
1 apply plugin: 'com.android.application'
2
3 android {
4 compileSdkVersion 23
5 buildToolsVersion "23.0.3"
6
7 defaultConfig {
8 applicationId "com.noveogroup.example.android"
9 minSdkVersion 16
10 targetSdkVersion 23
11 versionCode 1
12 versionName "1.0"
13 }
14 }
15
16 dependencies {
17 compile fileTree(dir: 'libs', include: ['*.jar'])
18 compile 'com.android.support:support-v4:23.4.0'
19 compile 'com.android.support:appcompat-v7:23.4.0'
20 }
./application/build.gradle
apply - применяет к проекту плагин. Плагин добавляет задачи
android - содержит настройки для плагина com.android.application
compileSdkVersion
buildToolsVersion - утилита для сброки apk
defaultCon g - параметры Android-проекта
dependencies - список зависимостей модуля
./library/build.gradle
1 apply plugin: 'com.android.library'
2
3 android {
4 compileSdkVersion 23
5 buildToolsVersion "23.0.3"
6
7 defaultConfig {
8 applicationId "com.noveogroup.example.library"
9 minSdkVersion 16
10 targetSdkVersion 23
11 versionCode 1
12 versionName "1.0"
13 }
14 }
15
16 dependencies {
17 compile fileTree(dir: 'libs', include: ['*.jar'])
18 }
Зависимости gradle
1 dependencies {
2 //от другого модуля
3 compile project(':mylibrary')
4 //от библиотеки из репозитория
5 compile 'com.android.support:appcompat-v7:23.4.0'
6 //от локальных библиотек
7 compile fileTree(dir: 'libs', include: ['*.jar'])
8 }
* Gradle зависимости можно подключать так же как в maven:
compile 'groupId : artifactId : version'
Варианты сборки
Build Type
различные способы сборки/компиляции проекта
ключ для подписи
минимизация и запутывание (обфускация)
возможность отладки
суффикс для пакета приложения
Product Flavor
различные исходники для включения в apk
разные варианты одного класса
разные варианты ресурсов
можно изменять пакет приложения
...и версию
./application/build.gradle
1 android {
2 defaultConfig { ... }
3 lintOptions { ... }
4 buildTypes {
5 debug {
6 debuggable true
7 applicationIdSuffix ".debug"
8 }
9 release {
10 debuggable false
11 applicationIdSuffix ".release"
12 }
13 }
14
15 productFlavors {
16 free {
17 applicationId "com.noveogroup.android.free"
18 }
19 paid {
20 applicationId "com.noveogroup.android.paid"
21 }
22 }
23 }
Build Variants
Полезные ссылки.
Wiki о Gradle
Официальная документация
Gradle в Android

More Related Content

PDF
Введение в Android-разработку (Lecture 06 – basics)
PDF
Иван Крутов - Автоматизация сборки Java-проекта
PPTX
Cистемы автоматической сборки проектов (Полина Фоминых)
PPTX
Maven 3 : уличная магия
PPTX
Автоматизация тестирования многопоточности
PPTX
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
PPT
Maven как средство сборки проекта
PDF
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Введение в Android-разработку (Lecture 06 – basics)
Иван Крутов - Автоматизация сборки Java-проекта
Cистемы автоматической сборки проектов (Полина Фоминых)
Maven 3 : уличная магия
Автоматизация тестирования многопоточности
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Maven как средство сборки проекта
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js

What's hot (20)

PPTX
Основы и нюансы параллельного тестрования
PPTX
ППП (Пишем Плагины Правильно)
PPTX
Java осень 2012 лекция 5
PDF
BDD girls Battle: Cucumber VS. JBehave
PPTX
Konstantin slisenko - Spring Framework
PDF
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
PDF
Тестируй это / Виктор Русакович (GP Solutions)
PDF
Разработка Enterprise-приложения на основе Spring Framework
PPT
Инструментация среды исполнения в арсенале тестировщика
PPTX
Особенности разработки API / Всеволод Шмыров (Яндекс)
PPTX
End-2-End UI автоматизация в мобильном приложении. Наша реализация
PPT
Spring in java
PDF
Автоматизация UI тестирования под Windows и Windows Phone
PPTX
системы сборок проектов
PDF
Многопоточное программирование на C#, путевые заметки
PDF
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
PPTX
автоматизация тестирования с помощью Selenium
KEY
Testing RIA with Selenium
PPTX
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
PPTX
(Seleniumcamp) Selenium RC for QA Engineer
Основы и нюансы параллельного тестрования
ППП (Пишем Плагины Правильно)
Java осень 2012 лекция 5
BDD girls Battle: Cucumber VS. JBehave
Konstantin slisenko - Spring Framework
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Тестируй это / Виктор Русакович (GP Solutions)
Разработка Enterprise-приложения на основе Spring Framework
Инструментация среды исполнения в арсенале тестировщика
Особенности разработки API / Всеволод Шмыров (Яндекс)
End-2-End UI автоматизация в мобильном приложении. Наша реализация
Spring in java
Автоматизация UI тестирования под Windows и Windows Phone
системы сборок проектов
Многопоточное программирование на C#, путевые заметки
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
автоматизация тестирования с помощью Selenium
Testing RIA with Selenium
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
(Seleniumcamp) Selenium RC for QA Engineer
Ad

Viewers also liked (20)

PDF
Toolbar (Lecture 16 – toolbar)
PDF
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
PDF
PDF
PDF
PDF
Push Notifications (Lecture 22 – push notifications)
PPTX
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
PPTX
Семантика текста (HTML5 тема 04 - семантика текста)
PDF
Seminar: Эффективное использование среды разработки и компилятора C++
PDF
Работа с соцсетями (Lecture 19 – social)
PDF
Android - 10 - Graphics
PDF
Database (Lecture 14 – database)
PDF
Работа с графической подсистемой (Lecture 10 – Graphics)
PDF
PDF
PDF
Android - 05 - Android basics
PPTX
Стилизация текста (HTML5 тема 05 - стилизация текста)
PDF
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
PDF
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Toolbar (Lecture 16 – toolbar)
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Push Notifications (Lecture 22 – push notifications)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Семантика текста (HTML5 тема 04 - семантика текста)
Seminar: Эффективное использование среды разработки и компилятора C++
Работа с соцсетями (Lecture 19 – social)
Android - 10 - Graphics
Database (Lecture 14 – database)
Работа с графической подсистемой (Lecture 10 – Graphics)
Android - 05 - Android basics
Стилизация текста (HTML5 тема 05 - стилизация текста)
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Ad

Similar to Системы автоматизированной сборки (Lecture 05 – gradle) (7)

PDF
Android - 06 - Gradle
PPTX
Gradle. Новый уровень автоматизации для Android
PPTX
Gradle. Новый уровень автоматизации для Android
PDF
Введение в maven
PDF
Gradle Introduction
PPTX
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
PDF
Gradle in Enterprise, Is it possible?
Android - 06 - Gradle
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
Введение в maven
Gradle Introduction
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Gradle in Enterprise, Is it possible?

More from Noveo (20)

PPTX
Гуманитарные специальности в IT-индустрии
PPTX
Box model, display and position (HTML5 тема 07 - box model, display position)
PPTX
Основы CSS (HTML5 тема 02 - основы CSS)
PPTX
Структура HTML документа (HTML5 тема 01 - структура html документа)
PPTX
Yii2
PPTX
Сессии и авторизация
PPTX
Rest
PPTX
PHP basic
PPTX
PHP Advanced
PPTX
PHP and MySQL
PPTX
MySQL
PDF
RxJava+RxAndroid (Lecture 20 – rx java)
PDF
Работа с геоданными (Lecture 18 – geolocation)
PDF
Animations (Lecture 17 – animations)
PDF
Material Design (Lecture 15 – material design)
PDF
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
PDF
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
PDF
XML, JSON (Lecture 11 – XML, JSON)
PDF
Fragments (Lecture 09 – Fragments)
PDF
Android - 16 - QR
Гуманитарные специальности в IT-индустрии
Box model, display and position (HTML5 тема 07 - box model, display position)
Основы CSS (HTML5 тема 02 - основы CSS)
Структура HTML документа (HTML5 тема 01 - структура html документа)
Yii2
Сессии и авторизация
Rest
PHP basic
PHP Advanced
PHP and MySQL
MySQL
RxJava+RxAndroid (Lecture 20 – rx java)
Работа с геоданными (Lecture 18 – geolocation)
Animations (Lecture 17 – animations)
Material Design (Lecture 15 – material design)
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
XML, JSON (Lecture 11 – XML, JSON)
Fragments (Lecture 09 – Fragments)
Android - 16 - QR

Системы автоматизированной сборки (Lecture 05 – gradle)

  • 2. Преимущества Windows, Linux, MacOS Зависимости Автоматическое создание: JavaDoc Web-страниц проекта Отчеты Непрерывная интеграция Автоматизация сборки Автоматизированное тестирование
  • 3. Сборка проектов на Java 1976 Make 2000 2004 2009
  • 4. XML-сценарий build.xml* Императивная настройка Цели target Могут зависеть друг от друга Задачи task ant, antcall, mkdir, copy, delete, move, exec, get, jar, java, javac, javadoc, property, tstamp, style, cvs, echo Не умеет управлять зависимостями** :( * Может называться как угодно, по умолчанию ant будет искать build.xml ** Для зависимостей нужно использовать вместе с Apache Ivy
  • 5. Пример build.xml 1 <project name="MyProject" default="run" basedir="."> 2 <description>Simple example build file</description> 3 <property name="src" location="src"/> 4 <property name="build" location="build"/> 5 <property name="dist" location="dist"/> 6 <property name="class" value="com.noveogroup.Main"/> 7 8 <target name="clean"> 9 <delete dir="${build}"/> 10 <delete dir="${dist}"/> 11 </target> 12 13 <target name="init" depends="clean"> 14 <tstamp/> <!-- Create the time stamp --> 15 <mkdir dir="${build}"/> 16 <mkdir dir="${build}/META-INF"/> 17 </target> 18 19 <target name="compile" depends="init"> 20 <javac srcdir="${src}" destdir="${build}"/> 21 <manifest file="${build}/META-INF/MANIFEST.MF"> 22 <attribute name="Main-Class" value="${class}"/> 23 </manifest>
  • 6. Фреймворк Сценарий сборки pom.xml* Декларативная настройка Стандартная структура директорий Жизненный цикл:   clean, compile, test, package, install, deploy Плагины *Похож на XML
  • 8. Maven: Pom.xml 1 <project> 2 <modelVersion>4.0.0</modelVersion> 3 4 <groupId>com.noveogroup.example</groupId> 5 <artifactId>maven</artifactId> 6 <version>1.0</version> 7 8 <dependencies> 9 <dependency> 10 <groupId>com.noveogroup.example</groupId> 11 <artifactId>library</artifactId> 12 <version>3.0.1</version> 13 </dependency> 14 <dependency> 15 <groupId>junit</groupId> 16 <artifactId>junit</artifactId> 17 </dependency> 18 </dependencies> 19 </project>
  • 9. Maven: минимальная конфигурация версия конфигурационного файла координаты проекта: artifactId: имя проекта groupId: автор проекта version: версия проекта "groupId:artifcatId:version" Любую зависимость можно указать через эту тройку   Супер Pom обеспечивает конфигурацию модулей по умолчанию
  • 12. Это DSL - Domain Speci c Language (ура, не XML) Основан на Groovy Статическая и динамическая типизация Замыкания Перегрузка операций Улучшенный синтаксис Java
  • 13. Интеграция с Maven-репозиторием Стандартная структура директорий Плагины для сборки проекта, настраеваемые декларативно
  • 14. Направленный ациклический граф задач Встроенная поддержка задач Apache Ant Императивное описание задачи Gradle Daemon, Wrapper
  • 15. Gradle: плагины 1 //эмуляция жизненного цикла maven 2 apply plugin: 'java' 3 4 //запуск java-приложения 5 apply plugin: 'application' 6 7 //сборка android-приложения   8 apply plugin: 'com.android.application'
  • 19. Build Script allprojects {} настройки для всех проектов (подхватываются каждым модулем) buildscript {} настройка build-скрипта Gradle repositories {} откуда нужно качать зависимости чтобы не указывать в каждом модуле - выносим в корень dependencies {} какие зависимости нужны
  • 20. О репозиториях Maven Central jCenter Можно поднимать свои серваки с репозиториями
  • 21. ./build.gradle 1 buildscript { 2 repositories { 3 jcenter() 4 } 5 dependencies { 6 /* Плагин для сборки регистрируется как зависимость: 7 com.android.tools.build - группа 8 gradle - идентификатор 9 2.1.2 - версия */ 10 classpath 'com.android.tools.build:gradle:2.1.2' 11 } 12 } 13 14 allprojects { 15 repositories { 16 jcenter() 17 } 18 }
  • 22. ./settings.gradle 1 include ':app', ':super-library', 'one-more-module'
  • 23. ./application/build.gradle 1 apply plugin: 'com.android.application' 2 3 android { 4 compileSdkVersion 23 5 buildToolsVersion "23.0.3" 6 7 defaultConfig { 8 applicationId "com.noveogroup.example.android" 9 minSdkVersion 16 10 targetSdkVersion 23 11 versionCode 1 12 versionName "1.0" 13 } 14 } 15 16 dependencies { 17 compile fileTree(dir: 'libs', include: ['*.jar']) 18 compile 'com.android.support:support-v4:23.4.0' 19 compile 'com.android.support:appcompat-v7:23.4.0' 20 }
  • 24. ./application/build.gradle apply - применяет к проекту плагин. Плагин добавляет задачи android - содержит настройки для плагина com.android.application compileSdkVersion buildToolsVersion - утилита для сброки apk defaultCon g - параметры Android-проекта dependencies - список зависимостей модуля
  • 25. ./library/build.gradle 1 apply plugin: 'com.android.library' 2 3 android { 4 compileSdkVersion 23 5 buildToolsVersion "23.0.3" 6 7 defaultConfig { 8 applicationId "com.noveogroup.example.library" 9 minSdkVersion 16 10 targetSdkVersion 23 11 versionCode 1 12 versionName "1.0" 13 } 14 } 15 16 dependencies { 17 compile fileTree(dir: 'libs', include: ['*.jar']) 18 }
  • 26. Зависимости gradle 1 dependencies { 2 //от другого модуля 3 compile project(':mylibrary') 4 //от библиотеки из репозитория 5 compile 'com.android.support:appcompat-v7:23.4.0' 6 //от локальных библиотек 7 compile fileTree(dir: 'libs', include: ['*.jar']) 8 } * Gradle зависимости можно подключать так же как в maven: compile 'groupId : artifactId : version'
  • 28. Build Type различные способы сборки/компиляции проекта ключ для подписи минимизация и запутывание (обфускация) возможность отладки суффикс для пакета приложения
  • 29. Product Flavor различные исходники для включения в apk разные варианты одного класса разные варианты ресурсов можно изменять пакет приложения ...и версию
  • 30. ./application/build.gradle 1 android { 2 defaultConfig { ... } 3 lintOptions { ... } 4 buildTypes { 5 debug { 6 debuggable true 7 applicationIdSuffix ".debug" 8 } 9 release { 10 debuggable false 11 applicationIdSuffix ".release" 12 } 13 } 14 15 productFlavors { 16 free { 17 applicationId "com.noveogroup.android.free" 18 } 19 paid { 20 applicationId "com.noveogroup.android.paid" 21 } 22 } 23 }
  • 32. Полезные ссылки. Wiki о Gradle Официальная документация Gradle в Android