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

D4b7a3e2ed10f86e0b52498713ba2601?s=128

Ubiratan Soares

December 13, 2014
Tweet

Transcript

  1. ANDROID E GRADLE Dezembro de 2014 UBIRATAN SOARES

  2. SOBRE MIM Computeiro by ICMC/USP Engenheiro de Software Instrutor na

    Globalcode Palestrante e etc
  3. AGENDA Motivação Configurando a Build Gerenciamento de Dependências Alguns Truques

    Rápidos Migrando do Eclipse Conclusões
  4. MOTIVAÇÃO

  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
  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
  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
  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
  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
  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
  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
  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
  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'.
  14. CONFIGURANDO UM BÁSICO NA BUILD

  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
  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
  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
  18. BUILD TYPES Mecanismo para diferenciar builds por tipo Configuração pensada

    para ajudar deploys orientados a ambientes (desenvolvimento, QA, produção, etc)
  19. DEMO

  20. GERENCIANDO DEPENDÊNCIAS

  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
  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') }
  23. GRADLE, PLEASE !! http://gradleplease.appspot.com/ https://github.com/eveliotc/gradleplease-workflow Alfred Workflow

  24. None
  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)
  26. MAIS ALGUNS TRUQUES !

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

    ... }
  28. SIGNING CONFIGS signingConfigs { debug { // Hint : add

    the debug key on your VCS! storeFile file("<path_to>/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 } }
  29. MIGRANDO DO ECLIPSE

  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+++
  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
  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
  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 !
  34. OBRIGADO ! ubiratan.f.soares@gmail.com @ubiratanfsoares google.com/+UbiratanSoares ubiratansoares.github.io