Cómo corregir permanentemente el error "SDK Build Tools es demasiado bajo para el proyecto" en React Native para Android

O: Cómo no tener su proyecto de Android nativo de reacción completamente en mal estado cada vez que agrega una dependencia con hilo

Una de las cosas más molestas que pueden suceder mientras se desarrolla una aplicación React Native es el temido. Se produjo un problema al configurar el error ': aplicación' del proyecto, seguido inmediatamente por una revisión más específica de SDK Build Tools (xx.xx) que es demasiado baja para el proyecto. Mensaje ': your-react-native-dependency'.

Esto puede ocurrir en una variedad de situaciones diferentes:

  • Ejecutó react-native run-android después de haber actualizado una dependencia nativa específica;
  • Ejecutó el mismo comando después de haber ejecutado simplemente yarn, que elimina internamente cada actualización manual que haya realizado a los archivos en la carpeta node_modules (además de actualizar cada dep);
  • Intentó vincular un módulo nativo sin éxito (ya sea con react-native link your-react-native-dependency o manualmente);

Probablemente ya sepa cómo solucionar esto manualmente, pero es probable que esté buscando una forma de automatizarlo, no perder minutos preciosos todos los días.

Bueno, después de este artículo, sabrás cómo tratarlo, para siempre.

Una de las cosas más molestas que pueden suceder mientras se desarrolla una aplicación React Native es el temido. Se produjo un problema al configurar el error ': aplicación' del proyecto, seguido inmediatamente por una revisión más específica de SDK Build Tools (xx.xx) que es demasiado baja para el proyecto. Mensaje ': your-react-native-dependency'.

Solución manual

Honestamente, no tengo intención de perder el tiempo investigando la solución manual, ya que hay muchos otros tutoriales en línea que lo hacen bastante bien (ejemplo), pero todos ellos, al menos, todos los que he logrado encontrar. solo ofrezca una solución temporal, que debe repetir cada vez que realice uno de los pasos anteriores, o peor aún, proponerle que cambie a una versión antigua (y lenta) de gradle, ¿qué tan útil puede ser?

Entonces, profundicemos en la solución real.

Solución automática

¿Qué es mejor que un simple script para cambiar todas las entradas compileSdkVersion y buildToolsVersion en cada dependencia de Android de nuestro proyecto que reaccione nativo? Podríamos escribirlo en JavaScript y luego conectarlo a la sección de scripts de nuestro package.json, y luego invocarlo desde npm run o yarn run.

Bueno ... Si bien eso podría ser un gran paso adelante, todavía tendríamos que analizar los archivos gradle y editarlos sin invalidar su sintaxis. No, para resolver este problema correctamente y de manera limpia, debemos aprovechar el lenguaje de scripting de la herramienta de construcción Gradle directamente.

La API de proyecto de Gradle tiene un método llamado afterEvaluate cuya descripción es la siguiente:

nulo después de Evaluar (cierre de cierre)
Agrega un cierre para ser llamado inmediatamente después de que este proyecto haya sido evaluado. El proyecto se pasa al cierre como un parámetro. Dicho oyente recibe una notificación cuando se ejecuta el archivo de compilación que pertenece a este proyecto. Un proyecto principal puede, por ejemplo, agregar un oyente a su proyecto secundario. Tal oyente puede configurar aún más esos proyectos secundarios en función del estado de los proyectos secundarios después de que se hayan ejecutado sus archivos de compilación.

Básicamente, puede considerarlo como el componente React’DidMount en esteroides.

El lugar correcto para llamar a este método es en su archivo yourReactNativeProject / android / build.gradle, dentro de la sección de subproyectos {}.

Su archivo build.gradle debería tener el siguiente aspecto:

Ahora, agreguemos la sección de subproyectos {} e invoquemos nuestro script:

¿Qué acabamos de escribir? Básicamente delegamos a Gradle la tarea de sobrescribir dos entradas particulares de la propiedad "android" del archivo build.gradle de cada dep: "compileSdkVersion" y "buildToolsVersion".

(Lo sé, todos estos archivos tienen el mismo nombre y extensión, puede ser bastante confuso para los novatos).

Debe obtener el siguiente resultado (más o menos) para cada dependencia nativa de su proyecto React Native Android.

Eso es todo, simple como el pastel. Personalmente me encanta cuando un problema tedioso se puede solucionar en un puñado de líneas de código.

También te puede interesar: React Native en XCode Beta 8.0: cómo solucionar el error de compilación inicial.

Algunas de mis bibliotecas de código abierto de las que me encantaría recibir comentarios sobre:

  • https://github.com/jkomyno/react-native-animated-hide-view
  • https://github.com/jkomyno/react-native-animated-checkbox
  • https://github.com/jkomyno/react-native-universal-picker

Si te gustó este tutorial y quieres seguir aprendiendo sobre los consejos y trucos de React Native, asegúrate de hacer clic en el botón "Seguir" a continuación y sígueme en Github en @jkomyno