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:bundleReleasePunto 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.