L'émulateur d'Android Studio n'a pas de connexion réseau ?

Aucune connexion réseau sur l'émulateur Android ?

TDLR: Vérifiez les DNS de votre ordinateur, ils peuvent empêcher la connexion réseau de l'émulateur Android

Lorsqu'il s'agit de développer des applications Android, l'émulateur s'impose comme le meilleur choix. Il offre les mêmes fonctionnalités qu'un téléphone ou qu'une tablette, tout en ayant des temps de transfert réduits et des performances à la hauteur. Le temps où l'émulateur Android était pointé du doigt pour ses lenteurs est désormais révolu, puisque Genymotion a dans un premier temps offert une alternative crédible, avant que Google ne rehausse le niveau depuis le passage à Android Studio 2.0. L'idée n'est pas ici de confronter les deux solutions, puisqu'elles offrent des fonctionnalités similaires.

Les deux émulateurs savent très bien gérer des proxys qui sont souvent utilisés en entreprise. Dans Genymotion, il faut en saisir la configuration dans l'application pour télécharger les images et à nouveau depuis chaque émulateur en la saisissant sur la configuration du Wifi "WiredSSID". Du côté de l'émulateur Android, il en hérite de la configuration d'Android Studio, mais il est possible de la changer à la main.

Pas d'internet sur l'émulateur Android ?

Après avoir acheté mon iMac, j'ai installé les deux émulateurs. Il est relié à ma Livebox par un câble Ethernet, mais pourrait l'être en WiFi également. Sur Genymotion, aucun problème, tout a fonctionné du premier coup. En revanche sur l'émulateur Android : impossible d'accéder au réseau extérieur. L'icône WiFi dans la barre de statut a un "x" indiquant l'impossibilité d'accéder à Internet.

Ma configuration n'a rien de particulier : pas de proxy et mon MacBook n'avait jamais rencontré ce genre de problème auparavant. Sachant que Genymotion fonctionne correctement, l'émulateur Android semble être la seule victime ici. J'ai donc essayé de forcer l'absence de proxy depuis l'écran de configuration :

L'écran de configuration du proxy sur l'émulateur Android

Le résultat était exactement le même. Me vient alors l'idée de lancer l'émulateur depuis la ligne de commande et non plus par l'intermédiaire d'Android Studio :

emulator -avd Nexus_5X_API_26 -no-snapshot -dns-server 8.8.8.8 -netfast

Cette commande force un "Cold boot" (n'essaie pas de restaurer l'état de l'émulateur), donne l'adresse d'un DNS Google et force la connexion. Et par magie, l'émulateur se met à fonctionner 🧐.

En relançant depuis Android Studio et même en forçant un Cold boot, l'émulateur persévère et ne communique pas.

La cause : les serveurs DNS

Par déduction, il ne peut que s'agir des DNS. Or l'émulateur hérite de la configuration système qui est fournie sur Mac et Linux par l'intermédiaire du fichier /etc/resolv.conf. Dans mon cas, les DNS étaient envoyés par ma Livebox.

Sur Linux, le fichier /etc/resolv.conf peut être modifié directement pour lui donner les serveurs Google 8.8.8.8 et 8.8.4.4 (ou d'autres). Sur Mac, il faut se rendre dans les Préférences Système -> Réseau -> Choisir l'interface connectée -> Avancée -> DNS :

L'écran de configuration des DNS sur Mac (iMac / Macbook)

La conclusion du jour : vérifiez bien les serveurs DNS utilisés sur votre ordinateur !