$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

December 13, 2014
Tweet

More Decks by Ubiratan Soares

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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
  4. 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
  5. [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
  6. [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
  7. [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
  8. [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
  9. [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'.
  10. 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
  11. BUILD VARIANTS Mecanismos para criar variantes da build Três propostas

    (versão 0.13.x em diante) - Build Flavors - Build Types - APK Splits
  12. 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
  13. BUILD TYPES Mecanismo para diferenciar builds por tipo Configuração pensada

    para ajudar deploys orientados a ambientes (desenvolvimento, QA, produção, etc)
  14. 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
  15. 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') }
  16. 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)
  17. 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 } }
  18. 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+++
  19. 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
  20. 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 !