Connettersi 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:
- Utilizzo
nc
di per eseguire l'inoltro di pacchetti. Per altre informazioni, vedere Usare nc per eseguire l'inoltro di pacchetti. - 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:
Sul Mac avviare l'emulatore Android.
Sul Mac aprire Terminale.
In Terminale terminare il
adb
server:adb kill-server
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.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 interromperenc
l'esecuzione dell'inoltro dei pacchetti premendo CTRL+C nella finestra Del terminale.Nella macchina virtuale Windows aprire prompt dei comandi.
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:
Sul Mac avviare l'emulatore Android.
Sul Mac aprire Terminale.
In Terminale terminare il
adb
server:adb kill-server
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.Nella macchina virtuale Windows aprire prompt dei comandi.
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 e127.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 ilwhoami
comando eip-address-of-the-mac
con l'indirizzo IP del Mac.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 WindowsNota
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.