Łączenie instancji emulatora

Aby testować aplikacje, które wymagają interakcji na wielu urządzeniach, możesz połączyć ze sobą kilka instancji emulatora Androida, aby mogły się ze sobą komunikować. Sposób nawiązywania połączenia zależy od używanej wersji emulatora.

Emulatory Androida w wersji 36.5 i nowszej

Emulator Androida w wersji 36.5 i nowszych oferuje uproszczony model sieci, który łączy instancje w ramach wspólnej sieci Wi-Fi.

Dzięki temu stosowi sieciowemu wiele emulatorów jest widocznych jako osobne urządzenia w tej samej wirtualnej sieci Wi-Fi. Dzięki temu mogą automatycznie wykrywać się nawzajem i komunikować się ze sobą za pomocą standardowych protokołów opartych na Wi-Fi.

Emulatory mogą się odnajdywać w sieci wirtualnej za pomocą technologii takich jak Network Service Discovery (NSD) i Wi-Fi Direct.

Emulatory znajdują się w tej samej sieci Wi-Fi, więc możesz też znaleźć konkretny adres IP emulatora i połączyć się z nim bezpośrednio z innej instancji emulatora. Aby uzyskać adres IP wirtualnego interfejsu Wi-Fi (wlan0), uruchom to polecenie na komputerze hosta:

adb shell ip addr show wlan0

Android Emulator w wersji starszej niż 36.5

Jeśli używasz starszej wersji Android Emulator, domyślnie bezpośrednia komunikacja między instancjami nie jest możliwa. Każda instancja emulatora działa za własnym wirtualnym routerem, co izoluje ją od sieci lokalnej i innych emulatorów.

Aby włączyć komunikację, musisz ręcznie skonfigurować przekierowanie sieci. Proces ten obejmuje utworzenie mapowania, które przekierowuje ruch z określonego portu na komputerze hosta do portu na emulowanym urządzeniu, z pominięciem wirtualnego routera.

Przekierowanie sieci możesz skonfigurować na 2 sposoby:

  1. Polecenia konsoli emulatora: użyj wbudowanej konsoli, aby skonfigurować mapowania portów dla uruchomionej instancji emulatora.
  2. Android Debug Bridge (adb): użyj poleceń adb, aby skonfigurować niezbędne reguły przekierowania portów.

Konfigurowanie przekierowania za pomocą konsoli emulatora

Każda instancja emulatora ma konsolę sterowania, z którą możesz się połączyć i wydawać polecenia specyficzne dla tej instancji. Użyj polecenia redir konsoli , aby skonfigurować przekierowanie zgodnie z potrzebami instancji emulatora.

Najpierw określ numer portu konsoli dla docelowej instancji emulatora. Na przykład numer portu konsoli pierwszej uruchomionej instancji emulatora to 5554. Następnie połącz się z konsolą docelowej instancji emulatora, podając jej numer portu konsoli w ten sposób:

    telnet localhost 5554

Po nawiązaniu połączenia musisz się uwierzytelnić, zanim skonfigurujesz przekierowanie. Szczegółowe informacje znajdziesz w artykule Rozpoczynanie i zatrzymywanie sesji konsoli. Po uwierzytelnieniu użyj polecenia redir, aby pracować z przekierowaniem.

Aby dodać przekierowanie, użyj tego polecenia:

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

gdzie <protocol> to tcp lub udp, a <host-port><guest- port> określają mapowanie między Twoim komputerem a emulowanym systemem.

Na przykład to polecenie konfiguruje przekierowanie, które obsługuje wszystkie przychodzące połączenia TCP z komputerem hosta (programisty) na adresie 127.0.0.1:5000 i przekazuje je do emulowanego systemu na adresie 10.0.2.15:6000:

    redir add tcp:5000:6000

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

Numery portów są ograniczone przez środowisko lokalne. Zwykle oznacza to, że nie możesz używać numerów portów hosta poniżej 1024 bez specjalnych uprawnień administratora. Nie będzie też można skonfigurować przekierowania dla portu hosta, który jest już używany przez inny proces na Twoim komputerze. W takim przypadku redir generuje komunikat o błędzie.

Konfigurowanie przekierowania za pomocą adb

Narzędzie Android Debug Bridge (adb) umożliwia przekierowywanie portów, co jest alternatywnym sposobem konfigurowania przekierowania sieci. Więcej informacji znajdziesz w artykule Konfigurowanie przekierowania portów w adbdokumentacji.

adb nie umożliwia obecnie usuwania przekierowań, z wyjątkiem zatrzymania serwera adb.

Instancje emulatora połączeń międzysieciowych

Aby umożliwić komunikację między instancjami emulatora, skonfiguruj przekierowanie sieciowe zgodnie z tymi instrukcjami.

Załóżmy, że Twoje środowisko wygląda tak:

  • A to komputer używany do programowania.
  • B to pierwsza instancja emulatora działająca na urządzeniu A.
  • C to druga instancja emulatora, która również działa na urządzeniu A.

Jeśli chcesz uruchomić na komputerze B serwer, z którym połączy się komputer C, skonfiguruj go w ten sposób:

  1. Skonfiguruj serwer na komputerze B, aby nasłuchiwał na porcie 10.0.2.15:<serverPort>.
  2. W konsoli B skonfiguruj przekierowanie z A: localhost:<localPort> na B: 10.0.2.15:<serverPort>.
  3. Na urządzeniu C połącz klienta z 10.0.2.2:<localPort>.

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

  • B słucha na 10.0.2.15:80.
  • W konsoli B wpisz redir add tcp:8080:80.
  • C łączy się z urządzeniem 10.0.2.2:8080.