l'android natif de react n'a pas chargé js bundle

j'essaie de lancer un projet Awesomeprojet sur mon Nexus5 (android 5.1.1).

je suis en mesure de construire le projet et l'installer sur l'appareil. Mais quand je l'exécute, j'ai un écran rouge disant

impossible de télécharger js bundle. Vous avez oublié de démarrer le serveur de développement ou de connecter votre appareil?

dans react native iOS, je peux choisir de charger jsbundle hors ligne. Comment puis-je faire la même chose pour Android? (Ou au moins, où puis-je configurer l'adresse du serveur?)

mise à Jour

pour exécuter avec le serveur local, exécutez les commandes suivantes sous votre répertoire racine de projet react-native

  1. réagir indigènes démarrer > /dev/null 2>&1 &
  2. bad inverse tcp:8081 tcp:8081

s'il vous plaît jeter un oeil à la réponse de dsissitka pour plus de détails.

Pour exécuter sans serveur, regroupez le fichier jsfile dans l'apk en exécutant:

  1. créer un dossier actif sous android/app/src/main
  2. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

s'il vous plaît jetez un oeil à la réponse de kzzzf pour plus de détails.

182
demandé sur Matthew 2015-09-14 22:25:17

21 réponses

pour regrouper le fichier JS dans votre apk tout en ayant votre serveur en cours d'exécution ( react-native start ) télécharger bundle dans le répertoire des actifs de votre application:

curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

avec la prochaine version (0.12), nous allons corriger la commande react-native bundle pour travailler avec les projets android comme prévu.

100
répondu kzzzf 2015-09-17 01:02:38

ce qui suit l'a fait travailler pour moi sur Ubuntu 14.04:

cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081

Update : Voir

mise à jour 2 : @scgough nous avons eu cette erreur parce que React Native (RN) était incapable de récupérer JavaScript à partir du dev serveur tournant sur nos postes de travail. Vous pouvez voir pourquoi cela se produit ici:

https://github.com/facebook/react-native/blob/42eb5464fd8a65ed84b799de5d4dc225349449be/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java#L116-L137

si votre application RN détecte que vous utilisez Genymotion ou l'émulateur il essaie de récupérer le JavaScript à partir de GENYMOTION_LOCALHOST (10.0.3.2) ou EMULATOR_LOCALHOST (10.0.2.2). Sinon, il présume que vous utilisez un périphérique et il essaie de récupérer le JavaScript à partir de DEVICE_LOCALHOST (localhost). Le problème est que le serveur dev tourne sur le serveur local de votre poste de travail, pas sur celui de l'appareil, donc pour le faire fonctionner, vous devez soit:

86
répondu dsissitka 2015-09-15 12:06:41

Ok, je pense que j'ai compris quel est le problème ici. C'était en rapport avec la version de watchman que je courais.

Dans un nouveau shell, exécutez brew update puis: brew unlink watchman puis: brew install watchman

maintenant, vous pouvez exécuter react-native start à partir de votre dossier de projet

je laisse ce shell ouvert, crée une nouvelle fenêtre shell et exécute react-native run-android à partir de mon dossier de projet. Tout est bon avec le monde.

ps. J'étais à l'origine sur la version 3.2 de watchman. Cette mise à niveau-moi à 3.7.

pps. Je suis novice dans ce domaine, ce qui n'est peut-être pas la solution la plus rapide, mais ça a fonctionné pour moi.

* MORE INFO FOR RUNNING / DEBUGGING ON A DEVICE *

vous pourriez constater que si vous déployez votre application sur votre appareil Android plutôt qu'un émulateur vous obtenez un écran rouge de la mort avec une erreur disant Unable to load JS Bundle . Vous devez définir le débogage du serveur pour votre appareil à votre ordinateur exécutant réagir...soit son nom, soit son adresse IP.

  1. Appuyez sur le dispositif de Menu bouton
  2. sélectionner Dev Settings
  3. sélectionner Debug server host for device
  4. tapez dans L'IP de votre machine et rechargez JS plus le port react par exemple 192.168.1.10:8081

Plus de renseignements: http://facebook.github.io/react-native/docs/running-on-device-android.html

38
répondu scgough 2016-02-16 13:37:17

à partir de votre répertoire de projets, Lancez

react-native start

sortie:

$ react-native start
 ┌────────────────────────────────────────────────────────────────────────────┐ 
 │  Running packager on port 8081.                                            │ 
 │                                                                            │ 
 │  Keep this packager running while developing on any JS projects. Feel      │ 
 │  free to close this tab and run your own packager instance if you          │ 
 │  prefer.                                                                   │ 
 │                                                                            │ 
 │  https://github.com/facebook/react-native                                  │ 
 │                                                                            │ 
 └────────────────────────────────────────────────────────────────────────────┘ 
Looking for JS files in
   /home/user/AwesomeProject 


React packager ready.

[11:30:10 PM] <START> Building Dependency Graph
[11:30:10 PM] <START> Crawling File System
[11:30:16 PM] <END>   Crawling File System (5869ms)
[11:30:16 PM] <START> Building in-memory fs for JavaScript
[11:30:17 PM] <END>   Building in-memory fs for JavaScript (852ms)
[11:30:17 PM] <START> Building in-memory fs for Assets
[11:30:17 PM] <END>   Building in-memory fs for Assets (838ms)
[11:30:17 PM] <START> Building Haste Map
[11:30:18 PM] <START> Building (deprecated) Asset Map
[11:30:18 PM] <END>   Building (deprecated) Asset Map (220ms)
[11:30:18 PM] <END>   Building Haste Map (759ms)
[11:30:18 PM] <END>   Building Dependency Graph (8319ms)
16
répondu Pēteris Caune 2015-09-14 20:32:10

une solution facile qui fonctionne pour moi avec Ubuntu 14.04.

react-native run-android

l'émulateur (déjà lancé) reviendra: impossible de télécharger js Bundle; redémarrez le serveur JS:

react-native start

Hit recharger JS sur l'émulateur. Il a travaillé pour moi. J'espère que ça aidera

13
répondu Raphael_b 2015-12-02 21:40:10

Dans l'app sur android, j'ai ouvert le Menu (Commande + M dans Genymotion) -> Dev Paramètres -> Debug du serveur hôte et le port pour périphérique

valeur fixée à: localhost: 8081

ça a marché pour moi.

7
répondu Daniel Masarin 2015-11-08 15:37:21

après avoir essayé une combinaison des réponses ici, c'est ce qui fonctionne pour moi.

J'utilise Genymotion comme émulateur.

1 émulateur de démarrage de Genymotion.

2 D'un terminal

cd AwesomeProject
react-native run-android # it loads in genymotion and fails with bundle error
react-native start > /dev/null 2>&1 & # from dsissitka
adb reverse tcp:8081 tcp:8081 # from dsissitka

3 recharger de l'émulateur.

il charge!

je peux maintenant commencer à développer.

6
répondu ooolala 2015-09-24 04:15:40

supprimez L'application de votre téléphone! J'ai essayé plusieurs étapes, mais que fait-il finalement.

  1. si vous avez essayé d'exécuter votre application avant mais a échoué, supprimer il à partir de votre appareil android.
  2. Exécuter $ react-native run-android
  3. ouvrez le Menu React Rage Shake depuis votre application sur votre appareil android, Allez à Dev Settings puis à Debug server host & port for device . Entrez votre adresse IP (IP de votre ordinateur)) et l'hôte 8081 , p.ex. 192.168.50.35:8081 . Sur un mac vous pouvez trouver L'IP de votre ordinateur à System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address .
  4. Ouvrez à nouveau le menu Rage Shake et cliquez sur Reload JS .
