Konfigurowanie sieci emulatora Androida

Emulator zapewnia uniwersalne funkcje sieciowe, których możesz używać do: skonfigurować złożone środowiska modelowania i testowania aplikacji. Ta strona przedstawiamy architekturę i funkcje sieci emulatora.

Przestrzeń adresowa sieci

Każda instancja emulatora działa za routerem wirtualnym lub usługą zapory sieciowej który oddziela ją od interfejsów i ustawień sieci maszyny programowania. i z internetu. Emulacja urządzenia nie może wykryć maszyny do programowania lub innych instancji emulatora w sieci. Wykrywa tylko połączone przez Ethernet z routerem lub zaporą sieciową.

Router wirtualny w każdej instancji zarządza adresem sieci 10.0.2/24 kosmosu. Wszystkie adresy zarządzane przez router mają postać 10.0.2.xx, gdzie xx to liczba. Adresy w tym pokoju: wstępnie przydzielone przez emulator lub router w następujący sposób:

Adres sieciowy Opis
10.0.2.1 Adres routera lub bramy
10.0.2.2 Specjalny alias interfejsu sprzężenia zwrotnego hosta (127.0.0.1 na maszyna programistyczna)
10.0.2.3 Pierwszy serwer DNS
10.0.2.4 / 10.0.2.5 / 10.0.2.6 Opcjonalne drugi, trzeci i czwarty serwer DNS
10.0.2.15 Sieć emulowana urządzenia przy połączeniu przez Ethernet
10.0.2.16 Sieć emulowana przy połączeniu przez Wi-Fi
127.0.0.1 Emulacja interfejsu pętli urządzenia

Wszystkie przypisania adresów są używane przez cały uruchomiony emulator instancji. Oznacza to, że jeśli 2 instancje działają jednocześnie na każdy będzie miał własny router, a za nim Adres IP 10.0.2.15. Instancje są odizolowane przez router i nie mogą wykrywać się nawzajem w tej samej sieci. Dowiedz się, jak pozwól instancjom emulatora komunikować się przez TCP/UDP, zapoznaj się z sekcją o łączeniu między instancjami emulatora.

Adres 127.0.0.1 na komputerze programistycznym odpowiada do interfejsu loopback emulatora. Aby uzyskać dostęp do uruchomionych usług w interfejsie pętli dla programistów, użyj specjalnego adres 10.0.2.2.

Wstępnie przydzielone adresy emulowanego urządzenia to: tylko w przypadku emulatora Androida i prawdopodobnie będą się różnić. urządzeń (które prawdopodobnie będą tłumaczone, a konkretnie za routerem lub zaporą sieciową).

Ograniczenia sieci lokalnej

Aplikacje na Androida działające na emulatorze mogą łączyć się z siecią dostępną na urządzeniu stacji roboczej. Aplikacje łączą się jednak przez emulator, a nie bezpośrednio ze sprzętem czy emulatorem. działa jak zwykła aplikacja na stacji roboczej. Może to powodować pewne ograniczenia:

  • Komunikacja z emulowanym urządzeniem może być blokowana przez zaporę sieciową na komputerze.
  • Komunikacja z emulowanym urządzeniem może zostać zablokowana przez inne urządzenie (fizycznej) zapory sieciowej lub routera, do których podłączony jest Twój komputer.

Router wirtualny emulatora powinien obsługiwać wszystkie wychodzące porty TCP oraz połączeń UDP i wiadomości w imieniu emulowanego urządzenia, pod warunkiem że: na to pozwala środowisko sieciowe maszyn programistycznych. Brak wbudowanych ograniczeń dotyczących numerów portów lub zakresów portów. systemu operacyjnego i sieci hosta.

W zależności od środowiska emulator może nie obsługiwać innych (np. ICMP, używany do „pingu”). Obecnie Emulator nie obsługuje IGMP ani multiemisji.

Użyj przekierowania sieciowego

Aby komunikować się z instancją emulatora za routerem wirtualnym, skonfiguruj przekierowanie sieci na routerze wirtualnym. Klienci mogą wtedy nawiązać połączenie do określonego portu gościa na routerze, a router kieruje ruch do i z tego portu do emulowanego portu hosta urządzenia.

Aby skonfigurować przekierowanie sieci, utwórz mapowanie hosta i gościa oraz adresy i porty w instancji emulatora. Są 2 sposoby konfiguracji przekierowania sieci: polecenia konsoli emulatora oraz Androida narzędzia Debug Bridge (adb) zgodnie z opisem w kolejnych sekcjach.

