Connessione a un emulatore Android in un Mac dall'interno di una macchina virtuale Windows

L'emulatore Android offre funzionalità di rete versatili che possono essere usate per scopi diversi, inclusa la connessione a un emulatore in esecuzione in un Mac dall'interno di una macchina virtuale Windows. Ciò è utile quando si esegue Windows in Parallels in un Mac. In questo scenario è necessario usare l'emulatore sul Mac perché non può essere eseguito in Parallels. Per informazioni sull'installazione dell'emulatore Android in un Mac, vedere Installazione.

Importante

L'indirizzo 127.0.0.1 nel computer di sviluppo corrisponde all'interfaccia di loopback dell'emulatore.

Esistono due approcci principali per la connessione a un emulatore Android in un Mac dall'interno di una macchina virtuale Windows:

  1. Utilizzo nc di per eseguire l'inoltro di pacchetti. Per altre informazioni, vedere Usare nc per eseguire l'inoltro di pacchetti.
  2. Uso del ssh port forwarding. Per altre informazioni, vedere Usare il port forwarding ssh.

In entrambi i casi, android Debug Bridge (ADB) viene usato per connettersi all'emulatore. ADB è uno strumento da riga di comando in bundle con il pacchetto Android SDK Platform Tools, che consente di comunicare con un dispositivo. Il adb comando facilita un'ampia gamma di azioni del dispositivo, tra cui la connessione ai dispositivi. Per altre informazioni su adb, vedere Android Debug Bridge (adb) in developer.android.com.

Usare nc per eseguire l'inoltro di pacchetti

Per connettersi all'emulatore Android in esecuzione in un Mac da una macchina virtuale Windows, usando l'inoltro di pacchetti, seguire questa procedura:

  1. Sul Mac avviare l'emulatore Android.

  2. Sul Mac aprire Terminale.

  3. In Terminale terminare il adb server:

    adb kill-server
    
  4. In Terminale identificare le porte usate dall'emulatore:

    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)
    

    L'emulatore usa una coppia di porte TCP sequenziali, ovvero una porta numerata pari per le connessioni della console e una porta numerata dispari per adb le connessioni. Nell'output precedente l'emulatore è adb in ascolto sulla porta 5555 e rimane in ascolto delle connessioni della console sulla porta 5554.

  5. In Terminale usare nc per inoltrare i pacchetti TCP in ingresso ricevuti esternamente sulla porta 5555 (o qualsiasi altra porta) alla porta con numeri dispari nell'interfaccia di loopback e per inoltrare i pacchetti in uscita in altro modo:

    cd /tmp
    mkfifo backpipe
    nc -kl 5555 0<backpipe | nc 127.0.0.1 5555 > backpipe
    

    In questo esempio, 127.0.0.1 5555 indica la porta con numeri dispari nell'interfaccia di loopback.

    A condizione che il nc comando continui a essere in esecuzione in una finestra del terminale, i pacchetti verranno inoltrati come previsto. Al termine dell'uso dell'emulatore, è possibile interrompere nc l'esecuzione dell'inoltro dei pacchetti premendo CTRL+C nella finestra Del terminale.

  6. Nella macchina virtuale Windows aprire prompt dei comandi.

  7. Al prompt dei comandi connettersi all'emulatore:

    adb connect ip-address-of-the-mac:5555
    

    Sostituire ip-address-of-the-mac in questo esempio con l'indirizzo IP del Mac e 5555 con la porta usata nel passaggio precedente.

    Nota

    L'accesso dalla riga di comando a adb può essere ottenuto in Visual Studio tramite la voce di menu Tools Android > Adb Command Prompt... (Strumenti > Android Adb Prompt dei comandi).

Al termine della connessione, Visual Studio visualizzerà l'emulatore come destinazione di debug in Dispositivi locali Android, che è possibile usare per distribuire l'app nell'emulatore.

Usare il port forwarding ssh

A condizione che l'accesso remoto sia abilitato nel Mac, è possibile usare il ssh port forwarding per connettersi all'emulatore.

Importante

ssh il port forwarding richiede l'installazione di un client SSH nella macchina virtuale Windows. Un'opzione consiste nell'installare Git per Windows. Il ssh comando sarà quindi disponibile nel prompt dei comandi di Git Bash .

Per connettersi all'emulatore Android in esecuzione in un Mac da una macchina virtuale Windows, usando ssh il port forwarding, seguire questa procedura:

  1. Sul Mac avviare l'emulatore Android.

  2. Sul Mac aprire Terminale.

  3. In Terminale terminare il adb server:

    adb kill-server
    
  4. In Terminale identificare le porte usate dall'emulatore:

    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)
    

    L'emulatore usa una coppia di porte TCP sequenziali, ovvero una porta numerata pari per le connessioni della console e una porta numerata dispari per adb le connessioni. Nell'output precedente l'emulatore è adb in ascolto sulla porta 5555 e rimane in ascolto delle connessioni della console sulla porta 5554.

  5. Nella macchina virtuale Windows aprire prompt dei comandi.

  6. Nel prompt dei comandi eseguire ssh per configurare l'inoltro delle porte bidirezionale tra una porta locale in Windows e la porta dell'emulatore con numeri dispari nell'interfaccia di loopback del Mac:

    ssh -L localhost:15555:127.0.0.1:5555 mac-username@ip-address-of-the-mac
    

    In questo esempio, localhost:15555 indica la porta locale in Windows e 127.0.0.1 5555 indica la porta con numeri dispari nell'interfaccia di loopback.

    Sostituire mac-username con il nome utente Mac, che può essere ottenuto con il whoami comando e ip-address-of-the-mac con l'indirizzo IP del Mac.

  7. Nel prompt dei comandi connettersi all'emulatore usando la porta locale:

    adb connect localhost:15555
    

    In questo esempio, localhost:15555 indica la porta locale in Windows

    Nota

    L'accesso dalla riga di comando a adb può essere ottenuto in Visual Studio tramite la voce di menu Tools Android > Adb Command Prompt... (Strumenti > Android Adb Prompt dei comandi).

    Attenzione

    Se usi la porta 5555 per la porta locale, adb pensi che l'emulatore sia in esecuzione in locale in Windows. Ciò non causa problemi in Visual Studio, ma in Visual Studio per Mac causa l'uscita dell'app immediatamente dopo l'avvio.

Al termine della connessione, Visual Studio visualizzerà l'emulatore come destinazione di debug in Dispositivi locali Android, che è possibile usare per distribuire l'app nell'emulatore.