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

32
Системы автоматизированной сборки Android Александр Вайцеховский

Upload: noveo

Post on 13-Apr-2017

76 views

Category:

Education


4 download

TRANSCRIPT

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

Системыавтоматизированной сборки

Android

Александр Вайцеховский

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

Преимущества

Windows, Linux, MacOS

Зависимости

Автоматическое создание:

JavaDocWeb-страниц проектаОтчеты

Непрерывная интеграция

Автоматизация сборкиАвтоматизированное тестирование

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

Сборка проектов на Java

1976 Make

2000

2004

2009

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

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

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

Пример 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>

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

ФреймворкСценарий сборки pom.xml*Декларативная настройкаСтандартная структура директорийЖизненный цикл:   clean, compile, test, package, install, deployПлагины

*Похож на XML

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

Maven-репозиторийУправление зависимостями

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

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>

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

Maven: минимальная конфигурация

версия конфигурационного файлакоординаты проекта:

artifactId: имя проектаgroupId: автор проектаversion: версия проекта

"groupId:artifcatId:version"

Любую зависимость можно указать через эту тройку  Супер Pom обеспечивает конфигурацию модулей по умолчанию

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

Maven: структура проекта

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

Это DSL - Domain Speci�c Language (ура, не XML)Основан на Groovy

Статическая и динамическая типизацияЗамыканияПерегрузка операцийУлучшенный синтаксис Java

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

Интеграция с Maven-репозиториемСтандартная структура директорийПлагины для сборки проекта, настраеваемые декларативно

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

Направленный ациклический граф задачВстроенная поддержка задач Apache AntИмперативное описание задачиGradle Daemon, Wrapper

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

Gradle: плагины1 //эмуляция жизненного цикла maven 2 apply plugin: 'java' 3 4 //запуск java-приложения 5 apply plugin: 'application' 6 7 //сборка android-приложения   8 apply plugin: 'com.android.application'

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

Gradle: Структура директорий

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

Gradle: Структура директорий

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

Build Script

allprojects {}настройки для всех проектов (подхватываются каждым модулем)

buildscript {}настройка build-скрипта Gradle

repositories {}откуда нужно качать зависимостичтобы не указывать в каждом модуле - выносим в корень

dependencies {}какие зависимости нужны

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

О репозиториях

Maven CentraljCenter

Можно поднимать свои серваки с репозиториями

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

./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 }

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

./settings.gradle1 include ':app', ':super-library', 'one-more-module'

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

./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 }

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

./application/build.gradle

apply - применяет к проекту плагин. Плагин добавляет задачиandroid - содержит настройки для плагина com.android.application

compileSdkVersionbuildToolsVersion - утилита для сброки apkdefaultCon�g - параметры Android-проекта

dependencies - список зависимостей модуля

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

./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 }

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

Зависимости gradle1 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'

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

Варианты сборки

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

Build Type

различные способы сборки/компиляции проекта

ключ для подписиминимизация и запутывание (обфускация)возможность отладкисуффикс для пакета приложения

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

Product Flavor

различные исходники для включения в apk

разные варианты одного классаразные варианты ресурсовможно изменять пакет приложения...и версию

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

./application/build.gradle 1 android { 2 defaultConfig { ... } 3 lintOptions { ... } 4 buildTypes { 5 debug { 6 debuggable true 7 applicationIdSuffix ".debug" 8 } 9 release { 10 debuggable false11 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 }

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

Build Variants

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

Полезные ссылки.

Wiki о GradleОфициальная документацияGradle в Android