Comment corriger définitivement l'erreur «Les outils de compilation du SDK sont trop bas pour le projet» dans React Native pour Android

Ou: comment ne pas gâcher complètement votre projet Android réactif-natif chaque fois que vous ajoutez une dépendance avec fil

Un des problèmes les plus gênants pouvant survenir lors du développement d'une application React Native est le problème redouté. Un problème est survenu lors de la configuration du projet ': app', immédiatement suivi d'une erreur plus spécifique. La révision de SDK Build Tools (xx.xx) est trop faible pour le projet. Message ': votre-réaction-native-dépendance'.

Cela peut se produire dans différentes situations:

  • Vous avez exécuté réact-native run-android après avoir mis à jour une dépendance native spécifique;
  • Vous avez exécuté la même commande après avoir simplement lancé yarn, ce qui supprime en interne toutes les mises à jour manuelles effectuées sur les fichiers du dossier node_modules (en plus de la mise à jour effective de chaque dep);
  • Vous avez tenté de lier un module natif sans succès (soit avec le lien réactif natif your-react-native-dependency, soit manuellement);

Vous savez probablement déjà comment résoudre ce problème manuellement, mais il est probable que vous cherchiez un moyen de l’automatiser, sans perdre de précieuses minutes chaque jour.

Eh bien, après cet article, vous saurez comment vous en occuper, pour de bon.

Un des problèmes les plus gênants pouvant survenir lors du développement d'une application React Native est le problème redouté. Un problème est survenu lors de la configuration du projet ': app', immédiatement suivi d'une erreur plus spécifique. La révision de SDK Build Tools (xx.xx) est trop faible pour le projet. Message ': votre-réaction-native-dépendance'.

Solution manuelle

Honnêtement, je n'ai aucune intention de perdre votre temps à creuser dans la solution manuelle, car de nombreux autres tutoriels en ligne le font assez bien (exemple), mais tous - au moins, tous ceux que j'ai réussi à trouver - n'offrent qu'une solution temporaire, que vous devez répéter chaque fois que vous effectuez l'une des étapes ci-dessus, ou même pire, vous proposons de rétrograder à une version ancienne (et lente) de gradle, quelle peut en être l'utilité?

Alors, explorons la vraie solution.

Solution automatique

Quoi de mieux qu’un simple script pour modifier toutes les entrées compileSdkVersion et buildToolsVersion dans chaque dépendance Android de notre projet avec react-native? Nous pourrions l'écrire en JavaScript, puis le relier à la section scripts de notre package.json, puis l'invoquer à partir de npm run ou de yarn.

Eh bien… Bien que cela puisse certainement être un énorme pas en avant, nous devons encore analyser les fichiers de gradation et les éditer sans invalider leur code. Nope, pour résoudre ce problème correctement et proprement, nous devons exploiter directement le langage de script de l'outil de génération de Gradle.

L’API de projet de Gradle a une méthode appelée afterEvaluate dont la description est la suivante:

null afterEvaluate (fermeture de la fermeture)
Ajoute une fermeture à appeler immédiatement après l'évaluation de ce projet. Le projet est passé à la fermeture en tant que paramètre. Un tel écouteur est averti lorsque le fichier de construction appartenant à ce projet a été exécuté. Un projet parent peut par exemple ajouter un tel écouteur à son projet enfant. Un tel écouteur peut configurer davantage ces projets enfants en fonction de l'état des projets enfants une fois leurs fichiers de génération exécutés.

En gros, vous pouvez le considérer comme un composant de React sur les stéroïdes.

Le bon endroit pour appeler cette méthode est dans votre fichier yourReactNativeProject / android / build.gradle, dans la section subprojects {}.

Votre fichier build.gradle devrait ressembler à ceci:

Ajoutons maintenant la section sous-projets {} et appelons notre script:

Qu'est-ce qu'on vient d'écrire? Nous avons essentiellement délégué à Gradle la tâche de remplacer deux entrées particulières de la propriété ‘android’ du fichier build.gradle de chaque dep: ‘compileSdkVersion’ et ‘buildToolsVersion’.

(Je sais, tous ces fichiers ont le même nom et la même extension, cela peut être assez déroutant pour les débutants).

Vous devez obtenir le résultat suivant (plus ou moins) pour chaque dépendance native de votre projet Android React Native.

C’est tout, simple comme bonjour. Personnellement, j'aime beaucoup lorsqu'un problème fastidieux peut être résolu en quelques lignes de code.

React Native sur XCode Beta 8.0: comment corriger l'erreur de construction initiale.

Certaines de mes bibliothèques open source sur lesquelles j'aimerais avoir des retours:

  • 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 vous avez aimé ce tutoriel et que vous souhaitez continuer à vous familiariser avec les astuces de React Native, assurez-vous de cliquer sur le bouton "Suivre" ci-dessous et suivez-moi sur Github à @jkomyno.