Est-il possible de se connecter à des émulateurs Android exécutés sur un Mac à partir d’une machine virtuelle Windows ?
Pour vous connecter à l’émulateur Android s’exécutant sur un Mac à partir d’une machine virtuelle Windows, procédez comme suit :
Remarque
Nous vous recommandons d’utiliser un émulateur Android qui n’inclut pas le Google Play Store.
Démarrez l’émulateur sur le Mac.
Tuer le
adb
serveur sur le Mac :adb kill-server
Notez que l’émulateur écoute sur 2 ports TCP sur l’interface réseau de bouclage :
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)
Le port numéroté impair est celui utilisé pour se connecter à
adb
. Voir aussi https://developer.android.com/tools/devices/emulator.html#emulatornetworking.Option 1 : Permet
nc
de transférer des paquets TCP entrants reçus en externe sur le port 5555 (ou tout autre port que vous souhaitez) vers le port numéroté impair sur l’interface de bouclage (127.0.0.1 5555 dans cet exemple) et pour transférer les paquets sortants de l’autre façon :cd /tmp mkfifo backpipe nc -kl 5555 0<backpipe | nc 127.0.0.1 5555 > backpipe
Tant que les
nc
commandes restent en cours d’exécution dans une fenêtre de terminal, les paquets sont transférés comme prévu. Vous pouvez taper Control-C dans la fenêtre terminale pour quitter lesnc
commandes une fois que vous avez terminé à l’aide de l’émulateur.(L’option 1 est généralement plus facile que l’option 2, surtout si La sécurité des préférences > système et le pare-feu de confidentialité > sont activés.)
Option 2 : Permet
pfctl
de rediriger les paquets TCP à partir du port5555
(ou tout autre port que vous souhaitez) sur l’interface réseau partagée vers le port numéroté impair sur l’interface de bouclage (127.0.0.1:5555
dans cet exemple) :sed '/rdr-anchor/a rdr pass on vmnet8 inet proto tcp from any to any port 5555 -> 127.0.0.1 port 5555' /etc/pf.conf | sudo pfctl -ef -
Cette commande configure le transfert de port à l’aide du
pf packet filter
service système. Les sauts de ligne sont importants. Veillez à les conserver intacts lors du collage de copie. Vous devez également ajuster le nom de l’interface à partir de vmnet8 si vous utilisez Parallels.vmnet8
est le nom de l’appareil NAT spécial pour le mode réseau partagé dans VMWare Fusion. L’interface réseau appropriée dans Parallels est probablement vnic0.Connecter à l’émulateur à partir de l’ordinateur Windows :
C:\> adb connect ip-address-of-the-mac:5555
Remplacez « ip-address-of-the-mac » par l’adresse IP du Mac, par exemple, comme indiqué par
ifconfig vmnet8 | grep 'inet '
. Si nécessaire, remplacez5555
par l’autre port souhaité à l’étape 4. (Remarque : un moyen d’obtenir l’accèsadb
en ligne de commande est via l’invite de commandes > Android > Android Adb android dans Visual Studio.)
Autre technique à l’aide de ssh
Si vous avez activé la connexion à distance sur le Mac, vous pouvez utiliser ssh
le transfert de port pour vous connecter à l’émulateur.
Installez un client SSH sur Windows. Une option consiste à installer Git pour Windows. La
ssh
commande sera ensuite disponible dans l’invite de commandes Git Bash .Suivez les étapes 1 à 3 ci-dessus pour démarrer l’émulateur, tuer le
adb
serveur sur mac et identifier les ports de l’émulateur.Exécutez
ssh
sur Windows pour configurer le transfert de port bidirectionnel entre un port local sur Windows (localhost:15555
dans cet exemple) et le port de l’émulateur numéroté impair sur l’interface de bouclage mac (127.0.0.1:5555
dans cet exemple) :C:\> ssh -L localhost:15555:127.0.0.1:5555 mac-username@ip-address-of-the-mac
Remplacez
mac-username
par votre nom d’utilisateur Mac comme indiqué parwhoami
. Remplacezip-address-of-the-mac
par l’adresse IP du Mac.Connecter à l’émulateur à l’aide du port local sur Windows :
C:\> adb connect localhost:15555
(Remarque : un moyen simple d’obtenir l’accès
adb
en ligne de commande est via l’invite de commandes Android > Android Adb d’Outils > dans Visual Studio.)
Attention : si vous utilisez le port 5555
pour le port local, adb
pensez que l’émulateur s’exécute localement sur Windows. Cela ne provoque aucun problème dans Visual Studio, mais dans Visual Studio pour Mac il provoque la sortie de l’application immédiatement après le lancement.
Une autre technique n’est adb -H
pas encore prise en charge
En théorie, une autre approche consisterait à utiliser adb
la fonctionnalité intégrée de connexion à un adb
serveur s’exécutant sur un ordinateur distant (voir par exemple https://stackoverflow.com/a/18551325).
Toutefois, les extensions IDE Xamarin.Android ne fournissent pas actuellement un moyen de configurer cette option.
Informations sur le contact
Ce document traite du comportement actuel à compter de mars 2016. La technique décrite dans ce document ne fait pas partie de la suite de tests stables pour Xamarin, afin qu’elle puisse s’arrêter à l’avenir.
Si vous remarquez que la technique ne fonctionne plus ou si vous remarquez d’autres erreurs dans le document, n’hésitez pas à ajouter à la discussion sur le fil de forum suivant : http://forums.xamarin.com/discussion/33702/android-emulator-from-host-device-inside-windows-vm Merci !