Qué es un plugin

Un plugin extiende Gradle. Le agrega DSL, tasks, convenciones y comportamiento. En Android, los más frecuentes son com.android.application, com.android.library, Kotlin Android, Hilt, KSP o Firebase.

plugins {
    id("com.android.library")
    id("org.jetbrains.kotlin.android")
    id("com.google.devtools.ksp")
}

Aplicar un plugin no es “importar una dependencia más”. Es alterar el modelo de build del módulo.

Tasks

Gradle trabaja con tasks. Una task puede compilar, ejecutar tests, empaquetar, limpiar o generar código. Las tasks tienen dependencias entre sí, por eso cuando ejecutás una, Gradle arma un grafo y decide qué necesita correr realmente.

./gradlew :app:assembleDebug
./gradlew :app:testDebugUnitTest
./gradlew :app:bundleRelease

Punto claveNo conviene pensar “Gradle compila”. Conviene pensar “Gradle resuelve un grafo de tareas y ejecuta solo lo necesario”. Eso explica por qué a veces un build recompila media app y otras veces no.

Fases del build

De forma simplificada hay tres momentos: inicialización, configuración y ejecución. En inicialización descubre el proyecto; en configuración evalúa scripts y crea el modelo; en ejecución corre las tasks pedidas.

Muchas optimizaciones consisten en reducir trabajo durante configuración. Si cada módulo hace demasiado en esa fase, abrir el proyecto y lanzar builds se vuelve más lento.

Variantes Android

Android agrega la idea de variant. Una variante combina build type y, si existen, product flavors. Eso explica tasks como assembleDebug, assembleRelease o testStagingDebugUnitTest.

AtenciónCuando el proyecto tiene muchos flavors y muchos módulos, la cantidad de variantes crece rápido. Esa explosión de combinaciones puede empeorar tiempos de configuración y complejidad del build.

Cierre

Plugins, tasks y variantes forman el vocabulario base de Gradle en Android. En la siguiente lección pasamos a una de las decisiones más importantes del día a día: cómo declarar dependencias correctamente.