Si hay algo que me saca de quicio en el desarrollo Android, son esos errores de Gradle que parecen no tener sentido. De hecho, uno de los que me topé revisando un repo de un cliente hace poco, y que era bastante común hace un tiempo, era el que te avisa que variant.getExternalNativeBuildTasks() es obsoleto y ha sido reemplazado por variant.getExternalNativeBuildProviders().
¿Qué significa esto? Básicamente, que una API interna de Gradle cambió y algún plugin que usas no se ha puesto al día. Es un clásico. ¿Por qué esto se vuelve un problema? Porque rompe tu build y, si no sabes dónde buscar, puedes perder horas intentando descifrar qué diablos pasa con tu build.gradle.
¿De dónde viene este dolor de cabeza?
Este error era muy frecuente con versiones específicas de Android Studio (como la 3.3 Canary 11) y el plugin de Gradle 3.3.0-alpha11. El principal culpable, en muchos casos, era el plugin de Fabric (io.fabric). Cuando actualizabas tu IDE o las versiones de Gradle, este plugin se quedaba atrás en la compatibilidad con las nuevas APIs de build que Android Studio estaba empezando a usar.
Mi filosofía es simple: si algo no funciona, revisa las dependencias. Y aquí no es diferente. Antes de volverte loco buscando configuraciones complejas o intentando entender la implementación de getExternalNativeBuildProviders() (que, francamente, a la mayoría no nos interesa en el día a día), la solución más directa es siempre mirar si el plugin problemático tiene una actualización.
La solución que funciona
Para este error en particular, la solución es increíblemente sencilla: actualizar el plugin de Fabric. La comunidad de Firebase/Fabric se puso las pilas y lo corrigió en versiones posteriores. Lo que tienes que hacer es asegurarte de que tu dependencia de Fabric en el bloque buildscript de tu project/build.gradle sea la correcta.
Así es como se ve la solución:
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.2' // O tu versión de Android Gradle Plugin
classpath 'io.fabric.tools:gradle:1.30.0' // ¡Esta es la clave!
}
}
Ojo que la versión 1.30.0 fue la que solucionó el problema en su momento. Siempre revisa la documentación oficial o los issue trackers para la última versión estable, pero esta debería ser tu primera parada. También se mencionó que la 1.28.1 ya traía una solución, así que cualquier versión superior a esa debería funcionar.
¿Había otras opciones? Sí, claro. Algunos sugerían bajar de versión de Android Studio, o incluso comentar la línea apply plugin: 'io.fabric' en tu módulo de aplicación (app/build.gradle) si es que no necesitabas Fabric en ese momento. Pero, seamos honestos, ninguna de esas es una solución a largo plazo que me convenza. Quitar una funcionalidad o trabajar con herramientas desactualizadas para evitar un error no es mi estilo. Prefiero ir al grano y actualizar lo que está causando el conflicto.
Mi conclusión (y frustración)
Este tipo de problemas me recuerdan que, aunque el ecosistema Android es potente, a veces la compatibilidad entre versiones de herramientas y plugins puede ser un infierno. La sobreingeniería a menudo lleva a dependencias complejas y, cuando una parte se mueve, todo lo demás puede tambalearse. Siempre busco la solución más simple que funcione y, en este caso, fue un simple cambio de versión.
Si tuviera que empezar un proyecto de cero hoy, me aseguraría de tener un muy buen manejo de mis versiones de dependencias desde el día uno y, quizás lo más importante, de leer los changelogs de los plugins críticos antes de hacer actualizaciones mayores de IDEs o Gradle. Eso me habría ahorrado unos cuantos dolores de cabeza.