Nie można połączyć się ze zdalnym debugerem


149

Używam React.JS i kiedy to robię react-native run-android(z podłączonym urządzeniem) widzę pustą stronę. Kiedy potrząsam urządzeniem i wybieram Debug JS Remotelyz listy opcji, widzę następujący ekran.

wprowadź opis obrazu tutaj

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

1
Na Androidzie musisz uruchomić w osobnym oknie, react-native startaby uruchomić serwer.
Aleksandar Popovic

A co ze zmianą tego: compile "com.facebook.react:react-native:+"w sekcji kompilacji.
Satan Pandeya

powinieneś włączyć "debugowanie" w menu programisty
UA_

Odpowiedzi:


280

W moim przypadku problem polegał na tym, że emulator wysyłał żądanie do:

http://10.0.2.2:8081/debugger-ui

zamiast:

http://localhost:8081/debugger-ui i żądanie nie powiodło się.

Aby rozwiązać problem: przed włączeniem zdalnego debugowania w emulatorze otwórz http://localhost:8081/debugger-uiw przeglądarce Chrome. Następnie włącz zdalne debugowanie i wróć do strony chrome, na której powinny pojawić się dzienniki konsoli.


1
pracował dla mnie - dzięki! czy znalazłeś sposób, aby ustawić go tak, aby zawsze próbował łączyć się z lokalnym hostem, aby uniknąć konieczności otwierania karty chrome?
izikandrw

26
Możesz przejść do ustawień deweloperskich (Ctrl + M) na emulatorze i zmienić serwer debugowania na „localhost: 8081”.
DannyMoshe

Ostatni akapit to jedyna rzecz, która mi pomogła.
Pedro Otero

3
Dziękuję Ci. Jak to jest ustawione na 10.0.2.2 w pierwszej kolejności?
charlieb

3
Żądanie do „localhost” wysłane z emulatora będzie próbowało uzyskać dostęp do portu sprzężenia zwrotnego w emulatorze, a nie na komputerze (chcesz uzyskać pętlę zwrotną komputera). Aby rozwiązać ten problem, system Android tworzy alias 10.0.2.2, aby umożliwić dostęp do usług działających na komputerze (zobacz developer.android.com/studio/run/emulator-networking w celu uzyskania informacji o dokumentacji). Jeśli chodzi o przyczynę niepowodzenia żądania, nie jestem pewien, ale wydaje się, że jest to udokumentowany problem z reakcją / androidem, patrz github.com/facebook/react-native/issues/17970 .
DannyMoshe

181

Rozwiązano następujący problem:

  • Naciśnij Cmd + Mna ekranie emulatora
  • Iść do Dev settings > Debug server host & port for device
  • Zestaw localhost:8081
  • Uruchom ponownie aplikację na Androida: react-native run-android

Debugger jest teraz podłączony!


Dla tych z Was, którzy mają problem z niedziałającym przyciskiem CMD + M, użyłem './adb shell input keyevent 82' w powłoce, w której znajduje się adb, aby go uruchomić. Po tym klawisze skrótu zaczęły działać!
Jeff L

TY sir są krwawą legendą. x
NewbieAid

Teraz po prostu próbuje połączyć się ze zdalnym debugerem ... na zawsze
Fakebounce

44

Rozwiązałem to robiąc, adb reverse tcp:8081 tcp:8081a następnie reloadna telefonie.


36

W moim przypadku wybranie Debug JS Zdalnie uruchomiłem Chrome, ale nie połączyłem się z urządzeniem z Androidem. Zwykle nowa karta / okno Chrome miałoby adres URL debugowania wstępnie wypełniony na pasku adresu, ale w tym przypadku pasek adresu był pusty. Po upływie limitu czasu został wyświetlony komunikat o błędzie „Nie można połączyć się ze zdalnym debugerem”. Naprawiłem to za pomocą następującej procedury:

  • Biegać adb reverse tcp:8081 tcp:8081
  • Wklej http://localhost:8081/debugger-uiw pole adresu mojej przeglądarki Chrome. Powinieneś zobaczyć normalny ekran debugowania, ale Twoja aplikacja nadal nie będzie połączona.

To powinno rozwiązać problem. Jeśli nie, może być konieczne wykonanie następujących dodatkowych kroków:

  • Zamknij i odinstaluj aplikację z urządzenia z systemem Android
  • Zainstaluj ponownie aplikację za pomocą react-native run-android
  • Włącz zdalne debugowanie w swojej aplikacji.
  • Twoja aplikacja powinna być teraz połączona z debugerem.

