J'essaie de lancer AwesomeProject sur mon Nexus5 (Android 5.1.1).
Je suis capable de construire le projet et de l'installer sur le périphérique. Mais quand je le lance, un écran rouge me dit
Impossible de télécharger le bundle JS. Avez-vous oublié de démarrer le serveur de développement ou de connecter votre appareil?
Dans réagir iOS natif, je peux choisir de charger jsbundle en mode hors connexion. Comment puis-je faire la même chose pour Android? (Ou du moins, où puis-je configurer l'adresse du serveur?)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081
veuillez consulter la réponse de dsissitka pour plus de détails.
Android/app/src/main
curl "http://localhost:8081/index.Android.bundle?platform=Android" -o "Android/app/src/main/assets/index.Android.bundle"
jetez un oeil à la réponse de kzzzf pour plus de détails.
Pour regrouper le fichier JS dans votre apk tout en faisant tourner votre serveur (react-native start
), téléchargez le bundle dans le répertoire des ressources 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
afin qu'elle fonctionne avec les projets Android comme prévu.
Ce qui suit a fonctionné pour moi sur Ubuntu 14.04:
cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081
Mise à jour : Voir
Mise à jour 2 : @scgough Nous avons eu cette erreur car React Native (RN) n'a pas pu extraire le code JavaScript du serveur de développement sur lequel tourne le serveur 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, elle tente d'extraire le code JavaScript à partir de GENYMOTION_LOCALHOST (10.0.3.2) ou de EMULATOR_LOCALHOST (10.0.2.2). Sinon, cela suppose que vous utilisez un appareil et essaie d'extraire le code JavaScript de DEVICE_LOCALHOST (localhost). Le problème est que le serveur de développement s'exécute sur l'hôte local de votre poste de travail, et non sur celui du périphérique. Pour le faire fonctionner, vous devez donc:
Ok, je pense avoir compris quel est le problème ici. C'était en rapport avec la version de watchman
que j'utilisais.
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 de shell et lance: react-native run-Android
à partir du dossier de mon projet. Tout est bien avec le monde.
ps. J'étais à l'origine sur la version 3.2 de Watchman. Cela m'a mis à niveau à 3.7.
pps. Je suis nouveau dans ce domaine, alors ce n'est peut-être pas la solution la plus rapide, mais cela a fonctionné pour moi.
* PLUS D'INFORMATIONS SUR LE FONCTIONNEMENT/LE DÉBOGAGE SUR UN PÉRIPHÉRIQUE *
Vous constaterez peut-être que si vous déployez votre application sur votre appareil Android plutôt que sur un émulateur, vous obtenez un écran rouge de la mort avec une erreur indiquant Unable to load JS Bundle
. Vous devez configurer le serveur de débogage pour que votre périphérique soit sur votre ordinateur en fonctionnement réagit ... soit son nom OR adresse IP.
Menu
Dev Settings
Debug server Host for device
192.168.1.10:8081
Plus d'infos: http://facebook.github.io/react-native/docs/running-on-device-Android.html
Depuis votre répertoire de projet, exécutez
react-native start
Il génère les éléments suivants:
$ 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 simple qui fonctionne pour moi avec Ubuntu 14.04.
react-native run-Android
L'émulateur (déjà lancé) renverra: Impossible de télécharger JS Bundle; redémarrez le serveur JS:
react-native start
Appuyez sur Reload JS sur l'émulateur. Cela a fonctionné pour moi. J'espère que ça va aider
Dans l'application sur Android j'ai ouvert Menu (Commande + M dans Genymotion) -> Paramètres de développement -> Serveur de débogage Hôte et port pour le périphérique
définissez la valeur sur: localhost: 8081
Cela a fonctionné pour moi.
Après avoir essayé une combinaison de réponses ici, voici ce qui fonctionne pour moi.
J'utilise Genymotion comme émulateur.
1 Démarrez l’émulateur Genymotion.
2 depuis 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 Rechargez à partir de l'émulateur.
Ça charge!
Je peux maintenant commencer à développer.
Supprimer l'application de votre téléphone! J'ai essayé plusieurs étapes, mais c'est ce qui a finalement été fait.
$ react-native run-Android
Dev Settings
, puis à Debug server Host & port for device
. Entrez ensuite l'adresse IP de votre serveur (IP de votre ordinateur) et l'hôte 8081
, par exemple. 192.168.50.35:8081
. Sur un Mac, vous pouvez trouver l'adresse IP de votre ordinateur à l'adresse System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address
.Reload JS
.Je n'ai pas assez de réputation pour commenter, mais cela fait référence à la réponse de dsissitka. Cela fonctionne aussi 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
Voici les étapes simples pour exécuter votre application sur Android (version):
1. Allez à la racine de votre application.
2. Exécutez cette commande.
bundle réactif natif --platform Android --dev false --index-fichier index.Android.js --bundle-output Android/app/src/main/assets/index.Android.bundle - assets-dest Android/app/src/main/res
Tous vos fichiers sont copiés.
. Créer un APK signé.
Ouvrez le studio Android.
Construire> Générer un APK signé> [Remplir les détails requis, la frappe doit être générée avant cette étape]
Votre APK devrait être généré sans erreur. Installez sur votre appareil et cela devrait fonctionner sans aucun problème.
Vous pouvez également connecter votre appareil et cliquer directement sur l'icône Exécuter de Android studio pour le tester.
génération de frappe:
Goto C:\Program Files\Java\jdkx.x.x_x\bin
Courir
keytool -genkey -v -keystore d:\my_private_key.keystore -alias mon-clé-alias -keyalg RSA -keysize 2048 -validité 10000
Il vous demandera probablement de compléter certains détails. Faites-le et vous avez votre fichier de frappe (my_private_key.keystore) qui peut être utilisé pour signer votre apk.
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 la réponse de Kzzzf
fonctionnant sur le périphérique
J'ai trouvé une autre réponse.
J'obtenais ceci sur Linux après avoir arrêté le processus react-native run-Android
. Il semble que le serveur de nœud est toujours en cours d'exécution. Par conséquent, il ne s'exécutera pas correctement et votre application ne pourra pas se connecter.
La solution ici est de tuer le processus de noeud qui s'exécute dans un Xterm que vous pouvez tuer en ctrl-c
ing cette fenêtre (plus facile) ou vous pouvez le trouver en utilisant lsof -n -i4TCP:8081
puis kill -9 PID
.
Ensuite, exécutez à nouveau react-native run-Android
.
Une mise à jour
Maintenant, sur Windows, plus besoin de lancer react-native start. Le conditionneur s'exécutera automatiquement.
Une chose importante à vérifier que personne n’a mentionnée 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
Vérifiez votre connexion wifi.
Une autre possibilité pourrait être que vous ne soyez pas connecté au wifi, connecté à un mauvais réseau ou que l'adresse IP soit incorrecte dans vos paramètres de développement. Pour une raison quelconque, mon Android s'est déconnecté du réseau wifi et j'ai commencé à avoir cette erreur, sans le savoir.
Cette erreur peut être facilement résolue en procédant comme suit:
//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
Dans la nouvelle React native (sûrement 0.59), la configuration de débogage est à l'intérieur de Android/app/src/debug/res/xml/react_native_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="false">localhost</domain>
<domain includeSubdomains="false">10.0.2.2</domain>
<domain includeSubdomains="false">10.0.3.2</domain>
</domain-config>
</network-security-config>
Vous pouvez suivre les instructions mentionnées sur le page officielle pour résoudre ce problème. Ce problème se produit sur le périphérique réel car le bundle JS se trouve sur votre système de développement et que l'application de votre périphérique réel ne connaît pas son emplacement.
Démarrez les deux terminaux sur le même et le premier terminal réagit natif start et le deuxième terminal réagit natif run-Android, ce problème est résolu de manière simple. Et bonne chance
La question initiale concernait le rechargement de l'application dans un périphérique physique.
Lorsque vous déboguez l'application dans un périphérique physique (c.-à-d. Via adb), vous pouvez recharger le bundle JS en cliquant sur le bouton "action" en haut à gauche de votre périphérique. Cela ouvrira le menu des options (Reload, Debug JS à distance ...).
J'espère que cela t'aides.
J'utilise Ubuntu et Android uniquement, et je n'ai pas réussi à le faire fonctionner. J'ai trouvé une solution très simple qui consiste à mettre à jour votre fichier package.json en modifiant les lignes suivantes:
"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 puis vous lancez le serveur en tapant
npm run start
Cela garantit que le périphérique Android recherche le serveur de nœud sur votre ordinateur plutôt que localement sur le téléphone.