Configura la rete di Android Emulator

L'emulatore offre funzionalità di networking versatili per configurare complessi ambienti di modellazione e test per la tua app. Questa pagina Introduce l'architettura e le funzionalità di rete dell'emulatore.

Spazio degli indirizzi di rete

Ogni istanza dell'emulatore viene eseguita dietro un router virtuale o un servizio firewall che lo isola dalle interfacce e dalle impostazioni di rete della macchina di sviluppo e da internet. Un dispositivo emulato non è in grado di rilevare il tuo computer di sviluppo o altre istanze di emulatore sulla rete. Rileva solo che collegate tramite Ethernet a un router o a un firewall.

Il router virtuale per ogni istanza gestisce l'indirizzo di rete 10.0.2/24 spazio. Tutti gli indirizzi gestiti dal router sono sotto forma di 10.0.2.xx, dove xx è un numero. Gli indirizzi all'interno di questo spazio sono preallocata dall'emulatore o dal router come segue:

Indirizzo di rete Descrizione
10.0.2.1 Indirizzo router o gateway
10.0.2.2 Un alias speciale all'interfaccia di loopback dell'host (127.0.0.1 sul di sviluppo)
10.0.2.3 Primo server DNS
10.0.2.4 / 10.0.2.5 / 10.0.2.6 Secondo, terzo e quarto server DNS facoltativi
10.0.2.15 La rete del dispositivo emulato quando si è connessi tramite Ethernet
10.0.2.16 La rete del dispositivo emulata quando si è connessi tramite Wi-Fi
127.0.0.1 Interfaccia di loopback del dispositivo emulato

Le stesse assegnazioni di indirizzi vengono utilizzate da tutti gli emulatori in esecuzione di Compute Engine. Ciò significa che se due istanze sono in esecuzione contemporaneamente ciascuna macchina avrà il proprio router e, dietro il router, avrà un Indirizzo IP di 10.0.2.15. Le istanze sono isolate da un router e non possono rilevarsi a vicenda sulla stessa rete. Per informazioni su come per consentire alle istanze dell'emulatore di comunicare su TCP/UDP, consulta la sezione sull'interconnessione di istanze dell'emulatore.

L'indirizzo 127.0.0.1 sulla tua macchina di sviluppo corrisponde all'interfaccia di loopback dell'emulatore. Accedere ai servizi in esecuzione sull'interfaccia di loopback della tua macchina di sviluppo, utilizza lo speciale l'indirizzo 10.0.2.2.

Gli indirizzi preallocati di un dispositivo emulato vengono specifiche dell'emulatore Android e che probabilmente saranno molto diversi dispositivi (che probabilmente verranno tradotti dall'indirizzo di rete, in particolare dietro un router o un firewall).

Limitazioni della rete locale

Le app Android in esecuzione su un emulatore possono connettersi alla rete disponibile sul tuo la workstation. Tuttavia, le app si connettono tramite l'emulatore, non direttamente all'hardware e all'emulatore si comporta come una normale app sulla workstation. Ciò può causare alcune limitazioni:

  • La comunicazione con il dispositivo emulato potrebbe essere bloccata da un firewall programma in esecuzione sul tuo computer.
  • La comunicazione con il dispositivo emulato potrebbe essere bloccata da un altro firewall o router (fisico) a cui è connessa la macchina.

Il router virtuale dell'emulatore deve essere in grado di gestire tutti i protocolli TCP e Connessioni e messaggi UDP per conto del dispositivo emulato, a condizione che dell'ambiente di rete delle macchine di sviluppo. Non sono presenti limitazioni integrate sui numeri di porta o sugli intervalli, solo quelle imposte il sistema operativo e la rete host.

A seconda dell'ambiente, l'emulatore potrebbe non essere in grado di supportare altre (come ICMP, usato per "ping"). Attualmente, non supporta IGMP o multicast.

Usa il reindirizzamento di rete

Per comunicare con un'istanza dell'emulatore dietro il router virtuale, configurare il reindirizzamento di rete sul router virtuale. I client possono quindi connettersi a una porta ospite specificata sul router, mentre quest'ultimo indirizza il traffico da e verso quella porta alla porta host del dispositivo emulata.

Per configurare il reindirizzamento di rete, crea una mappatura tra host e ospite e indirizzi IP nell'istanza dell'emulatore. Esistono due modi per configurare reindirizzamento di rete: usando i comandi della console dell'emulatore e usando lo strumento Strumento Debug Bridge (adb), come descritto nelle sezioni seguenti.

Configura il reindirizzamento tramite la console dell'emulatore

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

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. Successivamente, connettiti alla console dell'istanza dell'emulatore di destinazione, specificando il numero di porta della console, come segue:

telnet localhost 5554

Dopo la connessione, devi eseguire l'autenticazione prima di poter configurare il reindirizzamento. Consulta Avvia e interrompi una sessione della console per i dettagli su come fare. Una volta eseguita l'autenticazione, utilizza il comando redir per lavorare con il reindirizzamento.

Per aggiungere un reindirizzamento, utilizza:

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

Dove <protocol> è tcp o udp, <host-port> e <guest-port> hanno impostato il mapping tra la tua macchina e il sistema emulato.

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

redir add tcp:5000:6000

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

Tieni presente che i numeri di porta sono limitati dall'ambiente locale. Questo di solito significa che non puoi utilizzare numeri di porta dell'host inferiori a 1024 senza privilegi amministrativi. Inoltre, non potrai impostare un reindirizzamento per una e una porta dell'host già utilizzata da un altro processo sul computer. In questo in questo caso, redir genera un messaggio di errore in tal senso.

Configura il reindirizzamento tramite ADB

