Системы автоматизированной сборки (lecture 05 – gradle)
Post on 13-Apr-2017
88 Views
Preview:
TRANSCRIPT
Системыавтоматизированной сборки
Android
Александр Вайцеховский
Преимущества
Windows, Linux, MacOS
Зависимости
Автоматическое создание:
JavaDocWeb-страниц проектаОтчеты
Непрерывная интеграция
Автоматизация сборкиАвтоматизированное тестирование
Сборка проектов на 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 CentraljCenter
Можно поднимать свои серваки с репозиториями
./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.gradle1 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
compileSdkVersionbuildToolsVersion - утилита для сброки apkdefaultCon�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 }
Зависимости 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'
Варианты сборки
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 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 }
Build Variants
Полезные ссылки.
Wiki о GradleОфициальная документацияGradle в Android
top related