Interconnecter des instances d'émulateur

Pour tester des applications impliquant des interactions multi-appareils, vous pouvez connecter plusieurs instances d'Android Emulator afin qu'elles puissent communiquer entre elles. La méthode pour établir une connexion dépend de la version de l'émulateur que vous utilisez.

Émulateurs Android version 36.5 et ultérieure

L'émulateur Android version 36.5 et ultérieures proposent un modèle de mise en réseau simplifié qui connecte les instances sur un réseau Wi-Fi partagé.

Avec cette pile réseau, plusieurs émulateurs apparaissent comme des appareils distincts sur le même réseau Wi-Fi virtuel. Cela leur permet de se découvrir et de communiquer entre eux automatiquement à l'aide de protocoles standards basés sur le Wi-Fi.

Les émulateurs peuvent se trouver les uns les autres sur le réseau virtuel à l'aide de technologies telles que Network Service Discovery (NSD) et Wi-Fi Direct.

Comme les émulateurs se trouvent sur le même réseau Wi-Fi, vous pouvez également trouver l'adresse IP spécifique d'un émulateur et vous y connecter directement depuis une autre instance d'émulateur. Pour obtenir l'adresse IP de l'interface Wi-Fi virtuelle (wlan0), exécutez la commande suivante depuis votre machine hôte :

adb shell ip addr show wlan0

Android Emulator avant la version 36.5

Si vous utilisez une version antérieure de l'émulateur Android, la communication directe entre les instances n'est pas possible par défaut. Chaque instance d'émulateur fonctionne derrière son propre routeur virtuel, ce qui l'isole du réseau local et des autres émulateurs.

Pour activer la communication, vous devez configurer manuellement la redirection réseau. Ce processus consiste à créer un mappage qui transfère le trafic d'un port spécifique de votre machine hôte vers un port de l'appareil émulé, en contournant le routeur virtuel.

Vous pouvez configurer la redirection réseau de deux manières :

  1. Commandes de la console de l'émulateur : utilisez la console intégrée pour configurer les mappages de ports pour l'instance d'émulateur en cours d'exécution.
  2. Android Debug Bridge (adb) : utilisez les commandes adb pour configurer les règles de transfert de port nécessaires.

Configurer la redirection via la console de l'émulateur

Chaque instance d'émulateur fournit une console de contrôle à laquelle vous pouvez vous connecter pour émettre des commandes spécifiques à cette instance. Utilisez la commande redir de la console pour configurer la redirection, si nécessaire, pour une instance d'émulateur.

Commencez par déterminer le numéro de port de la console pour l'instance d'émulateur cible. Par exemple, le numéro de port de la console pour la première instance d'émulateur lancée est 5554. Ensuite, connectez-vous à la console de l'instance d'émulateur cible en spécifiant son numéro de port, comme suit :

    telnet localhost 5554

Une fois connecté, vous devez vous authentifier avant de pouvoir configurer la redirection. Pour en savoir plus, consultez Démarrer et arrêter une session de console. Une fois que vous êtes authentifié, utilisez la commande redir pour effectuer la redirection.

Pour ajouter une redirection, utilisez la commande suivante :

    redir add <protocol>:<host-port>:<guest-port>

<protocol> correspond à tcp ou udp, et <host-port> et <guest- port> définissent le mappage entre votre ordinateur et le système émulé.

Par exemple, la commande suivante configure une redirection qui gère toutes les connexions TCP entrantes vers votre ordinateur hôte (ordinateur de développement) sur 127.0.0.1:5000 et les transmet au système émulé sur 10.0.2.15:6000 :

    redir add tcp:5000:6000

Pour supprimer une redirection, utilisez la commande redir del. Pour lister toutes les redirections d'une instance spécifique, utilisez redir list. Pour en savoir plus sur ces commandes et sur d'autres commandes de la console, consultez Envoyer des commandes à la console de l'émulateur.

Les numéros de port sont limités par votre environnement local. Cela signifie généralement que vous ne pouvez pas utiliser de numéros de port hôte inférieurs à 1024 sans droits d'administrateur spéciaux. En outre, vous ne pouvez pas configurer la redirection d'un port hôte déjà utilisé par un autre processus sur votre machine. Dans ce cas, redir génère un message d'erreur.

Configurer la redirection via adb

L'outil Android Debug Bridge (adb) propose un transfert de port, qui vous permet de configurer une redirection réseau. Pour en savoir plus, consultez la section Configurer le transfert de port dans la documentation adb.

adb ne permet pas de supprimer une redirection, sauf en arrêtant le serveur adb.

Interconnecter des instances d'émulateur

Pour permettre à une instance d'émulateur de communiquer avec une autre, configurez la redirection réseau comme décrit dans les étapes suivantes.

Supposons que votre environnement soit le suivant :

  • A correspond à votre ordinateur de développement.
  • B correspond à votre première instance d'émulateur, exécutée sur A.
  • C correspond à votre deuxième instance d'émulateur, également exécutée sur A.

Si vous souhaitez exécuter un serveur sur B, serveur auquel C se connectera, configurez-le comme suit :

  1. Configurez le serveur sur B, en écoutant 10.0.2.15:<serverPort>.
  2. Sur la console B, configurez une redirection de A: localhost:<localPort> vers B: 10.0.2.15:<serverPort>.
  3. Sur C, connectez le client à 10.0.2.2:<localPort>.

Par exemple, si vous souhaitez exécuter un serveur HTTP, sélectionnez <serverPort> comme 80 et <localPort> comme 8080 :

  • B écoute sur 10.0.2.15:80.
  • Dans la console B, émettez redir add tcp:8080:80.
  • C se connecte à 10.0.2.2:8080.