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:

  1. Verwendung von nc zur Paketweiterleitung. Weitere Informationen finden Sie unter Verwenden Sie nc, um die Paketweiterleitung durchzuführen.
  2. 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:

  1. Starten Sie auf Ihrem Mac den Android-Emulator.

  2. Öffnen Sie auf Ihrem Mac Terminal.

  3. In Terminal den adb-Server beenden:

    adb kill-server
    
  4. 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 auf adb und auf Port 5554 auf Konsolenverbindungen.

  5. 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 die ncPaketweiterleitung beenden, indem Sie CTRL+C im Terminalfenster drücken.

  6. Öffnen Sie in Ihrer Windows-VM die Eingabeaufforderung.

  7. 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:

  1. Starten Sie auf Ihrem Mac den Android-Emulator.

  2. Öffnen Sie auf Ihrem Mac Terminal.

  3. In Terminal den adb-Server beenden:

    adb kill-server
    
  4. 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 auf adb und auf Port 5554 auf Konsolenverbindungen.

  5. Öffnen Sie in Ihrer Windows-VM die Eingabeaufforderung.

  6. 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 und 127.0.0.1 5555 den ungeraden Port auf der Loopbackschnittstelle.

    Ersetzen Sie mac-username durch Ihren Mac-Benutzernamen, der durch den whoami-Befehl abgerufen werden kann, und ip-address-of-the-mac durch die IP-Adresse Ihres Macs.

  7. 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.