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
- réagir indigènes démarrer > /dev/null 2>&1 &
- 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:
- créer un dossier actif sous
android/app/src/main
-
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.
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.
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:
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:
- acheminer le trafic à partir de (Appareil localhost):8081/tcp (station de travail localhost):8081/tcp. C'est ce que la bad commande.
- Dites à vos RN app où trouver votre serveur de dev.
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.
- Appuyez sur le dispositif de
Menu
bouton - sélectionner
Dev Settings
- sélectionner
Debug server host for device
- 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
à 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)
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
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.
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.
supprimez L'application de votre téléphone! J'ai essayé plusieurs étapes, mais que fait-il finalement.
- si vous avez essayé d'exécuter votre application avant mais a échoué, supprimer il à partir de votre appareil android.
- Exécuter
$ react-native run-android
- 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ôte8081
, 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
. - Ouvrez à nouveau le menu Rage Shake et cliquez sur
Reload JS
.
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
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
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.
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.
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
une mise à jour
maintenant sous windows pas besoin de lancer react-native start. L'emballeur sera exécuté automatiquement.
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
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:
-
Goto C:\Program fichiers\Java\jdkx.x.x_x\bin
-
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.
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.
Running npm démarrer de réagir-annuaire natif fonctionné pour moi.
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.
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
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.