Partager via


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.

  1. Démarrez l’émulateur sur le Mac.

  2. Tuer le adb serveur sur le Mac :

    adb kill-server
    
  3. 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.

  4. 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 les nc 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 port 5555 (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. vmnet8est 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.

  5. 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, remplacez 5555 par l’autre port souhaité à l’étape 4. (Remarque : un moyen d’obtenir l’accès adb 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.

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

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

  3. 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é par whoami. Remplacez ip-address-of-the-mac par l’adresse IP du Mac.

  4. 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 adbla 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 !