Konfigurowanie przekierowania przy użyciu konsoli emulatora

Każda instancja emulatora udostępnia konsolę sterowania, z którą możesz się połączyć poleceń dotyczących danej instancji. Użyj redir w konsoli, aby skonfigurować przekierowanie wymagane w przypadku z instancji emulatora.

Najpierw określ numer portu konsoli dla docelowej instancji emulatora. Na przykład numer portu konsoli dla pierwszej uruchomionej instancji emulatora to 5554). Następnie połącz się z konsolą docelowego emulatora i określ Numer portu konsoli w następujący sposób:

telnet localhost 5554

Po nawiązaniu połączenia musisz się uwierzytelnić, zanim będzie można skonfigurować przekierowanie. Zobacz Rozpoczynanie i kończenie sesji w konsoli dla jak to zrobić. Po uwierzytelnieniu użyj polecenia redir, aby móc pracować z .

Aby dodać przekierowanie, użyj polecenia:

redir add <protocol>:<host-port>:<guest-port>

Gdzie <protocol> to tcp lub udp, i <host-port> i <guest-port> ustawili między maszyną a emulowanym systemem.

Na przykład poniższe polecenie konfiguruje przekierowanie, które obsługuje wszystkie: przychodzące połączenia TCP do hosta (programistycznego) w wersji 127.0.0.1:5000, i przekazuje je do emulowanego systemu w wersji 10.0.2.15:6000:

redir add tcp:5000:6000

Aby usunąć przekierowanie, użyj polecenia redir del. Do aby wyświetlić listę wszystkich przekierowań dla danej instancji, użyj redir list. Więcej informacji o tych i innych poleceniach konsoli znajdziesz w artykule Wysyłanie poleceń konsoli emulatora.

Pamiętaj, że numery portów są ograniczone przez środowisko lokalne. Zwykle oznacza, że nie można używać portów hosta o numerach mniejszych niż 1024 bez dodatkowych uprawnień administratora. Nie można też skonfigurować przekierowania dla portu hosta, który jest już używany przez inny proces na Twoim komputerze. Pod tym kątem redir generuje w tym celu komunikat o błędzie.

Konfigurowanie przekierowania przez adb

Narzędzie Android Debug Bridge (adb) udostępnia przekierowanie portów, aby skonfigurować przekierowanie sieciowe. Aby uzyskać więcej informacji, zapoznaj się z artykułem Konfigurowanie przekierowania portów w artykule adb. dokumentacji.

Pamiętaj, że obecnie usługa adb nie oferuje sposobu usunięcia przekierowania chyba że zatrzymuje serwer adb.

Skonfiguruj ustawienia DNS emulatora

Podczas uruchamiania emulator odczytuje listę serwerów DNS, którymi zajmuje się system którego obecnie używasz. Następnie zapisuje adresy IP maksymalnie czterech serwerów w tym i konfiguruje dla nich aliasy w emulowanych adresach 10.0.2.3, 10.0.2.4, 10.0.2.5 i 10.0.2.6.

W systemach Linux i macOS emulator uzyskuje adresy serwerów DNS przez analizę plik /etc/resolv.conf. W systemie Windows emulator pobiera wartość przez wywołanie interfejsu API GetNetworkParams(). Pamiętaj, że to zwykle oznacza, że emulator ignoruje zawartość „hostów” plik (/etc/hosts w systemach Linux/macOS, %WINDOWS%/system32/HOSTS w systemie Windows).

Uruchamiając emulator z poziomu wiersza poleceń, możesz użyć polecenia -dns-server <serverList>, aby ręcznie określić adresy serwerów DNS, które mają być używane (<serverList> jest rozdzielane przecinkami) lista nazw serwerów lub adresów IP. Ta opcja może być przydatna, jeśli: napotkają problemy z rozpoznawaniem nazw DNS w emulowanej sieci (na przykład „Nieznany błąd hosta” wyświetlany podczas korzystania z przeglądarki).

Używanie emulatora z serwerem proxy

W wielu sieciach korporacyjnych bezpośrednie połączenia z internetem są odrzucane przez administratorów sieci. Połączenie internetowe musi przechodzić przez określony serwera proxy. Aby połączyć się z internetem w sieci z wymogiem serwera proxy, emulator musi wiedzieć, że istnieje serwer proxy i że musi się z nim połączyć.

Ze względu na charakter protokołu HTTP bezpośrednie połączenie z serwerem WWW oraz połączenie serwer proxy może generować różne żądania GET. Emulator w przejrzysty sposób zmienia Aby wszystko działało, odbieraj żądania z urządzenia wirtualnego przed rozmową z serwerem proxy.

