Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gradle cache: desvendando segredos para a melho...

Gradle cache: desvendando segredos para a melhoria do seu build

Avatar for Haldny Santos

Haldny Santos

November 26, 2025
Tweet

More Decks by Haldny Santos

Other Decks in Technology

Transcript

  1. Quem sou eu? Haldny Santos Engenheiro Mobile (Android, iOS, KMP)

    Desenvolvimento Android +10 Anos Desenvolvimento de Software +14 Anos
  2. Agenda • O que é o Gradle ◦ Para que

    serve o Gradle ◦ Por que o Gradle é tão popular ◦ Como o Gradle funciona • Build cache no Gradle ◦ Como funciona o build cache ◦ Incremental builds ◦ Local build cache ◦ Remote build cache • Problemas comuns ◦ Fundamentos ◦ Como resolver? • Referências • Agradecimentos e Perguntas
  3. O que é o Gradle? • O Gradle é uma

    ferramenta de automação de builds utilizada para compilar, testar, empacotar e distribuir projetos de software. • Amplamente utilizado em projetos Android, Java e em diversas outras linguagens.
  4. Para que serve o Gradle? 1. Compilação de código Compila

    arquivos-fonte, como .java ou .kt, em arquivos executáveis ou bytecode. Exemplo: transformar código Java em .class.
  5. Para que serve o Gradle? 2. Gerenciamento de dependências Baixa

    e gerencia bibliotecas e frameworks necessários para o projeto. Exemplo: dependencies { implementation("com.squareup.retrofit2:retrofit:2.9.0") }
  6. Para que serve o Gradle? 3. Testes automatizados Executa testes

    unitários e de integração para garantir que o código funcione como esperado.
  7. Para que serve o Gradle? 4. Empacotamento e distribuição Gera

    arquivos finais, como .apk (Android) ou .jar/.war (Java), prontos para distribuição ou implantação.
  8. Para que serve o Gradle? 5. Automação de tarefas customizadas

    Permite criar tarefas personalizadas para realizar ações específicas, como limpeza de logs ou envio de builds para servidores.
  9. Por que o Gradle é tão popular? 1. Performance O

    Gradle é altamente otimizado, com suporte a builds incrementais e cache local/remoto, o que reduz significativamente o tempo de execução. 2. Flexibilidade Ele suporta várias linguagens (Java, Kotlin, Groovy, Scala, etc.) e plataformas, permitindo customização avançada com scripts. 3. Compatibilidade O Gradle é uma escolha padrão para projetos Android devido à sua integração nativa com o Android Studio.
  10. Como o Gradle funciona? Ele organiza o processo de construção

    do software em projetos e tarefas: • Projeto : Uma unidade maior, como um módulo ou aplicação inteira. • Tarefa : Uma ação específica dentro do projeto, como compileJava ou assembleDebug.
  11. Build cache no Gradle Conceito O Gradle Cache é um

    recurso que armazena resultados de tarefas de build para reutilização posterior, evitando o processamento redundante. Ele melhora o desempenho ao reutilizar saídas já computadas sempre que possível. Exemplo prático Imagine uma tarefa que compila arquivos Java. Se nada foi alterado desde o último build, o Gradle reaproveita os arquivos já compilados em vez de recompilá-los.
  12. Como funciona o build cache Task 1 Task 2 Task

    3 Input Input Output Output Input Output
  13. Incremental builds • Suporte desde a V1 do Gradle (2012)

    • Habilitado por padrão • Limitação de apenas guardar o último registro da tarefa • Salvo no diretório /build do projeto ou módulo • UP-TO-DATE Label - Tarefa não executada, foi usado o último output
  14. Incremental builds • Demo ◦ ./gradlew test ▪ Adicionar level

    verbose para o console org.gradle.console =verbose ▪ Mudar texto ◦ ./gradlew clean ▪ Mudar texto ▪ Voltar texto antigo
  15. Local build cache • Disponível desde a V4 do Gradle

    (2017) • Precisa ser habilitado (vem desabilitado por default) • Guarda mais de um registro de tarefa • Salvo no diretório ~/.gradle/caches/build-cache-1 (padrão) • FROM-CACHE Label - Tarefa não estava no build, mas foi utilizado do cache
  16. Local build cache Podemos utilizá-lo das seguintes formas: • Command

    line ◦ ./gradlew compileKotlin –build-cache • Atualizando o arquivo gradle.properties ◦ org.gradle.cachig=true ◦ Para desabilitar precisa usar no command line –no-build-cache
  17. Local build cache • Demo ◦ Habilitar o cache no

    gradle.properties org.gradle.caching =true ▪ ./gradlew clean ▪ ./gradlew test ▪ Mudar texto ▪ Voltar texto ◦ Debug ▪ ./gradlew :compileKotlin -i ▪ ./gradlew :compileKotlin -Dorg.gradle.caching.debug=true ▪ gradle.properties org.gradle.caching.debug =true • Build cache key for task ':test' is d741dc93b11d62e23903491c8bf4b08d ▪ ./gradlew :test –scan
  18. Local build cache • Configuração por projeto ◦ settings.gradle.kts ◦

    Podemos customizar o diretório e a quantidade de dias que o cache será guardado:
  19. Local build cache • Configuração Global (Não recomendado) ◦ ~/.gradle/init.gradle.kts

    ◦ Podemos customizar o diretório e a quantidade de dias que o cache será guardado:
  20. Local build cache • Limitações: ◦ Apenas guarda os outputs

    das builds locais ◦ O primeiro build sempre é do zero (from scratch) ◦ Rapidamente pode ser mudado em projetos grandes ▪ Onde você precisa fazer pull frequentemente ◦ CI em máquinas efêmeras não fazem proveito de cache ◦ Quando você volta de férias :D
  21. Remote build cache • Disponível desde a V4 do Gradle

    (2017) • Precisa ser configurado • É recomendado a publicação apenas na sua esteira de CI • Compartilhar cache entre o time de desenvolvimento • FROM-CACHE Label - Tarefa não estava no build, não estava no cache local, foi usado o cache remoto
  22. Remote build cache Passos para configurar um cache remoto: 1.

    Usando uma imagem docker - link 2. Develocity - link
  23. Problemas comuns • Fundamentos ◦ @Input ▪ @get:InputDirectory ▪ @get:PathSensitive(PathSensitivity.RELATIVE)

    ◦ @Output ▪ @get:OutpuDirectory ◦ @TaskAction ◦ @CacheableTask Para mais info sobre os tipos de properties: link
  24. Problemas comuns • Como resolver? ◦ Input normalization - link

    ◦ Path relativo ao invés de absoluto ◦ Escrevendo outputs em locais de inputs ◦ Sobreposição de outputs
  25. Referências • https://docs.gradle.org/current/userguide/part6_gradle_caching.html • https://docs.gradle.org/current/userguide/build_cache_use_cases.html • https://docs.gradle.org/current/userguide/build_cache_performance.html • https://proandroiddev.com/speed-up-your-build-with-gradle-remote-build-cache-2 ee9bfa4e18

    • https://docs.gradle.com/develocity/tutorials/caching/ • https://devcenter.bitrise.io/en/dependencies-and-caching/remote-build-caching/re mote-build-cache-for-gradle.html • https://docs.gradle.org/current/userguide/implementing_custom_tasks.html