Reputation: 5085
I'm trying to run AwesomeProject on my Nexus5 (android 5.1.1).
I'm able to build the project and install it on the device. But when I run it, I got a red screen saying
Unable to download JS bundle. Did you forget to start the development server or connect your device?
In react native iOS, I can choose to load jsbundle offline. How can I do the same thing for Android? (Or at least, where can I configure the server address?)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081
please take a look at dsissitka's answer for more details.
android/app/src/main
curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"
please take a look at kzzzf's answer for more details.
Upvotes: 208
Views: 139059
Reputation: 1118
Hey I was facing this issue with my react-native bare project, the IOS simulator works fine but android kept giving me this error. here is a possible solution which has worked for me.
step 1, check if the adb device is authorized by running in your terminal : adb devices
if it is unauthorised run the following commands
step 2, sudo adb kill-server step 3, sudo adb start-server
then check if the adb devices command shows list of devices attached emulator-5554 device
instead of unauthorized if it is device instead of unauthorized
step 4, run npx react-native run-android
this has worked in my instance.
Upvotes: 0
Reputation: 11
### Here is my solution
None of the above solutions can solve my problem but only follow the below steps working for me.
Add in network-security-config.xml
file
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">10.0.2.2</domain>
</domain-config>
...
Then update AndroidManifest.xml
file with
<application
+ android:networkSecurityConfig="@xml/network_security_config"
...
Upvotes: 1
Reputation: 11
I found this to be weird but I got a solution. I noticed that every once in a while my project folder went read-only and I couldn't save it from VS. So I read a suggestion to transfer NPM from local user PATH to system-wide PATH global variable, and it worked like a charm.
Upvotes: 0
Reputation: 5252
Ok, I think I've figured what the issue is here. It was to do with the version of watchman
I was running.
In a new shell, run brew update
then: brew unlink watchman
then: brew install watchman
now, you can run react-native start
from your project folder
I leave this shell open, create a new shell window and run: react-native run-android
from my project folder. All is right with the world.
ps. I was originally on version 3.2 of watchman. This upgraded me to 3.7.
pps. I'm new to this so that might not be the swiftest route to the solution but it has worked for me.
* MORE INFO FOR RUNNING/DEBUGGING ON A DEVICE *
You might find that if you deploy your app to your Android device rather than an emulater you get a red screen of death with an error saying Unable to load JS Bundle
. You need to set the debug server for your device to be your computer running react...either its name OR IP address.
Menu
buttonDev Settings
Debug server host for device
or Change Bundle Location
192.168.1.10:8081
More info: http://facebook.github.io/react-native/docs/running-on-device-android.html
Upvotes: 39
Reputation: 496
Start the two terminal on the same and 1st terminal run react-native start and second terminal react-native run-android this problem are solve in simply way. And best of luck
Upvotes: 0
Reputation: 945
In new React Native (for sure 0.59) debug config is inside 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>
Upvotes: 0
Reputation: 1095
You can follow the instruction mentioned on the official page to fix this issue. This issue occur on real device because the JS bundle is located on your development system and the app inside your real device is not aware of it's location.
Upvotes: 0
Reputation: 4640
Here are the simple steps to run your app on android(release):
1. Go to your application root.
2. Run this command.
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
All your files are copied.
3. Create signed APK.
Open android studio.
Build > Generate Signed APK > [Fill required details, keystroke has to be generated before this step]
Your APK should be generated without any errors. Install on your device and this should work without any issues.
You can also connect your device and directly hit Run icon on android studio for testing.
Generating Keystroke:
Goto C:\Program Files\Java\jdkx.x.x_x\bin
Run
keytool -genkey -v -keystore d:\my_private_key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
It will probably ask you to fill in some details. Do it and your have your keystroke file(my_private_key.keystore) which can be used to sign your apk.
Upvotes: 2
Reputation: 898
This error can easily resolved by following steps:
//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
Upvotes: 0
Reputation: 839
One important thing to check that no one has mentioned so far: Check your local firewall, make sure it's turned OFF.
See my response here: https://stackoverflow.com/a/41400708/1459275
Upvotes: 1
Reputation: 81
The initial question was about reloading the application in a phyisical device.
When you're debugging the application in a physical device (ie via adb), you can reload the JS bundle by clicking on the top left "action" button of your device. This will open the option menu (Reload, Debug JS remotely...).
Hope this helps.
Upvotes: 0
Reputation: 1264
An update
Now on windows no need to run react-native start. The packager will run automatically.
Upvotes: 1
Reputation: 7871
Running npm start from react-native directory worked out for me.
Upvotes: -1
Reputation: 1053
I have found another answer.
Upvotes: 1
Reputation: 5062
I am using Ubuntu and Android only, and I was unable to get it running. I found a really simple solution which is to update your package.json file, changing this lines:
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start"
},
to
"scripts": {
"start": "adb reverse tcp:8081 tcp:8081 && node node_modules/react-native/local-cli/cli.js start"
},
And then you run the server by typing
npm run start
This ensures the android device looks for the node server on your computer instead of locally on the phone.
Upvotes: 0
Reputation: 6204
Delete the App from your phone! I tried several steps, but that did it eventually.
$ react-native run-android
Dev Settings
and then to Debug server host & port for device
. There enter your server IP (IP of your computer) and host 8081
, e.g. 192.168.50.35:8081
. On a mac you can find the IP of your computer at System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address
.Reload JS
.Upvotes: 4
Reputation: 541
Check your wifi connection.
Another possibility could be you are either not connected to wifi, connected to the wrong network, or the ip address is wrong in your dev settings. For some reason, my android disconnected from the wifi and I started to get this error, unknowingly.
Upvotes: 1
Reputation: 41133
I was getting this on Linux after stopping down the react-native run-android
process. Seems the node server is still running so the next time you run it, it won't run properly and your app can't connect.
The fix here is to kill the node process which is running in an Xterm which you can kill by ctrl-c
ing that window (easier) or you can find it using lsof -n -i4TCP:8081
then kill -9 PID
.
Then run react-native run-android
again.
Upvotes: 1
Reputation: 1510
An easy solution that works for me with Ubuntu 14.04.
react-native run-android
The emulator (already launched) will return: Unable to download JS Bundle; start again the JS server:
react-native start
Hit Reload JS on the emulator. It worked for me. Hope it will help
Upvotes: 13
Reputation: 301
In the app on android I opened Menu (Command + M in Genymotion) -> Dev Settings -> Debug server host & port for device
set the value to: localhost:8081
It worked for me.
Upvotes: 8
Reputation: 675
I don't have enough reputation to comment, but this is referring to dsissitka's answer. It works on Windows 10 as well.
To reiterate, the commands are:
cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081
Upvotes: 2
Reputation: 1575
After trying out a combination of the answers here, this is what is working for me.
I'm using Genymotion as my emulator.
1 Start up Genymotion emulator.
2 From a 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 Reload from emulator.
It loads!
I can now begin developing.
Upvotes: 7
Reputation: 1976
Apparently adb reverse was introduced in Android 5.0
Getting "error: closed" twice on "adb reverse"
I guess we have to go ahead with kzzzf's answer
Upvotes: 2
Reputation: 2664
To bundle JS file into your apk while having your server running (react-native start
) download bundle into assets directory of your app:
curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"
With the next release (0.12) we'll fix react-native bundle
command to work with android projects as expected.
Upvotes: 111
Reputation: 981
The following made it work for me on Ubuntu 14.04:
cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081
Update: See
Update 2: @scgough We got this error because React Native (RN) was unable to fetch JavaScript from the dev server running on our workstations. You can see why this happens here:
If your RN app detects that you're using Genymotion or the emulator it tries to fetch the JavaScript from GENYMOTION_LOCALHOST (10.0.3.2) or EMULATOR_LOCALHOST (10.0.2.2). Otherwise it presumes that you're using a device and it tries to fetch the JavaScript from DEVICE_LOCALHOST (localhost). The problem is that the dev server runs on your workstation's localhost, not the device's, so in order to get it to work you need to either:
Upvotes: 91
Reputation: 45202
From your project directory, run
react-native start
It outputs the following:
$ 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)
Upvotes: 17