Verbindung zu einem Android-Emulator auf einem Mac aus einer virtuellen Windows-Maschine heraus
Der Android-Emulator bietet vielseitige Netzwerkfunktionen, die für verschiedene Zwecke genutzt werden können, z. B. für die Verbindung mit einem Emulator, der auf einem Mac innerhalb einer virtuellen Windows-Maschine (VM) läuft. Dies ist nützlich, wenn Sie Windows in Parallels auf einem Mac ausführen. In diesem Szenario ist es erforderlich, den Emulator auf dem Mac zu verwenden, da er nicht in Parallels ausgeführt werden kann. Für Informationen zur Installation des Android-Emulators auf einem Mac siehe Installation.
Wichtig
Die Adresse 127.0.0.1 auf Ihrem Entwicklungscomputer entspricht der Loopback-Schnittstelle des Emulators.
Es gibt zwei Hauptansätze für die Verbindung zu einem Android-Emulator auf einem Mac aus einer Windows-VM heraus:
- Verwendung von
nc
zur Paketweiterleitung. Weitere Informationen finden Sie unter Verwenden Sie nc, um die Paketweiterleitung durchzuführen. - Verwenden der
ssh
Portweiterleitung. Weitere Informationen finden Sie unter Verwendung von SSH-Portweiterleitung.
In beiden Fällen wird die Android Debug Bridge (ADB) zur Verbindung mit dem Emulator verwendet. ADB ist ein Befehlszeilentool, das mit dem Android SDK Platform Tools-Paket gebündelt ist und mit dem Sie mit einem Gerät kommunizieren können. Der adb
Befehl erleichtert eine Vielzahl von Geräteaktionen, einschließlich der Verbindung mit Geräten. Für weitere Informationen über adb
siehe Android Debug Bridge (adb) auf developer.android.com.
Verwenden von nc zum Ausführen der Paketweiterleitung
Gehen Sie wie folgt vor, um von einer Windows-VM aus eine Verbindung zum Android-Emulator auf einem Mac herzustellen, indem Sie die Paketweiterleitung verwenden:
Starten Sie auf Ihrem Mac den Android-Emulator.
Öffnen Sie auf Ihrem Mac Terminal.
In Terminal den
adb
-Server beenden:adb kill-server
In Terminal geben Sie die vom Emulator verwendeten Ports an:
lsof -iTCP -sTCP:LISTEN -P | grep 'emulator\|qemu' emulator6 94105 macuser 20u IPv4 0xa8dacfb1d4a1b51f 0t0 TCP localhost:5555 (LISTEN) emulator6 94105 macuser 21u IPv4 0xa8dacfb1d845a51f 0t0 TCP localhost:5554 (LISTEN)
Der Emulator verwendet zwei aufeinander folgende TCP-Ports - einen geraden Port für Konsolenverbindungen und einen ungeraden Port für
adb
-Verbindungen. In der obigen Ausgabe achtet der Emulator auf Port 5555 aufadb
und auf Port 5554 auf Konsolenverbindungen.In Terminal verwenden Sie
nc
, um eingehende TCP-Pakete, die extern an Port 5555 (oder einem anderen Port) empfangen werden, an den ungeraden Port der Loopback-Schnittstelle weiterzuleiten und die ausgehenden Pakete in die andere Richtung zurückzuleiten:cd /tmp mkfifo backpipe nc -kl 5555 0<backpipe | nc 127.0.0.1 5555 > backpipe
In diesem Beispiel steht
127.0.0.1 5555
für den ungeraden Port der Loopback-Schnittstelle.Solange der Befehl
nc
in einem Terminalfenster ausgeführt wird, werden die Pakete wie erwartet weitergeleitet. Wenn Sie mit der Verwendung des Emulators fertig sind, können Sie dienc
Paketweiterleitung beenden, indem Sie CTRL+C im Terminalfenster drücken.Öffnen Sie in Ihrer Windows-VM die Eingabeaufforderung.
Stellen Sie in der Befehlszeile eine Verbindung mit dem Emulator her:
adb connect ip-address-of-the-mac:5555
Ersetzen Sie
ip-address-of-the-mac
in diesem Beispiel durch die IP-Adresse Ihres Macs und 5555 durch den Port, den Sie aus dem vorherigen Schritt verwendet haben.Hinweis
Der Befehlszeilenzugriff auf
adb
kann in Visual Studio über das Menüelement Tools > Android > Android Adb-Eingabeaufforderung... erreicht werden.
Wenn die Verbindung hergestellt ist, zeigt Visual Studio den Emulator als Debugziel unter Lokale Android-Geräte an, womit Sie Ihre App im Emulator bereitstellen können.
Verwenden der SSH-Portweiterleitung
Vorausgesetzt, dass Entfernte Anmeldung auf Ihrem Mac aktiviert ist, können Sie ssh
Portweiterleitung verwenden, um sich mit dem Emulator zu verbinden.
Wichtig
ssh
Für die Portweiterleitung müssen Sie einen SSH-Client auf Ihrer Windows-VM installiert haben. Eine Option besteht darin, Git für Windows zu installieren. Der ssh
-Befehl steht dann an der Git Bash-Eingabeaufforderung zur Verfügung.
Gehen Sie wie folgt vor, um eine Verbindung zum Android-Emulator auf einem Mac von einer virtuellen Windows-Maschine aus herzustellen, indem Sie ssh
-Portweiterleitung verwenden:
Starten Sie auf Ihrem Mac den Android-Emulator.
Öffnen Sie auf Ihrem Mac Terminal.
In Terminal den
adb
-Server beenden:adb kill-server
In Terminal geben Sie die vom Emulator verwendeten Ports an:
lsof -iTCP -sTCP:LISTEN -P | grep 'emulator\|qemu' emulator6 94105 macuser 20u IPv4 0xa8dacfb1d4a1b51f 0t0 TCP localhost:5555 (LISTEN) emulator6 94105 macuser 21u IPv4 0xa8dacfb1d845a51f 0t0 TCP localhost:5554 (LISTEN)
Der Emulator verwendet zwei aufeinander folgende TCP-Ports - einen geraden Port für Konsolenverbindungen und einen ungeraden Port für
adb
-Verbindungen. In der obigen Ausgabe achtet der Emulator auf Port 5555 aufadb
und auf Port 5554 auf Konsolenverbindungen.Öffnen Sie in Ihrer Windows-VM die Eingabeaufforderung.
Führen Sie in der Eingabeaufforderung
ssh
aus, um zwischen einem lokalen Port unter Windows und dem ungeraden Emulatorport auf der Loopbackschnittstelle des Macs die bidirektionale Portweiterleitung einzurichten:ssh -L localhost:15555:127.0.0.1:5555 mac-username@ip-address-of-the-mac
In diesem Beispiel bezeichnet
localhost:15555
den lokalen Port unter Windows und127.0.0.1 5555
den ungeraden Port auf der Loopbackschnittstelle.Ersetzen Sie
mac-username
durch Ihren Mac-Benutzernamen, der durch denwhoami
-Befehl abgerufen werden kann, undip-address-of-the-mac
durch die IP-Adresse Ihres Macs.Stellen Sie in der Eingabeaufforderung mithilfe des lokalen Ports eine Verbindung mit dem Emulator her:
adb connect localhost:15555
In diesem Beispiel bezeichnet
localhost:15555
den lokalen Port unter Windows.Hinweis
Der Befehlszeilenzugriff auf
adb
kann in Visual Studio über das Menüelement Tools > Android > Android Adb-Eingabeaufforderung... erreicht werden.
Wenn die Verbindung hergestellt ist, zeigt Visual Studio den Emulator als Debugziel unter Lokale Android-Geräte an, womit Sie Ihre App im Emulator bereitstellen können.