2
Tom ... dziękuję! Wcześniej ustawiłem swój adres IP („Ustawienia
deweloperskie

11

Miałem podobny problem, który doprowadził mnie do tego pytania. W debugerze przeglądarki otrzymałem ten komunikat o błędzie:

Dostęp do pobierania pod adresemhttp: // localhost: 8081 / index.delta? Platform = android & dev = true & minify = false ” od źródła „ http://127.0.0.1:8081 ” został zablokowany przez zasady CORS: Nie „Kontrola dostępu -Allow-Origin 'nagłówek jest obecny w żądanym zasobie. Jeśli nieprzezroczysta odpowiedź spełnia Twoje potrzeby, ustaw tryb żądania na „brak elementów”, aby pobrać zasób z wyłączonym mechanizmem CORS.

Zajęło mi trochę czasu, zanim zdałem sobie sprawę, że 127.0.0.1:8081zamiast localhost:8081debuggera używam .

Aby to naprawić, musiałem po prostu zmienić Chrome z:

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

do

http://localhost:8081/debugger-ui/

1
właściwie dla mnie było odwrotnie. Ale w rzeczywistości „localhost” jest zwykle odpowiednikiem 127.0.0.1. To zależy od tego, co jest ustawione dla adresu jako localhost. Zawsze jednak lepiej mówić wprost
Carmine Tambascia

2

Upewnij się, że serwer węzła udostępniający pakiet działa w tle. Aby uruchomić, uruchom serwer, użyj npm startlub react-native starti pozostaw zakładkę otwartą podczas programowania


1
Nadal nie działa. Żaden terminal nie zwraca mi błędów
splunk

1
Czy korzystasz z serwera proxy lub oprogramowania proxy, takiego jak Charles ... Zatrzymaj je, jeśli takie istnieją
Chethan N,

Nie, nie używam żadnego serwera proxy
splunk

2

Mój przypadek jest taki, że kiedy stuknę włącz zdalne debugowanie JS, uruchomi Chrome, ale nie może się z nim połączyć.

Próbowałem biegać:

adb reverse tcp:8081 tcp:8081 

, zadziałało, ale nie zadziałało.

Całkowicie odinstalowałem swój chrome i zainstalowałem nowy. I to działa.


1
  1. react-native start --reset-cache w jednej karcie i react-native run-android na innej
  2. adb reverse tcp: 8081 tcp: 8081 (więc możesz dodać go do swoich skryptów i po prostu uruchomić przędzę run adb-reverse )
  3. Jeśli używasz Androida, zamiast potrząsać telefonem, świetną wskazówką jest uruchomienie poleceń adb.

Możesz więc biegać:

  • adb shell input keyevent 82 ( opcja menu )
  • wejście powłoki adb keyevent 46 46 ( przeładuj )

1

W innych odpowiedziach brakowało mi jednego kluczowego kroku. W AndroidManifest.xml potrzebowałem dodać useCleartextTraffic:

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

Prawdopodobnie nie chcesz jednak zachować tego w wersji produkcyjnej swojej aplikacji, chyba że chcesz obsługiwać niezabezpieczone żądania HTTP.

Po dodaniu tego do mojego pliku AndroidManifest.xml, podążyłem za odpowiedzią Toma Arandy i emulator mógł wreszcie połączyć się z debugerem.


0

Zrobiłem odpowiedź @sajib i użyłem tego skryptu do przekierowania portów:

#!/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 🚧"


0

Uwzględniając wszystkie imponujące odpowiedzi specjalnie Ribamar Santosudzielone przez doświadczonych programistów , jeśli nie udało Ci się zadziałać , musisz sprawdzić coś bardziej skomplikowanego!

Coś jak Airplane modetwój (emulowany) telefon! Lub twoja network status of Emulator( Data status and Voice status on Cellular tab of Emulator configuration), która może być zmanipulowana, aby nie wyrażać sieci! dla niektórych potrzeb emulacji!

Dzięki tej sztuczce rozwiązałem ten problem! Znalezienie tej dziury było zapierające dech w piersiach debugowanie!


0

w moim przypadku trzeba też zainstalować pakiet npm

więc

npm install react-native-debugger -g

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.