$30 off During Our Annual Pro Sale. View Details »

Android e Gradle

Android e Gradle

Slides de apoio para uma introdução ao novo build system do Android, que atingiu um nível de maturidade importante no final de 2014 com a oficialização do Android Studio como IDE oficial para o desenvolvimento para Android.

Essa apresentação foi realizada em três oportunidades

- GDG Android Meetup em Outubro de 2014
- DevFest SP em Novembro de 2014
- NextLevelApps em Dezembro de 2014

Ubiratan Soares
PRO

December 13, 2014
Tweet

More Decks by Ubiratan Soares

Other Decks in Programming

Transcript

  1. ANDROID
    E GRADLE
    Dezembro de 2014
    UBIRATAN SOARES

    View Slide

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

    View Slide

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

    View Slide

  4. MOTIVAÇÃO

    View Slide

  5. 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

    View Slide

  6. 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

    View Slide

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

    View Slide

  8. 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

    View Slide

  9. [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

    View Slide

  10. [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

    View Slide

  11. [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

    View Slide

  12. [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

    View Slide

  13. [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'.

    View Slide

  14. CONFIGURANDO
    UM BÁSICO NA
    BUILD

    View Slide

  15. 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

    View Slide

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

    View Slide

  17. 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

    View Slide

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

    View Slide

  19. DEMO

    View Slide

  20. GERENCIANDO
    DEPENDÊNCIAS

    View Slide

  21. 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

    View Slide

  22. 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')
    }

    View Slide

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

    View Slide

  24. View Slide

  25. 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)

    View Slide

  26. MAIS
    ALGUNS
    TRUQUES !

    View Slide

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

    View Slide

  28. 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 }
    }

    View Slide

  29. MIGRANDO
    DO ECLIPSE

    View Slide

  30. 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+++

    View Slide

  31. 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

    View Slide

  32. 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

    View Slide

  33. 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 !

    View Slide

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

    View Slide