Slide 1

Slide 1 text

ANDROID E GRADLE Dezembro de 2014 UBIRATAN SOARES

Slide 2

Slide 2 text

SOBRE MIM Computeiro by ICMC/USP Engenheiro de Software Instrutor na Globalcode Palestrante e etc

Slide 3

Slide 3 text

AGENDA Motivação Configurando a Build Gerenciamento de Dependências Alguns Truques Rápidos Migrando do Eclipse Conclusões

Slide 4

Slide 4 text

MOTIVAÇÃO

Slide 5

Slide 5 text

ANDROID E BUILD SYSTEMS Na edição 2013 do Google, o time ADT anunciou que um novo build system estava em desenvolvimento para substituir o padrão Eclipse / ANT Objetivo : resolver alguns dos principais problemas de produtividade dos desenvolvedores Android

Slide 6

Slide 6 text

SOBRE O GRADLE "Gradle is build automation evolved. Gradle can 
 automate the building, testing, publishing, deployment and more of software packages or other types of projects" Solução madura, inicialmente desenhada como alternativa para outros build systems do mundo Java (ANT, Maven, Ivy) Orientado à tarefas, build dirigida por scripts com DSL Groovy que representam o domínio da aplicação

Slide 7

Slide 7 text

PRINCIPAIS OBJETIVOS Permitir reúso otimizado de código e recursos da aplicação Permitir testes integrados ao processo de build Facilitar a criação de variantes da aplicação, por exemplo, para os casos com distribuição multi-APK Facilitar a extensão e configuração da build

Slide 8

Slide 8 text

ANDROID-GRADLE-PUGLIN Esforço do time ADT se concentra em amadurecer o plugin do Android para o Gradle Atualmente na versão 1.0.0 Não é possível assumir - ainda - que há garantia compatibilidade total entre projetos construídos sobre versões “distantes" do plugin http://tools.android.com/tech-docs/new-build-system/user-guide

Slide 9

Slide 9 text

[ubiratan@mac] ~/AndroidStudioProjects/ HelloGradle > tree -fL 2 . . ├── ./HelloGradle.iml ├── ./app │ ├── ./app/app.iml │ ├── ./app/build │ ├── ./app/build.gradle │ ├── ./app/libs │ ├── ./app/proguard-rules.pro │ └── ./app/src ├── ./build.gradle ├── ./gradle │ └── ./gradle/wrapper ├── ./gradle.properties ├── ./gradlew ├── ./gradlew.bat ├── ./local.properties └── ./settings.gradle Script para digirir a build do módulo específico

Slide 10

Slide 10 text

[ubiratan@mac] ~/AndroidStudioProjects/ HelloGradle > tree -fL 2 . . ├── ./HelloGradle.iml ├── ./app │ ├── ./app/app.iml │ ├── ./app/build │ ├── ./app/build.gradle │ ├── ./app/libs │ ├── ./app/proguard-rules.pro │ └── ./app/src ├── ./build.gradle ├── ./gradle │ └── ./gradle/wrapper ├── ./gradle.properties ├── ./gradlew ├── ./gradlew.bat ├── ./local.properties └── ./settings.gradle Script com definições válidas para todos os subprojetos

Slide 11

Slide 11 text

[ubiratan@mac] ~/AndroidStudioProjects/ HelloGradle > tree -fL 2 . . ├── ./HelloGradle.iml ├── ./app │ ├── ./app/app.iml │ ├── ./app/build │ ├── ./app/build.gradle │ ├── ./app/libs │ ├── ./app/proguard-rules.pro │ └── ./app/src ├── ./build.gradle ├── ./gradle │ └── ./gradle/wrapper ├── ./gradle.properties ├── ./gradlew ├── ./gradlew.bat ├── ./local.properties └── ./settings.gradle Arquivos que serão lidos pelo Build System, definem as propriedades para execução do Gradle

Slide 12

Slide 12 text

[ubiratan@mac] ~/AndroidStudioProjects/ HelloGradle > tree -fL 2 . . ├── ./HelloGradle.iml ├── ./app │ ├── ./app/app.iml │ ├── ./app/build │ ├── ./app/build.gradle │ ├── ./app/libs │ ├── ./app/proguard-rules.pro │ └── ./app/src ├── ./build.gradle ├── ./gradle │ └── ./gradle/wrapper ├── ./gradle.properties ├── ./gradlew ├── ./gradlew.bat ├── ./local.properties └── ./settings.gradle Wrapper para o sistema de build e scripts para execução de forma independentede de ambiente

Slide 13

Slide 13 text

