161

I'm using React.JS and when I do react-native run-android (with my device plugged in) I see a blank page. When I shake the device and select Debug JS Remotely from the option list I see the following screen.

enter image description here

FYI:

OS: Ubuntu 16.04
Node version is: v4.6.2
java version "1.8.0_111"
react": "15.4.1
react-native": "0.38.0
splunk
  • 6,435
  • 17
  • 58
  • 105

18 Answers18

286

In my case the issue was that the emulator was making a request to:

http://10.0.2.2:8081/debugger-ui

instead of:

http://localhost:8081/debugger-ui and the request was failing.

To solve the issue: Before enabling remote debugging on your emulator, open http://localhost:8081/debugger-ui in chrome. Then enable remote debugging and go back to the chrome page where you should see your console logs.

DannyMoshe
  • 6,023
  • 4
  • 31
  • 53
  • 1
    worked for me--thx! did you find a way to set it to always try to connect to localhost to avoid having to open chrome tab first? – izikandrw Mar 01 '18 at 21:50
  • 28
    You can go into the Dev Settings (Ctrl +M) on your emulator and change the debug server to 'localhost:8081'. – DannyMoshe Mar 02 '18 at 22:10
  • Last paragraph is the only thing that worked for me. – Pedro Otero Mar 11 '18 at 21:55
  • 3
    Thank you. How does it get set to 10.0.2.2 in the first place? – charlieb May 14 '18 at 17:47
  • 3
    A request to 'localhost' made from your emulator would try to access the loopback port on the emulator, not on your PC (you want the loopback of your PC). To resolve this, android creates the alias 10.0.2.2 to allow you to access services running on your PC (see https://developer.android.com/studio/run/emulator-networking for doc reference). As far as why the request fails im not sure, but it seems that it is a documented issue with react/android see https://github.com/facebook/react-native/issues/17970. – DannyMoshe May 14 '18 at 22:29
193

Solved the issue following:

  • Press Cmd + M on emulator screen
  • Go to Dev settings > Debug server host & port for device
  • Set localhost:8081
  • Rerun the android app: react-native run-android

Debugger is connected now!

Sajib Khan
  • 22,878
  • 9
  • 63
  • 73
45

I solved it doing adb reverse tcp:8081 tcp:8081 and then reload on my phone.

splunk
  • 6,435
  • 17
  • 58
  • 105
37

In my case, selecting Debug JS Remotely launched Chrome, but did not connect with the android device. Normally, the new Chrome tab/window would have the debugging URL pre-populated in the address bar, but in this case the address bar was blank. After the timeout period, the "Unable to connect with remote debugger" error message was displayed. I fixed this with the following procedure:

  • Run adb reverse tcp:8081 tcp:8081
  • Paste http://localhost:8081/debugger-ui into the address field of my Chrome browser. You should see the normal debugging screen but your app will still not be connected.

That should fix the problem. If not, you may need to take the following additional steps:

  • Close and uninstall the app from your Android device
  • Reinstall the app with react-native run-android
  • Enable remote debugging on your app.
  • Your app should now be connected to the debugger.
Tom Aranda
  • 5,919
  • 11
  • 35
  • 51
  • 2
    Tom...thank you! Before this I set my ip address ("Dev Settings" -> "Debug server host for device") x.x.x.x:8081 – atreeon Dec 12 '17 at 16:32
11

I had a similar issue that led me to this question. In my browser debugger I was getting this error message:

Access to fetch at 'http://localhost:8081/index.delta?platform=android&dev=true&minify=false' from origin 'http://127.0.0.1:8081' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

It took me awhile to realize I was using 127.0.0.1:8081 instead of localhost:8081 for my debugger.

To fix it, I simply had to change Chrome from:

http://127.0.0.1:8081/debugger-ui/

to

http://localhost:8081/debugger-ui/
jchavannes
  • 2,440
  • 1
  • 26
  • 15
  • 1
    actually for me was the opposite. But in reality "localhost" usually is equivalent to 127.0.0.1. It depends on what is set for address as localhost. Always better to be explicit though – Carmine Tambascia Jul 15 '19 at 07:05
3

My case is that when I tap enable remote JS debugging, it will launch chrome, but can not connect to it.

I have tried to run:

adb reverse tcp:8081 tcp:8081 

, did but not work.

I uninstalled my chrome totally and install a new one. And it works.

Amir
  • 1,348
  • 3
  • 21
  • 44
Steven Fang
  • 135
  • 6
3

The other answers here were missing one crucial step for me. In AndroidManifest.xml I needed to add usesCleartextTraffic:

    <application
      ...
      android:usesCleartextTraffic="true">

You probably don't want to keep this in the production release of your app though, unless you want to support insecure http requests.

After I added this to my AndroidManifest.xml, then I followed Tom Aranda's answer, and the emulator was finally able to connect to the debugger.

Mitch Downey
  • 887
  • 1
  • 11
  • 15
2

Make sure that the node server to provide the bundle is running in the background. To run start the server use npm start or react-native start and keep the tab open during development

Chethan N
  • 1,110
  • 1
  • 9
  • 23
1
  1. react-native start --reset-cache in one tab and react-native run-android in another
  2. adb reverse tcp:8081 tcp:8081 ( so you could add it to your scripts and just run yarn run adb-reverse)
  3. If you're using android, Instead of shake your phone a great tip is run adb commands.

So you can run:

  • adb shell input keyevent 82 (menu option )
  • adb shell input keyevent 46 46 ( reload )
0

I did @sajib s answer and used this script to redirect ports:

#!/usr/bin/env bash

# packager
adb reverse tcp:8081 tcp:8081
adb -d reverse tcp:8081 tcp:8081
adb -e reverse tcp:8081 tcp:8081

echo " React Native Packager Redirected "
Thom
  • 524
  • 1
  • 6
  • 12
0

uninstall your application, then run react-native run-android. then click debugging end in chrome replace http://localhost:8081/debugger-ui/, end run react-native run-android. if you still haven't succeeded try again

muhyidin
  • 189
  • 2
  • 7
0

Inculding all impressive answers the expert developers specially Ribamar Santos provided, if you didn't get it working, you must check something more tricky!

Something like Airplane mode of your (emulated) phone! Or your network status of Emulator (Data status and Voice status on Cellular tab of Emulator configuration) that might be manipulated to don't express network! for some emulation needs!

I've overcome to this problem by this trick! It was a bit breathtaking debug to find this hole!

AbdolHosein
  • 528
  • 4
  • 15
0

in my case it also need to install it's npm package

so

npm install react-native-debugger -g
TheEhsanSarshar
  • 2,677
  • 22
  • 41
0

Try adding this

package.json

devDependencies: {
//...    
    "@react-native-community/cli-debugger-ui": "4.7.0"
}

Terminate everything.

  • npm install
  • npx react-native start
  • npx react-native run-android

Reference: https://github.com/react-native-community/cli/issues/1081#issuecomment-614223917

Muhammed Ozdogan
  • 5,341
  • 8
  • 32
  • 53
0

Trouble shooting React native with React Cli and Typescript/js (Android Emulator)

  1. Check if 'android/src/mai/assets/index.android.bundle' is available. If no Create index.android.bundle file in 'android/src/main/assets'
  2. If above path not available then create the path then file 3.Run for bundling : react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

4.a. By default development server runs on 8081 port. Run 'react-native start' then on browser check if 'http://localhost:8081' and 'http://yourIP:8081' works. If yes then Open application in Android Emulator (react-native run-android)

  • Click Ctrl + M
  • Select Settings
  • Select Debug Server Host and Port For Device
  • Add 'YourIPAddress:8081' e.g. 10.0.2.2:8081

4.b If http://localhost:8081 not working then run react-native port=8088(or any port)once successfully executed. Check on browser http://localhost:8088 and http://yourIP:8088 works. Yes then Open application in Android Emulator (react-native run-android)

  • Click 'Ctrl + M'
  • Select Settings-
  • Select Debug Server Host and Port For Device-
  • Add 'YourIPAddress:8081' e.g. 10.0.2.2:8088

YourIPAddress : Open command promt -> write 'ipconfig' -> copy IPv4 address

0

As for my own case , i was using the expo go and my android phone for my emulator and it was giving me this error.

  • so what i did was to clear the expo go app cache & data on my android device. it was working just fine
Anthony phillips
  • 152
  • 3
  • 13
0

TL;DR: If you created the app with expo cli with some native code or libraries not supported by expo, try this command in case the other solutions do not work.

npx expo run:android

Docs

My scenario:

I tried to run one of my old expo applications by building the app from Android studio and faced this issue. The other solutions mentioned didn't work. When I tried to use Expo Go to scan the QR, I got to know the error. Since I had used react-native-mmkv, I couldn't use expo-cli, I had to eject. So I ran npx expo run:android and everything started working fine.

  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Nov 18 '22 at 10:40
0

The solution is to clear the expo go application data to solve the problem. Ref to: How to disable Remote JS Debugging in React-Native