Jeśli emulator musi łączyć się z internetem przez serwer proxy, możesz skonfigurować niestandardowy serwer proxy HTTP na ekranie Rozszerzone ustawienia emulatora:

  1. Po otwarciu emulatora kliknij Więcej .
  2. Kliknij Ustawienia. Serwer proxy.
  3. Określ ustawienia serwera proxy HTTP.

Możesz też skonfigurować serwer proxy z poziomu wiersza poleceń, używając -http-proxy <proxy> podczas uruchamiania emulatora. W tym przypadku podaj informacje o serwerze proxy. w <proxy> w jednym z tych formatów:

http://<machineName>:<port>

lub

http://<username>:<password>@<machineName>:<port>

Opcja -http-proxy wymusza na emulatorze użycie podanego Serwer proxy HTTP lub HTTPS dla wszystkich wychodzących połączeń TCP. Przekierowanie dla UDP nie jest obsługiwane.

Możesz też zdefiniować zmienną środowiskową http_proxy z wartością, której chcesz użyć <proxy> W tym przypadku nie musisz określać wartości parametru <proxy> w poleceniu -http-proxy – emulator sprawdza wartość zmiennej środowiskowej http_proxy w startowy i automatycznie wykorzystuje jego wartość, jeśli jest zdefiniowana.

Możesz użyć opcji -debug-proxy do diagnozowania serwera proxy problemy z połączeniem.

Instancje emulatora połączeń międzysieciowych

Aby umożliwić komunikację jednej instancji emulatora z inną, skonfiguruj jak opisano poniżej.

Załóżmy, że Twoje środowisko jest przedstawione w ten sposób:

  • A to maszyna do programowania.
  • B to Twoja pierwsza instancja emulatora uruchomiona na komputerze A.
  • C to druga instancja emulatora, która również działa na platformie A.

Jeśli na komputerze B chcesz uruchomić serwer, z którym połączy się C, ustaw go. w następujący sposób:

  1. Skonfiguruj serwer na B, nasłuchuj 10.0.2.15:<Port_serwera>
  2. W konsoli B skonfiguruj przekierowanie z A:localhost:<localPort> do B:10.0.2.15:<Port_serwera>
  3. W systemie C klient powinien połączyć się z portem 10.0.2.2:<localPort>.

Jeśli na przykład chcesz uruchomić serwer HTTP, wybierz <serverPort> jako 80 i <localPort> jako 8080:

  • B słucha 10.0.2.15:80.
  • Na konsoli B wyślij numer redir add tcp:8080:80.
  • C łączy się z protokołem 10.0.2.2:8080.

Wysyłanie połączenia głosowego lub SMS-a do innej instancji emulatora

Emulator automatycznie przekazuje symulowane połączenia głosowe i SMS-y z jednej instancji do innego użytkownika. Aby wysłać SMS-a lub połączenie głosowe, użyj aplikacji telefonu lub aplikacji do SMS-ów. za pomocą jednego z emulatorów.

Aby rozpocząć symulowane połączenie głosowe z inną instancją emulatora:

  1. Uruchom aplikację telefonu w źródłowej instancji emulatora.
  2. Jako numer, do którego chcesz zadzwonić, wpisz numer portu konsoli instancji docelowej.

    Dostępne opcje określić numer portu konsoli dla instancji docelowej, sprawdzając tytuł okna jeśli jest uruchomione w osobnym oknie, ale nie w oknie narzędzia. numer portu konsoli jest raportowany jako „Emulator Androida (<port>)”.

    Ewentualnie Polecenie adb devices powoduje wyświetlenie listy uruchomionych urządzeń wirtualnych i ich portów konsoli liczby. Aby uzyskać więcej informacji, przeczytaj artykuł Zapytanie dla urządzenia.

  3. Kliknij przycisk wybierania. Nowe połączenie przychodzące pojawi się w docelowej instancji emulatora.

Aby wysłać SMS-a do innego emulatora:

  1. Uruchom aplikację do SMS-ów, jeśli jest dostępna.
  2. Jako adres SMS podaj numer portu konsoli docelowej instancji emulatora.
  3. Wpisz tekst wiadomości.
  4. Wyślij wiadomość. Wiadomość jest dostarczana do docelowej instancji emulatora.
  5. Możesz też połączyć się z konsolą emulatora, aby symulować przychodzące połączenie głosowe lub SMS-a. Więcej informacji: emulacja połączeń telefonicznych oraz Emulacja SMS-ów.