Lo strumento Android Debug Bridge (adb) offre il port forwarding, una soluzione alternativa per configurare il reindirizzamento di rete. Per ulteriori informazioni, consulta Configurare il port forwarding nel adb documentazione.

Tieni presente che al momento adb non offre un modo per rimuovere un reindirizzamento. tranne l'arresto del server adb.

Configura impostazioni DNS dell'emulatore

All'avvio, l'emulatore legge l'elenco dei server DNS utilizzati dal tuo sistema attualmente in uso. Archivia quindi gli indirizzi IP di un massimo di quattro server e configurare alias sugli indirizzi emulati: 10.0.2.3, 10.0.2.4, 10.0.2.5 e 10.0.2.6, a seconda delle esigenze.

Su Linux e macOS, l'emulatore ottiene gli indirizzi dei server DNS analizzando il file /etc/resolv.conf. Su Windows, l'emulatore ottiene di indirizzi IP chiamando l'API GetNetworkParams(). Tieni presente che di solito significa che l'emulatore ignora i contenuti degli "host" file (/etc/hosts su Linux/macOS, %WINDOWS%/system32/HOSTS su Windows).

Quando avvii l'emulatore dalla riga di comando, puoi utilizzare -dns-server <serverList> per specificare manualmente indirizzi dei server DNS da utilizzare, dove <serverList> è separato da virgole elenco di nomi di server o indirizzi IP. Questa opzione potrebbe esserti utile se problemi di risoluzione DNS nella rete emulata (ad esempio, "Errore Host sconosciuto" visualizzato quando si utilizza il browser web).

Utilizza l'emulatore con un proxy

Su molte reti aziendali, le connessioni dirette a internet vengono rifiutate amministratori di rete. Le connessioni a internet devono invece passare attraverso proxy. Per accedere a internet su una rete con un requisito di proxy, l'emulatore deve sapere che esiste un proxy e che deve connettersi.

A causa della natura del protocollo HTTP, è necessaria una connessione diretta al server web e una connessione tramite un proxy può generare richieste GET diverse. L'emulatore riscrive in modo trasparente Ricevere richieste dal dispositivo virtuale prima di comunicare con il proxy in modo che funzioni.

Se l'emulatore deve accedere a internet tramite un server proxy, puoi configurare un proxy HTTP personalizzato dalla schermata Controlli estesi dell'emulatore:

  1. Con l'emulatore aperto, fai clic su Altro .
  2. Fai clic su Impostazioni e Proxy.
  3. Definisci le impostazioni del proxy HTTP.

In alternativa, puoi configurare un proxy dalla riga di comando utilizzando Opzione -http-proxy <proxy> all'avvio dell'emulatore. In questo caso, specifica le informazioni relative al proxy in <proxy> in uno dei seguenti formati:

http://<machineName>:<port>

oppure

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

L'opzione -http-proxy obbliga l'emulatore a utilizzare il valore specificato Proxy HTTP o HTTPS per tutte le connessioni TCP in uscita. Il reindirizzamento per UDP non è supportati.

In alternativa, puoi definire la variabile di ambiente http_proxy con il valore che vuoi utilizzare per <proxy>. In questo caso, non è necessario specificare un valore per <proxy> nel comando -http-proxy, ovvero l'emulatore verifica il valore della variabile di ambiente http_proxy e ne utilizza il valore automaticamente, se definito.

Puoi utilizzare l'opzione -debug-proxy per diagnosticare il proxy problemi di connessione.

Istanze dell'emulatore di interconnessione

Configura per consentire a un'istanza dell'emulatore di comunicare con un'altra reindirizzamento di rete come descritto di seguito.

Supponiamo che il tuo ambiente sia rappresentato come segue:

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

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

  1. Configura il server su B, ascoltando 10.0.2.15:<Portaserver>.
  2. Nella console B, configura un reindirizzamento da A:localhost:<localPort> a B:10.0.2.15:<Portaserver>.
  3. In C, fare in modo che il client si connetta a 10.0.2.2:<localPort>.

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

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

Invia una chiamata vocale o un SMS a un'altra istanza dell'emulatore

L'emulatore inoltra automaticamente chiamate vocali e messaggi SMS simulati da un'istanza a un'altra. Per inviare una chiamata vocale o un SMS, utilizza rispettivamente l'app Telefono o l'app per gli SMS. da uno degli emulatori.

Per avviare una chiamata vocale simulata a un'altra istanza dell'emulatore:

  1. Avvia l'app Telefono sull'istanza dell'emulatore di origine.
  2. Come numero da comporre, inserisci il numero di porta della console dell'istanza di destinazione.

    Puoi determina il numero di porta della console dell'istanza di destinazione controllando il titolo della finestra. se è in esecuzione in una finestra separata, ma non in una finestra degli strumenti. La il numero di porta della console è riportato come "Android Emulator (<porta>)".

    In alternativa, Il comando adb devices stampa un elenco dei dispositivi virtuali in esecuzione e la relativa porta della console numeri. Per ulteriori informazioni, consulta la sezione Query per dispositivi mobili.

  3. Fai clic sul pulsante di composizione. Viene visualizzata una nuova chiamata in entrata nell'istanza dell'emulatore di destinazione.

Per inviare un messaggio SMS a un'altra istanza dell'emulatore:

  1. Avvia l'app per gli SMS, se disponibile.
  2. Specifica come indirizzo SMS il numero di porta della console dell'istanza dell'emulatore di destinazione.
  3. Inserisci il testo del messaggio.
  4. Invia il messaggio. Il messaggio viene consegnato all'istanza dell'emulatore di destinazione.
  5. Puoi anche connetterti a una console di emulazione per simulare una chiamata vocale o un SMS in arrivo. Per ulteriori informazioni, vedi Emulazione di telefonia e Emulazione SMS.