Blog winzana

Hermès, un moteur javascript optimisé pour faire tourner react-native sur Android

Rédigé par Jérémy | Nov 15, 2022 2:16:22 PM

 

Contexte

 

Dans cet article, on va parler d’Hermès. Hermès c’est un moteur javascript optimisé pour faire tourner React-Native sur Android. 

 

 Cela permet entre autre

<01>

De diviser le temps de démarrage de l'app

 

<02>

La vitesse globale de l’app

 

<03>

Une meilleure utilisation de la mémoire

 

<04>

A better native feeling !

 

 Activer hermès semble être une fioriture au premier abord, jusqu’à ce que l’on décide de l’activer. Dès lors l’activation d’Hermès s’en suit une série de problème jusque là franchement pas attendus … écrans blancs, librairies non chargées, problèmes de compilation.

 

Mais voilà, Hermès promet des performances de dingues alors tu te lance avec ce tuto : https://reactnative.dev/docs/hermes Dans le fichier app/build.gradle tu passes `enableHermes` à true…

 

Super, Hermès est activé ! Alors voilà tu décide de tester, de voir si c’est aussi incroyable que ce qu’en dit tout le monde. Et là, la première erreur !
 
Ca ne compile pas :
> A problem occurred starting process : ‘command « ../../node_modules/hermesvm/%OS-BIN%/hermes »
 
Ok, pas de problème ça doit être une broutille, je vais “google that”, et ce sera fixé dans une seconde.
 
Alors tu essayes d’ajouter une commande Hermès, au cas ou il savait pas quoi faire :
hermesCommand: « ../../node_modules/hermesvm/%OS-BIN%/hermes »,
 
Tu recompiles, ça marche toujours pas… Alors tu installes Hermès comme dépendances node_modules directement, mais là BAM, un nouvelle erreur, la librairie n’est pas chargée.
 
java.lang.UnsatisfiedLinkError: couldn’t find DSO to load: libhermes.so
 
Ok, pas de problème tu va “googler” ça et trouver la réponse. Et la ce que trouve c’est que le chemin de la commande Hermès à changé !
 
Alors tu remplace “hermes-vm” par “hermes-engine” :
 
Et là tu test en debug, super ça marche, tu commences même à voir que ton app est bien plus rapide !
 
Comme t’es un mec bien, t’as configuré plusieurs variantes pour tester l’app en preprod. Activer Hermès c’est une bonne occasion de tester en preprod même s’il y a que ça qui a changé.
 
Et là au démarrage de l’app, FATAL ERROR :
java.lang.UnsatisfiedLinkError: couldn’t find DSO to load: libhermes.so
En fait Hermès ne supporte pas les variantes de build…
 
MAIS !
Il suffit de lui spécifier l’implémentation pour fonctionner.
Avec la syntaxe suivante :
<buildVariant>Implementation files(hermesPath + “hermes-release.aar”)
 
Ca donnerait quelque chose comme ça :
 
Et la ça marche vraiment !
 
Quelque chose de vraiment cool est arrivé avec la 0.62.2 : Flipper !
 
Tu peux débugger ton app directement depuis flipper, les debugger;, les consoles, tout apparaîtra dans cette console. ( Nécessite la configuration flipper bien-sûr )

🥳