SlideShare a Scribd company logo
1 of 32
Download to read offline
Системы
автоматизированной сборки
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: структура проекта
Это 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'
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

What's hot

Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияbearoff
 
ППП (Пишем Плагины Правильно)
ППП (Пишем Плагины Правильно)ППП (Пишем Плагины Правильно)
ППП (Пишем Плагины Правильно)Anatoly Yumashev
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5Technopark
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveSQALab
 
Konstantin slisenko - Spring Framework
Konstantin slisenko - Spring FrameworkKonstantin slisenko - Spring Framework
Konstantin slisenko - Spring Frameworkbeloslab
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Разработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring FrameworkРазработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring FrameworkCUSTIS
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
Особенности разработки API / Всеволод Шмыров (Яндекс)
Особенности разработки API / Всеволод Шмыров (Яндекс)Особенности разработки API / Всеволод Шмыров (Яндекс)
Особенности разработки API / Всеволод Шмыров (Яндекс)Ontico
 
End-2-End UI автоматизация в мобильном приложении. Наша реализация
End-2-End UI автоматизация в мобильном приложении. Наша реализацияEnd-2-End UI автоматизация в мобильном приложении. Наша реализация
End-2-End UI автоматизация в мобильном приложении. Наша реализацияSQALab
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектовRomero78
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиDotNetConf
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumvyacheslavmaslov
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with SeleniumSergey Shvets
 
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...tfmailru
 
(Seleniumcamp) Selenium RC for QA Engineer
(Seleniumcamp) Selenium RC for QA Engineer(Seleniumcamp) Selenium RC for QA Engineer
(Seleniumcamp) Selenium RC for QA EngineerYan Alexeenko
 

What's hot (20)

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

Viewers also liked

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

Viewers also liked (20)

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

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

#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Android - 06 - Gradle
Android - 06 - GradleAndroid - 06 - Gradle
Android - 06 - GradleNoveo
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
Непрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеНепрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеdevclub
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеYandex
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidDataArt
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleЛюбовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleGeeksLab Odessa
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
Dump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptMikhail Davydov
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projectsAsya Dudnik
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 

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

#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Android - 06 - Gradle
Android - 06 - GradleAndroid - 06 - Gradle
Android - 06 - Gradle
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Непрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеНепрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применение
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleЛюбовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Dump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScript
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projects
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Selenium Begins
Selenium BeginsSelenium Begins
Selenium Begins
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 

More from Noveo

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

More from Noveo (20)

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