4
répondu Andru 2016-01-14 17:10:03

apparemment ADB reverse a été introduit dans Android 5.0

obtenir "erreur: fermé" deux fois sur "adb reverse"

je suppose que nous devons aller de l'avant avec kzzzf la réponse de

2
répondu Nishanth Shankar 2017-05-23 11:33:26

Je n'ai pas assez de réputation pour commenter, mais cela se réfère à la réponse de dsissitka. Il fonctionne également sur Windows 10.

pour réitérer, les commandes sont:

cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081
2
répondu Sean Saito 2015-11-03 17:33:06

J'obtenais cela sur Linux après avoir arrêté le processus react-native run-android . Il semble que le serveur de noeud est toujours en cours d'exécution de sorte que la prochaine fois que vous l'exécutez, il ne fonctionnera pas correctement et votre application ne peut pas se connecter.

le correctif ici est de tuer le processus de noeud qui tourne dans un Xterm que vous pouvez tuer par ctrl-c dans cette fenêtre (plus facile) ou vous pouvez le trouver en utilisant lsof -n -i4TCP:8081 puis kill -9 PID .

puis react-native run-android encore une fois.

1
répondu Travis Reeder 2015-12-13 20:27:07

Vérifiez votre connexion wifi.

une Autre possibilité pourrait être que vous êtes pas connecté au wifi, connecté au mauvais réseau ou l'adresse ip est incorrecte dans votre dev paramètres. Pour une raison inconnue, mon android s'est déconnecté du wifi et j'ai commencé à avoir cette erreur, sans le savoir.

