Der Emulator bietet vielseitige Netzwerkfunktionen, mit denen Sie komplexe Modellierungs- und Testumgebungen für Ihre Anwendung einrichten können. Auf dieser Seite werden die Netzwerkarchitektur und die Funktionen des Emulators vorgestellt.
Netzwerkadressraum
Jede Instanz des Emulators wird hinter einem virtuellen Router oder einem Firewalldienst ausgeführt, der sie von den Netzwerkschnittstellen und Einstellungen der Entwicklungsmaschine sowie vom Internet isoliert. Ein emuliertes Gerät kann Ihre Entwicklungsmaschine oder andere Emulatorinstanzen im Netzwerk nicht erkennen. Es erkennt nur, dass es über das Ethernet mit einem Router oder einer Firewall verbunden ist.
Der virtuelle Router für jede Instanz verwaltet den Netzwerkadressraum 10.0.2/24. Alle vom Router verwalteten Adressen haben das Format 10.0.2.xx, wobei xx eine Zahl ist. Die Adressen in diesem Bereich werden vom Emulator oder Router vorab wie folgt zugewiesen:
Netzwerkadresse | Beschreibung |
---|---|
10.0.2.1 | Router- oder Gateway-Adresse |
10.0.2.2 | Spezieller Alias für Ihre Host-Loopback-Schnittstelle (127.0.0.1 auf Ihrer Entwicklungsmaschine) |
10.0.2.3 | Erster DNS-Server |
10.0.2.4 / 10.0.2.5 / 10.0.2.6 | Optionaler zweiter, dritter und vierter DNS-Server |
10.0.2.15 | Das emulierte Gerätenetzwerk bei einer Ethernetverbindung |
10.0.2.16 | Das emulierte Gerätenetzwerk bei Verbindung über WLAN |
127.0.0.1 | Die emulierte Loopback-Schnittstelle des Geräts |
Von allen ausgeführten Emulatorinstanzen werden dieselben Adresszuweisungen verwendet. Wenn also zwei Instanzen gleichzeitig auf Ihrem Computer ausgeführt werden, hat jede einen eigenen Router, der dahinter die IP-Adresse 10.0.2.15 hat. Die Instanzen sind durch einen Router isoliert und können sich nicht im selben Netzwerk erkennen. Informationen dazu, wie Emulatorinstanzen über TCP/UDP kommunizieren können, finden Sie im Abschnitt zum Verbinden von Emulatorinstanzen.
Die Adresse 127.0.0.1 auf Ihrem Entwicklungscomputer entspricht der Loopback-Schnittstelle des Emulators. Für den Zugriff auf Dienste, die auf der Loopback-Schnittstelle des Entwicklungsrechners ausgeführt werden, verwenden Sie stattdessen die Sonderadresse 10.0.2.2.
Die vorab zugewiesenen Adressen eines emulierten Geräts sind spezifisch für den Android-Emulator und unterscheiden sich wahrscheinlich stark auf echten Geräten, für die wahrscheinlich auch Netzwerkadressen übersetzt werden, insbesondere hinter einem Router oder einer Firewall.
Einschränkungen für lokale Netzwerke
Android-Apps, die auf einem Emulator ausgeführt werden, können sich mit dem auf Ihrer Workstation verfügbaren Netzwerk verbinden. Anwendungen stellen jedoch über den Emulator und nicht direkt eine Verbindung zur Hardware her. Der Emulator funktioniert wie eine normale Anwendung auf Ihrer Workstation. Dies kann zu einigen Einschränkungen führen:
- Die Kommunikation mit dem emulierten Gerät wird möglicherweise durch ein auf Ihrem Computer ausgeführtes Firewallprogramm blockiert.
- Die Kommunikation mit dem emulierten Gerät kann durch eine andere (physische) Firewall oder einen anderen Router blockiert werden, mit dem Ihr Computer verbunden ist.
Der virtuelle Router des Emulators sollte alle ausgehenden TCP- und UDP-Verbindungen und -Nachrichten im Namen des emulierten Geräts verarbeiten können, sofern die Netzwerkumgebung Ihres Entwicklungsmaschinen dies zulässt. Es gibt keine integrierten Beschränkungen für Portnummern oder -bereiche, sondern nur für die, die von Ihrem Hostbetriebssystem und Netzwerk auferlegt werden.
Je nach Umgebung unterstützt der Emulator möglicherweise keine anderen Protokolle (z. B. ICMP, das für das „Pingen“) verwendet wird. Derzeit unterstützt der Emulator weder IGMP noch Multicast.
Netzwerkweiterleitung verwenden
Wenn Sie mit einer Emulatorinstanz hinter ihrem virtuellen Router kommunizieren möchten, richten Sie auf dem virtuellen Router die Netzwerkumleitung ein. Clients können dann eine Verbindung zu einem bestimmten Gastport auf dem Router herstellen, während der Router Traffic zu und von diesem Port an den emulierten Gerätehost-Port weiterleitet.
Erstellen Sie zum Einrichten der Netzwerkweiterleitung eine Zuordnung der Ports und Adressen von Host und Gast auf der Emulatorinstanz. Es gibt zwei Möglichkeiten, die Netzwerkweiterleitung einzurichten: mithilfe der Emulator-Konsolenbefehle und mit dem Android Debug Bridge-Tool (adb
), wie in den folgenden Abschnitten beschrieben.
Weiterleitung über die Emulatorkonsole einrichten
Jede Emulatorinstanz stellt eine Steuerkonsole bereit, zu der Sie eine Verbindung herstellen und für diese Instanz spezifische Befehle ausgeben können. Verwenden Sie den Konsolenbefehl redir
, um die Weiterleitung nach Bedarf für eine Emulatorinstanz einzurichten.
Ermitteln Sie zuerst die Konsolen-Portnummer für die Zielemulatorinstanz. Beispiel: Die Portnummer der Konsole für die erste gestartete Emulatorinstanz lautet 5554. Stellen Sie als Nächstes eine Verbindung zur Konsole der Zielemulatorinstanz her. Geben Sie dabei die Konsolen-Portnummer wie folgt an:
telnet localhost 5554
Nach der Verbindung müssen Sie sich authentifizieren, bevor Sie die Weiterleitung einrichten können. Weitere Informationen dazu finden Sie unter Konsolensitzung starten und beenden. Nach der Authentifizierung verwenden Sie den Befehl redir
, um mit der Weiterleitung zu arbeiten.
So fügen Sie eine Weiterleitung hinzu:
redir add <protocol>:<host-port>:<guest-port>
Dabei ist <protocol>
entweder tcp
oder udp
und <host-port>
und <guest-port>
legen die Zuordnung zwischen Ihrem Computer und dem emulierten System fest.
Mit dem folgenden Befehl wird beispielsweise eine Weiterleitung eingerichtet, die alle eingehenden TCP-Verbindungen zu Ihrem Host-Computer (Entwicklungscomputer) unter 127.0.0.1:5000 verarbeitet und an das emulierte System am 10.0.2.15:6000 übergibt:
redir add tcp:5000:6000
Verwenden Sie den Befehl redir del
, um eine Weiterleitung zu löschen. Verwenden Sie redir
list
, um alle Weiterleitungen für eine bestimmte Instanz aufzulisten. Weitere Informationen zu diesen und anderen Konsolenbefehlen finden Sie unter Emulator-Konsolenbefehle senden.
Beachten Sie, dass Portnummern durch Ihre lokale Umgebung eingeschränkt sind. Dies bedeutet in der Regel, dass Sie Host-Portnummern unter 1024 ohne spezielle Administratorberechtigungen nicht verwenden können. Außerdem können Sie keine Weiterleitung für einen Hostport einrichten, der bereits von einem anderen Prozess auf Ihrem Computer verwendet wird. In diesem Fall gibt redir
eine entsprechende Fehlermeldung aus.
Weiterleitung über ADB einrichten
Das Android Debug Bridge-Tool (adb
) bietet eine Portweiterleitung, eine alternative Möglichkeit, die Netzwerkweiterleitung einzurichten. Weitere Informationen finden Sie unter Portweiterleitung einrichten in der adb
-Dokumentation.
Beachten Sie, dass adb
derzeit keine Möglichkeit bietet, eine Weiterleitung zu entfernen, es sei denn, Sie beenden den adb
-Server.
DNS-Einstellungen des Emulators konfigurieren
Beim Start liest der Emulator die Liste der DNS-Server, die Ihr System derzeit verwendet. Anschließend werden die IP-Adressen von bis zu vier Servern in dieser Liste gespeichert und je nach Bedarf Aliasse für die emulierten Adressen 10.0.2.3, 10.0.2.4, 10.0.2.5 und 10.0.2.6 eingerichtet.
Unter Linux und macOS erhält der Emulator die Adressen des DNS-Servers durch Parsen der Datei /etc/resolv.conf
. Unter Windows ruft der Emulator die Adressen durch Aufrufen der GetNetworkParams()
API ab. Dies bedeutet in der Regel, dass der Emulator den Inhalt der „Hosts“-Datei ignoriert (/etc/hosts
unter Linux/macOS, %WINDOWS%/system32/HOSTS
unter Windows).
Wenn Sie den Emulator über die Befehlszeile starten, können Sie mit der Option -dns-server <serverList>
die Adressen der zu verwendenden DNS-Server manuell angeben. <serverList>
ist dabei eine durch Kommas getrennte Liste von Servernamen oder IP-Adressen. Diese Option kann nützlich sein, wenn im emulierten Netzwerk Probleme mit der DNS-Auflösung auftreten (z. B. die Meldung „Unbekannter Host“, die im Webbrowser angezeigt wird).
Emulator mit Proxy verwenden
In vielen Unternehmensnetzwerken werden direkte Verbindungen zum Internet von Netzwerkadministratoren abgelehnt. Stattdessen müssen Internetverbindungen über einen bestimmten Proxy geleitet werden. Für den Zugriff auf das Internet in einem Netzwerk mit einer Proxyanforderung muss der Emulator wissen, dass es einen Proxy gibt und dass er eine Verbindung dazu herstellen muss.
Aufgrund der Beschaffenheit von HTTP führen eine direkte Webserververbindung und eine Verbindung über einen Proxy zu unterschiedlichen GET-Anfragen. Der Emulator schreibt die GET-Anfragen vom virtuellen Gerät transparent neu, bevor er mit dem Proxy kommuniziert, damit es funktioniert.
Wenn der Emulator über einen Proxyserver auf das Internet zugreifen muss, können Sie über den Bildschirm Erweiterte Steuerelemente des Emulators einen benutzerdefinierten HTTP-Proxy konfigurieren:
- Klicken Sie bei geöffnetem Emulator auf Mehr
.
- Klicken Sie auf Einstellungen und Proxy.
- Legen Sie Ihre HTTP-Proxy-Einstellungen fest.
![](https://developer.android.com/static/studio/images/run/emulator-proxy-settings_2x.png?authuser=6&hl=de)
Alternativ können Sie einen Proxy über die Befehlszeile mit der Option -http-proxy <proxy>
konfigurieren, wenn Sie den Emulator starten.
Geben Sie in diesem Fall Proxy-Informationen in <proxy>
in einem der folgenden Formate an:
http://<machineName>:<port>
oder
http://<username>:<password>@<machineName>:<port>
Die Option -http-proxy
zwingt den Emulator, den angegebenen HTTP- oder HTTPS-Proxy für alle ausgehenden TCP-Verbindungen zu verwenden. Die Weiterleitung für UDP wird nicht unterstützt.
Alternativ können Sie die Umgebungsvariable http_proxy
mit dem Wert definieren, den Sie für <proxy>
verwenden möchten. In diesem Fall müssen Sie im Befehl -http-proxy
keinen Wert für <proxy>
angeben. Der Emulator prüft den Wert der Umgebungsvariablen http_proxy
beim Start und verwendet ihn automatisch, sofern definiert.
Mit der Option -debug-proxy
können Sie Proxy-Verbindungsprobleme diagnostizieren.
Interconnect-Emulatorinstanzen
Damit eine Emulatorinstanz mit einer anderen kommunizieren kann, richten Sie wie unten beschrieben die Netzwerkumleitung ein.
Angenommen, Ihre Umgebung wird so dargestellt:
- A ist Ihre Entwicklungsmaschine.
- B ist Ihre erste Emulatorinstanz, die auf A ausgeführt wird.
- C ist Ihre zweite Emulatorinstanz, die ebenfalls auf A ausgeführt wird.
Wenn Sie einen Server auf B ausführen möchten, zu dem C eine Verbindung herstellt, richten Sie ihn so ein:
- Richten Sie den Server auf B ein und überwachen Sie 10.0.2.15:<serverPort>.
- Richten Sie in der B-Konsole eine Weiterleitung von A:localhost:<localPort> zu B:10.0.2.15:<serverPort> ein.
- Auf C: Lassen Sie den Client eine Verbindung zu 10.0.2.2:<localPort> herstellen.
Wenn Sie beispielsweise einen HTTP-Server ausführen möchten, wählen Sie <serverPort>
für 80 und <localPort>
für 8080 aus:
- B hört am 10.0.2.15:80 zu.
- Führen Sie in der B-Konsole den Fehler
redir add tcp:8080:80.
aus. - C stellt eine Verbindung zu 10.0.2.2:8080 her.
Sprachanruf oder SMS an eine andere Emulatorinstanz senden
Der Emulator leitet simulierte Sprachanrufe und SMS-Nachrichten automatisch von einer Instanz an eine andere weiter. Verwenden Sie zum Senden eines Sprachanrufs oder einer SMS die Telefon-App bzw. SMS-App von einem der Emulatoren.
So initiieren Sie einen simulierten Sprachanruf an eine andere Emulatorinstanz:
- Starten Sie die Telefon-App auf der ursprünglichen Emulatorinstanz.
Geben Sie als zu wählende Nummer die Konsolenportnummer der Zielinstanz ein.
Sie können die Konsolenportnummer der Zielinstanz anhand des Fenstertitels ermitteln, sofern sie in einem separaten Fenster ausgeführt wird, nicht aber, wenn sie in einem Toolfenster ausgeführt wird. Die Portnummer der Konsole wird als „Android-Emulator (<port>)“ gemeldet.
Alternativ gibt der Befehl
adb devices
eine Liste der ausgeführten virtuellen Geräte und der zugehörigen Konsolenportnummern aus. Weitere Informationen findest du unter Geräteabfrage.- Klicken Sie auf die Telefonschaltfläche. In der Zielemulatorinstanz wird ein neuer eingehender Anruf angezeigt.
So senden Sie eine SMS an eine andere Emulatorinstanz:
- Starten Sie die SMS-App, falls verfügbar.
- Geben Sie die Konsolenportnummer der Zielemulatorinstanz als SMS-Adresse an.
- Geben Sie den Nachrichtentext ein.
- Senden Sie die Nachricht. Die Nachricht wird an die Zielemulatorinstanz zugestellt.
Du kannst auch eine Verbindung zu einer Emulatorkonsole herstellen, um einen eingehenden Sprachanruf oder eine eingehende SMS zu simulieren. Weitere Informationen finden Sie unter Telefonieemulation und SMS-Emulation.