Interconnessione delle istanze dell'emulatore

Per testare le applicazioni che prevedono interazioni su più dispositivi, puoi connettere più istanze di Android Emulator in modo che possano comunicare tra loro. Il metodo per stabilire una connessione dipende dalla versione dell'emulatore in uso.

Emulatori Android versione 36.5 e successive

Android Emulator versione 36.5 e successive offrono un modello di networking semplificato che connette le istanze tramite una rete Wi-Fi condivisa.

Con questo stack di rete, più emulatori vengono visualizzati come dispositivi distinti sulla stessa rete Wi-Fi virtuale. In questo modo possono rilevarsi e comunicare tra loro automaticamente utilizzando protocolli standard basati su Wi-Fi.

Gli emulatori possono trovarsi a vicenda sulla rete virtuale utilizzando tecnologie come Network Service Discovery (NSD) e Wi-Fi Direct.

Poiché gli emulatori si trovano sulla stessa rete Wi-Fi, puoi anche trovare l'indirizzo IP specifico di un emulatore e connetterti direttamente da un'altra istanza dell'emulatore. Per ottenere l'indirizzo IP dell'interfaccia Wi-Fi virtuale (wlan0), esegui il seguente comando dalla macchina host:

adb shell ip addr show wlan0

Android Emulator precedente alla versione 36.5

Se utilizzi una versione precedente di Android Emulator, la comunicazione diretta tra le istanze non è possibile per impostazione predefinita. Ogni istanza dell'emulatore opera dietro il proprio router virtuale, isolandola dalla rete locale e dagli altri emulatori.

Per abilitare la comunicazione, devi configurare manualmente il reindirizzamento di rete. Questo processo prevede la creazione di una mappatura che inoltra il traffico da una porta specifica sulla macchina host a una porta sul dispositivo emulato, bypassando il router virtuale.

Puoi configurare il reindirizzamento della rete in due modi:

  1. Comandi della console dell'emulatore: utilizza la console integrata per configurare le mappature delle porte per l'istanza dell'emulatore in esecuzione.
  2. Android Debug Bridge (adb): utilizza i comandi adb per configurare le regole di port forwarding necessarie.

Configurare il reindirizzamento tramite la console dell'emulatore

Ogni istanza dell'emulatore fornisce una console di controllo a cui puoi connetterti ed emettere comandi specifici per quell'istanza. Utilizza il comando della console redir per configurare il reindirizzamento in base alle esigenze di un'istanza dell'emulatore.

Innanzitutto, determina il numero di porta della console per l'istanza dell'emulatore di destinazione. Ad esempio, il numero di porta della console per la prima istanza dell'emulatore avviata è 5554. Quindi, connettiti alla console dell'istanza dell'emulatore di destinazione, specificando il numero di porta della console, come segue:

    telnet localhost 5554

Una volta connesso, devi eseguire l'autenticazione prima di poter configurare il reindirizzamento. Per informazioni dettagliate su come eseguire questa operazione, vedi Avviare e interrompere una sessione della console. Una volta autenticato, utilizza il comando redir per gestire il reindirizzamento.

Per aggiungere un reindirizzamento, utilizza questo comando:

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

Dove <protocol> è tcp o udp e <host-port> e <guest- port> impostano la mappatura tra la tua macchina e il sistema emulato.

Ad esempio, il seguente comando configura un reindirizzamento che gestisce tutte le connessioni TCP in entrata alla tua macchina host (sviluppo) su 127.0.0.1:5000 e le trasmette al sistema emulato su 10.0.2.15:6000:

    redir add tcp:5000:6000

Per eliminare un reindirizzamento, utilizza il comando redir del. Per elencare tutti i reindirizzamenti per un'istanza specifica, utilizza redir list. Per ulteriori informazioni su questi e altri comandi della console, vedi Inviare comandi della console dell'emulatore.

I numeri di porta sono limitati dal tuo ambiente locale. In genere, ciò significa che non puoi utilizzare numeri di porta host inferiori a 1024 senza privilegi amministrativi speciali. Inoltre, non potrai configurare un reindirizzamento per una porta host già in uso da un altro processo sul tuo computer. In questo caso, redir genera un messaggio di errore in tal senso.

Configurare il reindirizzamento tramite ADB

Lo strumento Android Debug Bridge (adb) fornisce l'inoltro delle porte, un modo alternativo per configurare il reindirizzamento di rete. Per saperne di più, consulta la sezione Configura l'inoltro delle porte nella documentazione di adb.

adb al momento non offre un modo per rimuovere un reindirizzamento, se non arrestando il server adb.

Istanze dell'emulatore Interconnect

Per consentire a un'istanza dell'emulatore di comunicare con un'altra, configura il reindirizzamento di rete come descritto nei seguenti passaggi.

Supponiamo che il tuo ambiente sia il seguente:

  • A è la tua macchina di sviluppo.
  • B è la tua prima istanza dell'emulatore, in esecuzione su A.
  • C è la seconda istanza dell'emulatore, in esecuzione anche su A.

Se vuoi eseguire un server su B a cui si connetterà C, configuralo come segue:

  1. Configura il server su B, in ascolto su 10.0.2.15:<serverPort>.
  2. Nella console B, configura un reindirizzamento da A: localhost:<localPort> a B: 10.0.2.15:<serverPort>.
  3. In C, connetti il client a 10.0.2.2:<localPort>.

Ad esempio, se vuoi eseguire un server HTTP, seleziona <serverPort> come 80 e <localPort> come 8080:

  • B ascolta su 10.0.2.15:80.
  • Sulla console B, esegui il comando redir add tcp:8080:80.
  • C si connette a 10.0.2.2:8080.