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:
- Comandi della console dell'emulatore: utilizza la console integrata per configurare le mappature delle porte per l'istanza dell'emulatore in esecuzione.
- 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:
- Configura il server su B, in ascolto su
10.0.2.15:<serverPort>. - Nella console B, configura un reindirizzamento da A:
localhost:<localPort>a B:10.0.2.15:<serverPort>. - 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.