web-dev-qa-db-fra.com

Options viables pour l'exécution de NodeJS sur Android (août 2017)

Il y a un tas d'anciens SO fils traitant de l'exécution de NodeJS sur Android. La plupart d'entre elles ne sont plus viables (JXCore) et/ou fournissent des informations déroutantes, obsolètes, incomplètes ou erronées.

Par conséquent, j'ai enquêté sur ce qui semble être actuellement (à partir d'août 2017) des approches viables et trouvé trois candidats probables.

Pour décider entre eux, j'aimerais savoir:

  • les principales différences entre ces approches
  • _ {avantages et inconvénients spécifiques à chaque approche} _
  • probables obstacles, défis et lacunes
  • _ {connaissez-vous d'autres alternatives viables?} _

Les approches viables sont:

  1. Exécution du moteur javascript V8 incluant NodeJS ( J2V8 )
  2. Utilisez directement NodeJS, incorporé en tant que bibliothèque native ( node-on-Android )
  3. Combinaison de React Native avec NodeJS app-a-Service ( react-native-node )

En plus de cela, j'ai trouvé un certain nombre de ressources intéressantes:

  • NPM installe NodeJS directement à l'aide de Termux sans enracinement (pas pour les utilisateurs finaux)
  • LiquidCore - devenv micro-application mobile native (non étudié, concepts intéressants)
  • dna2oslab - possède un script de construction NodeJS pour les exécutables de noeud.
  • Building NodeJS for Android - blog avec astuces utiles pour la compilation et exemple de projet
28
Arnold Schrijver

À compter d'aujourd'hui (mars 2018), il existe une autre alternative viable non encore répertoriée dans les réponses actuelles: Node.js pour les applications mobiles

À la base, le projet fournit une bibliothèque native pour incorporer Node.js dans des applications natives Android et iOS. mais il contient aussi des plugins pour React Native et Cordova .

Les fichiers binaires prédéfinis pour la bibliothèque sont disponibles pour Android armeabi-v7a, x86, arm64-v8a, x86_64 et pour iOS 64 bits.

La bibliothèque principale est un fork de nodejs/node-chakracore , qui à son tour est un fork de nodejs/node . La version Android est à peu près standard, Node.js, construite comme une bibliothèque, avec quelques correctifs de portabilité. La version iOS utilise le moteur ChakraCore au lieu de V8 (le remplacement de V8 par ChakraCore est possible grâce aux modifications apportées à la fourchette nodejs/node-chakracore).

Les plugins React Native et Cordova facilitent l'ajout de Node.js aux applications construites à l'aide de ces infrastructures. Le code Node.js s'exécute dans un moteur et un thread distincts de ceux du framework (React Native/Cordova). La communication entre les deux mondes JavaScript est réalisée via un pont de messagerie fourni par les plugins.

Plus d'informations, y compris de la documentation, sont disponibles sur le site Web project .

(Divulgation complète: je travaille pour la société qui développe Node.js pour les applications mobiles.)

9
Alexis Campailla

J'ai reçu une réponse de @ dna2github , créateur de NodeBase (merci beaucoup!) Que je vais inclure ici (avec permission):


Salut,

Merci pour votre question. Je ferai une brève réponse à mon avis.

1. Exécution du moteur javascript V8 sur Android incluant NodeJS

avantages:

  • intégré au monde Java; peut obtenir le contrôle total du code.

les inconvénients:

  • un peu difficile à intégrer avec 3ème paquets (besoin de temps pour apprendre comment).
  • besoin d’apprendre sur les choses NodeJS et V8 ainsi que sur la documentation J2V8 (elle prend beaucoup de temps).

2. Compilez NodeJS en tant que bibliothèque native (en utilisant node-on-Android)

avantages:

  • se concentrer sur js dev et pas besoin de considérer le côté Android.
  • moins de temps d'apprentissage; similaire à Cordova phonegap ....

les inconvénients:

  • js app => apk est une boîte noire.

3. Exécution de NodeJS sur Android avec Termux

avantages:

  • flexible

les inconvénients:

  • pas de gui

4. Autres approches intéressantes

Pas familier avec LiquidCore; créer un micro-service, en particulier à partir de l'URL, consiste, selon moi, à résoudre aucun stockage disponible directement sur iOS. react-native-node la partie Android est basée sur la méthode NodeBase et utilise le binaire préconstruit. 

Pour NodeBase:

avantages:

  • semblable à 3; La différence est qu’il a sa propre interface graphique pour démarrer/arrêter l’application.
  • cela peut être un modèle pour tout; par exemple, si vous souhaitez exécuter Django, il vous suffit de remplacer node to python; Rails, Ruby ...

les inconvénients:

  • problème d'accès au processus natif; le processus ne peut pas hériter d'un accès depuis une application Android.
  • jouet heureux heureux open source pas comme une application commerciale; besoin de plus de design si vous voulez distribuer aux clients

Au début, je cours noeud en terminal; Je trouve que seulement dev peut facilement l'utiliser pour lancer js app. Mes amis et ma famille veulent aussi des outils, par exemple, créer une marque d'eau sur une photo par lot. NodeBase est créé pour qu'ils soient faciles à démarrer/arrêter l'application. Ensuite, ils ont juste besoin d'ouvrir le navigateur pour l'utiliser .. Une autre idée pour créer NodeBase est que nous pouvons créer des applications partageables qui peuvent être partagées dans le même réseau Wi-Fi. Lorsque l'hôte lance une application, celle-ci peut être visitée par des personnes proches. Ensuite, ils peuvent travailler et jouer ensemble. Par exemple, nous jouons au loup-garou et quand il n'y a pas de juge, nous allons lancer l'application loup-garou pour avoir un juge pour le premier tour. Nous pouvons également partager des fichiers entre appareils via téléchargement/téléchargement.

Pour moi, je peux construire ce que je veux de manière flexible, par exemple, je voudrais faire de mon Android un coureur d’apprentissage automatique; cela peut m'aider à exécuter des programmes d'apprentissage automatique à tout moment (avec node et python, donc dans mon autre référentiel: dna2oslab se concentre sur la construction de binaires) pour utiliser le temps d'exécution du téléphone.

Pour vous, si vous souhaitez porter votre application dans un court laps de temps, je vous en recommande 2; Si vous avez du temps et d’autres ressources, 1, c’est mieux. 3 si vous venez de faire un jouet/démo. 4 autres sont toujours possibles et faites votre imagination pour créer des œuvres.

Meilleurs voeux, Seven

2
Arnold Schrijver

Je suis l'auteur de LiquidCore . LiquidCore vous permet d'utiliser les implémentations complètes de Node.js sur Android et iOS (la prise en charge d'iOS vient de paraître dans la version 0.5.0 - septembre 2018).

LiquidCore est conçu pour permettre à plusieurs instances de Node de s'exécuter simultanément dans une application mobile native. Chaque instance a son propre système de fichiers virtuel et son support natif pour MySQL. L'objectif du projet est de permettre la création de "micro-applications" complètes à l'aide de JavaScript/WebAssembly, qui peut ensuite être intégré à d'autres applications, et je travaille toujours dans ce sens. Mais à partir d’aujourd’hui, cela fonctionne très bien si vous voulez juste un terrain de jeu Node.js.

Si vous voulez voir ce qu'il peut faire, une application de console de nœud simple est incluse pour les deux Android et iOS .

2
Eric Lange

J'ai essayé d'utiliser J2V8 dans mon application Java Android pour exécuter un script JS via node.js. Il échoue avec cette erreur:

Java.lang.UnsupportedOperationException: StartNodeJS non pris en charge.

La réponse de J2V8 était:

"Les wrappers de nœuds ne sont pas disponibles sur Android, ils le sont uniquement sur les plates-formes de bureau (Windows, Mac, Linux). C'est le comportement attendu jusqu'à ce que nous ayons des fichiers binaires de nœuds pour Android."

Pour autant que je sache, il n'y a actuellement aucun projet d'implémentation de wrappers de nœuds pour Android.

Merci,

Alex Donnini

0
user1673603