1
répondu Kelsey 2015-12-30 18:49:59

tournant sur le dispositif

j'ai trouvé une autre réponse.

  • bad inverse: ne fonctionne que sur Android 5.0+ API (21).
  • un autre: ouvrez le menu Developer en secouant l'appareil, allez à paramètres Dev , allez à Debug serveur hôte pour périphérique , tapez dans votre adresse IP de la machine et le port du local serveur de dev
1
répondu Mike Nguyen 2016-05-23 06:12:05

une mise à jour

maintenant sous windows pas besoin de lancer react-native start. L'emballeur sera exécuté automatiquement.

1
répondu Jagadish Upadhyay 2016-07-10 16:36:52

Une chose importante à vérifier que personne n'a évoqué jusqu'à présent: Vérifiez votre pare-feu local, assurez-vous qu'il est éteint .

Voir ma réponse ici: https://stackoverflow.com/a/41400708/1459275

1
répondu niltoid 2017-05-23 12:26:43

Voici les étapes simples pour exécuter votre application sur android (version):

1. Allez à la racine de votre application.

2. L'exécution de cette commande.

réagissent-native bundle --plate-forme android-dev faux-entrée-fichier index.Android.js --faisceau de sortie android/app/src/main/assets / index.Android.bundle --actifs-dest android/app/src/main / res

Tous vos fichiers sont copiés.

3. Créer un APK signé.

Ouvrir android studio.

Build > Générer Signé APK > [Remplir les détails requis, de frappe doit être généré avant cette étape]

votre APK doit être générée sans aucune erreur. Installez sur votre appareil et cela devrait fonctionner sans aucun problème.

vous pouvez connectez également votre appareil et appuyez directement sur Run icon sur android studio pour tester.


Génération De Frappe:

  1. Goto C:\Program fichiers\Java\jdkx.x.x_x\bin

  2. Exécuter

keytool-genkey-v-keystore d:\my_private_key.fichier de clés -alias ma-clé-alias -keyalg RSA -keysize 2048 -validité 10000

il vous demandera probablement de remplir quelques détails. Faites - le et vous avez votre fichier de frappe( my_private_key.keystore ) qui peut être utilisé pour signer votre apk.

1
répondu Edison D'souza 2017-06-16 06:08:38

j'utilise Ubuntu et Android uniquement, et je n'ai pas pu le faire fonctionner. J'ai trouvé une solution très simple qui est de mettre à jour votre paquet.fichier json, modifier ces lignes:

"scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },

à

"scripts": {
    "start": "adb reverse tcp:8081 tcp:8081 && node node_modules/react-native/local-cli/cli.js start"
  },

et ensuite vous exécutez le serveur en tapant

npm run start

cela garantit que l'appareil android recherche le serveur de noeud sur votre ordinateur au lieu de localement sur le téléphone.

0
répondu IonicBurger 2016-04-23 11:30:35

Running npm démarrer de réagir-annuaire natif fonctionné pour moi.

0
répondu Sergey Onishchenko 2016-06-14 06:55:13

la question initiale concernait le rechargement de l'application dans un dispositif physique.

lorsque vous déboguez l'application dans un périphérique physique (c'est-à-dire via adb), vous pouvez recharger le paquet JS en cliquant sur le bouton "action" en haut à gauche de votre périphérique. Cela ouvrira le menu option (Recharger, déboguer JS à distance...).

Espérons que cette aide.

0
répondu GuGuss 2017-05-23 12:10:54

cette erreur peut facilement être corrigée par les étapes suivantes:

    //run the command at /android sdk / platforms-tool folder
        adb reverse tcp:8081 tcp:8081

    //now come to root folder of your app
    1. npm start
    2. create 'assets' folder inside rootApp/android/app/src/main/
    3. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"
    4. make sure anyone physical or virtual device attached is running.
    5. react-native run-android
0
répondu Atif Hussain 2017-03-24 07:42:29

vous pouvez suivre les instructions mentionnées sur la page officielle pour corriger cette question. Ce problème se produit sur real device parce que le paquet JS est situé sur votre système de développement et l'application à l'intérieur de votre real device n'est pas au courant de son emplacement.

0
répondu mthakuri 2017-07-07 07:55:42