[ubiratan@mac] ~/AndroidStudioProjects/HelloGradle > ./gradlew tasks :tasks ------------------------------------------------------------ All tasks runnable from root project ------------------------------------------------------------ Android tasks ------------- androidDependencies - Displays the Android dependencies of the project signingReport - Displays the signing info for each variant Build tasks ----------- assemble - Assembles all variants of all applications and secondary packages. assembleDebug - Assembles all Debug builds assembleDebugTest - Assembles the Test build for the Debug build assembleRelease - Assembles all Release builds build - Assembles and tests this project. buildDependents - Assembles and tests this project and all projects that depend on it. buildNeeded - Assembles and tests this project and all projects it depends on. clean - Deletes the build directory. Build Setup tasks ----------------- init - Initializes a new Gradle build. [incubating] wrapper - Generates Gradle wrapper files. [incubating] Help tasks ---------- components - Displays the components produced by root project 'HelloGradle'. dependencies - Displays all dependencies declared in root project 'HelloGradle'. dependencyInsight - Displays the insight into a specific dependency in root project 'HelloGradle'.

Slide 14

Slide 14 text

CONFIGURANDO UM BÁSICO NA BUILD

Slide 15

Slide 15 text

ANDROID MANIFEST Agora é facilmente configurável em tempo de build ! Alguns parâmetros manipuláveis : - minSDK e targetSDK - versionCode e versionName - applicationId - instrumentationTest e etc

Slide 16

Slide 16 text

BUILD VARIANTS Mecanismos para criar variantes da build Três propostas (versão 0.13.x em diante) - Build Flavors - Build Types - APK Splits

Slide 17

Slide 17 text

BUILD FLAVORS Mecanismo para diferenciar builds por "sabor" Permite criar versões diferentes da mesma aplicação - Free e Pago - ARM e x86 - Cliente X e Cliente Y - Dentre outros Possibilidade de agrupamento matricial em FlavorGroups Flavors podem conter tanto resources quanto código

Slide 18

Slide 18 text

BUILD TYPES Mecanismo para diferenciar builds por tipo Configuração pensada para ajudar deploys orientados a ambientes (desenvolvimento, QA, produção, etc)

Slide 19

Slide 19 text

DEMO

Slide 20

Slide 20 text

GERENCIANDO DEPENDÊNCIAS

Slide 21

Slide 21 text

DEPENDÊNCIAS Aspecto fundamental de um build system moderno Artefatos podem seguir diversos formatos, com destaque para artefatos do tipo Maven e seus repositórios e outros projetos tipo Gradle Declaração extremamente simplificada

Slide 22

Slide 22 text

DECLARANDO DEPENDÊNCIAS dependencies { compile 'com.android.support:support-v4:21.0.2' compile 'org.parceler:parceler-api:0.2.12' provided 'org.parceler:parceler:0.2.12' compile 'com.google.android.gms:play-services:+' compile files("libs/simple.facebook-2.1.jar") compile project(‘:UndoBar') }

Slide 23

Slide 23 text

GRADLE, PLEASE !! http://gradleplease.appspot.com/ https://github.com/eveliotc/gradleplease-workflow Alfred Workflow

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

O FORMATO AAR Formato de empacotamento reconhecido pelo plugin para projetos de bibliotecas do Android Metadados descritores estilo Maven Nem todas as dependências que precisamos no cotidiano possuem artefato AAR disponível e versionado em repositórios do Maven Plugin do Android para o Gradle NÃO SUPORTA artefatos do tipo apklib (Maven)

Slide 26

Slide 26 text

MAIS ALGUNS TRUQUES !

Slide 27

Slide 27 text

JDK7 android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } ... }

Slide 28

Slide 28 text

SIGNING CONFIGS signingConfigs { debug { // Hint : add the debug key on your VCS! storeFile file("/debug.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } … // Add your release signing config! } buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release } }

Slide 29

Slide 29 text

MIGRANDO DO ECLIPSE

Slide 30

Slide 30 text

PRELIMINARES Estrutura do projeto Eclipse é diferente da estrutura padrão reconhecida pelo Gradle / Android Studio Gerenciamento de bibliotecas "inocente" do Eclipse é problemático do ponto de vista de versionamento e repetição da build OutrosProblemas+++

Slide 31

Slide 31 text

ESTRATÉGIAS DE MIGRAÇÃO Basicamente três linhas : - Utilizar a opção do Eclipse para gerar arquivos do Gradle - Criar um novo projeto no Android Studio e migrar código, recursos e dependências manualmente - Manter o projeto Eclipse, "ensinando" o Gradle a construir a aplicação a partir dessa estrutura http://goo.gl/CXjcRz

Slide 32

Slide 32 text

ALGUNS PLUGINS MATADORES Retrolambda https://github.com/evant/gradle-retrolambda Gradle-Play-Publisher https://github.com/Triple-T/gradle-play-publisher Gradle-Versions-Publisher https://github.com/ben-manes/gradle-versions-plugin SDK-Manager-Plugin https://github.com/JakeWharton/sdk-manager-plugin

Slide 33

Slide 33 text

CONCLUSÕES Gradle é uma das melhores ferramentas adicionadas ao toolchain de quem é desenvolvedor Android! Sistema robusto e flexível, mas exige alguma curva de aprendizado para a DSL Groovy Build pode ser totalmente customizada de acordo com a necessidade Ferramentas em evolução !

Slide 34

Slide 34 text

OBRIGADO ! [email protected] @ubiratanfsoares google.com/+UbiratanSoares ubiratansoares.github.io