
Convention Plugins no Android: Otimizando Build Scripts com Plugins Personalizados
Convention Plugins no Android: Otimizando Build Scripts com Plugins Personalizados
No desenvolvimento Android, a complexidade dos scripts de build cresce rapidamente conforme o projeto escala. Manter configurações consistentes e evitar duplicações entre módulos é um desafio comum. É neste cenário que os convention plugins — plugins personalizados para Gradle — surgem como aliados poderosos. Eles promovem organização, reaproveitamento e padronização no processo de build.
Aqui, você vai aprender o que são os convention plugins, por que são importantes para projetos Android modernos, e como aplicá-los de forma prática para melhorar a manutenção do seu código de build.
O que são Convention Plugins?
Convention plugins são plugins Gradle criados pela equipe de desenvolvimento do projeto para encapsular convenções e configurações padrão que se repetem em múltiplos módulos. Ao invés de duplicar configurações complexas em cada arquivo build.gradle.kts
(Kotlin DSL) ou build.gradle
, essas regras são centralizadas em um plugin customizado.
Diferente dos plugins externos, que são pacotes típicos fornecidos pela comunidade ou Google (ex: com.android.application
, org.jetbrains.kotlin.jvm
), os convention plugins são controlados pelo time e integram diretamente as diretrizes internas do projeto.
Características principais:
- Centralizam configurações comuns (ex: versões, regras de lint, scripts de teste)
- Simplificam arquivos de build, aplicando um único plugin que traz tudo pré-configurado
- Permitem evoluções e padronizações sem precisar alterar dezenas de módulos individualmente
Por que importa para devs Android?
Com a popularização do Kotlin DSL e a escalabilidade dos projetos Android (multimódulos, multiplataforma etc.), o build system passou a demandar:
- Manutenção mais fácil: Mudanças em uma convenção precisam ocorrer em um só lugar
- Consistência: Garantir que todos os módulos usem as mesmas versões, parâmetros e plugins auxiliares
- Performance: Gradle se beneficia da configuração mais limpa e compartilhada para otimizar builds
Projetos grandes, com múltiplos times, encontram nesses plugins um mecanismo para desacoplar lógica de build do código da aplicação, além de tornar onboarding e manutenção mais ágil.
Como aplicar Convention Plugins no mundo real
Estrutura típica
- Criar um módulo Gradle do tipo
java-gradle-plugin
(normalmente chamadobuild-logic
ou similar) - No módulo, desenvolver os plugins em Kotlin, aplicando as configurações comuns como
android
,kotlin
, dependências, lint etc. - Publicar localmente para serem consumidos pelos demais módulos do projeto
Exemplo simplificado
No seu settings.gradle.kts
:
include(":app", ":build-logic")
No módulo build-logic/build.gradle.kts
:
plugins {
`kotlin-dsl`
`java-gradle-plugin`
}
gradlePlugin {
plugins {
create("androidConvention") {
id = "com.example.android.convention"
implementationClass = "com.example.buildlogic.AndroidConventionPlugin"
}
}
}
dependencies {
implementation("com.android.tools.build:gradle:8.1.0")
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0")
}
Implementação do plugin (build-logic/src/main/kotlin/.../AndroidConventionPlugin.kt
):
package com.example.buildlogic
import com.android.build.gradle.ApplicationExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
class AndroidConventionPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.plugins.apply("com.android.application")
project.plugins.apply("org.jetbrains.kotlin.android")
project.extensions.configure<ApplicationExtension> {
compileSdkVersion(34)
defaultConfig {
minSdk = 21
targetSdk = 34
versionCode = 1
versionName = "1.0"
}
buildTypes {
getByName("release") {
isMinifyEnabled = true
}
}
}
}
}
Agora, no app/build.gradle.kts
:
plugins {
id("com.example.android.convention")
}
Com isso, o módulo app
herda toda configuração padrão para Android e Kotlin Android, mantendo o build.gradle.kts
limpo e fácil de manter.
Boas práticas e armadilhas comuns
Boas práticas
- Isolar configurações comuns: versão do SDK, dependências de teste, opções de compilação
- Manter plugins pequenos e focados: prefira criar múltiplos plugins para responsabilidades diferentes (ex: um para configuração Android, outro para Compose, outro para multiplataforma)
- Versionar o módulo de plugins junto com o projeto para evitar desalinhamentos
- Documentar os plugins e seu uso, para facilitar adoção pelos times
Armadilhas comuns
- Excesso de magia: plugins muito complexos tornam difícil entender o build do projeto
- Dependências cíclicas: cuidado ao estruturar módulos para que o plugin não dependa do módulo que o usa
- Não usar Kotlin DSL: preferir Kotlin para maior segurança de tipo e autocomplete no código Gradle
- Ignorar performance do Gradle: certifique-se de que o plugin não crie configurações lentas ou pesadas sem necessidade
Links oficiais e referências
- Criando plugins Gradle com Kotlin DSL
- Configurações da build do Android com Gradle Kotlin DSL
- Boas práticas para builds Android
- Gradle Plugin Development Guide
Conclusão
Os convention plugins modernizam a forma como configuramos builds Android, trazendo organização, padronização e facilidade de manutenção para projetos cada vez maiores e mais complexos. Adotá-los facilita a vida do time e torna o processo de build mais sustentável a longo prazo.
Se você ainda não usa convenção via plugins, experimente criar uma configuração mínima para seus módulos e veja a diferença na produtividade e na clareza do seu projeto Android.
Desafie-se a aplicar essa técnica no seu próximo projeto e compartilhe suas experiências!
Happy coding! 🚀