4 votes

Comment utiliser -net-tap avec l'émulateur Android sdk ?

J'essaie de créer un pont entre l'émulateur Android (à partir de Android sdk) et le système hôte en utilisant -net-tap. Existe-t-il un manuel de travail pour ce cas ? J'ai essayé de lancer l'émulateur avec -net-tap tap0 - tap0 est apparu dans le système hôte, mais aucune interface n'est apparue dans l'Android invité. J'ai également essayé -qemu -net tap,iface=tap1,script=no mais cela ne fonctionne pas non plus. J'ai vérifié /proc/kmsg il n'y a rien qui soit lié à la nouvelle interface.

La ligne cmd complète ressemble à /opt/android-sdk/emulator -avd test-x86 -accel off -no-audio -net-tap tap0 -qemu -net tap,ifname=tap1,script=no

Quelqu'un a une idée ?

0 votes

-net-tap tap0

3voto

Je pense que -net tap est l'ancienne méthode, utilisez -netdev tap avec le nouvel émulateur Android sdk et -device virtio-net-pci pour l'émulateur Android x86. Pour l'émulateur ARM, vous devez utiliser un autre dispositif.

Et vous devez installer le paquet de l'émulateur avec le sdkmanager comme ceci :

sdkmanager emulator

Vous pouvez alors utiliser l'émulateur situé dans /opt/Android-sdk/emulator/emulator.

Créez un pont réseau qui comprend une interface tap (tap0) pour l'émulateur et une interface ethernet (enp0s20u1) connectée à un réseau lan.

# ip addr flush dev enp0s20u1
# ip link set enp0s20u1 down
# ip tuntap add dev tap0 mode tap user $(whoami)
# ip link add br0 type bridge
# ip link set enp0s20u1 master br0
# ip link set tap0 master br0
# ip link set enp0s20u1 up
# ip link set tap0 up
# ip link set br0 up

Une vue d'ensemble rapide du pont.

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.0050b609a5d1       no              enp0s20u1
                                                        tap0

Démarrez un client dhcp sur le pont :

# dhcpcd br0

Vous pouvez ensuite connecter l'interface tap (tap0) à l'émulateur Android via les options -qemu lorsque vous lancez l'émulateur.

./opt/android-sdk/emulator/emulator \
  -avd android_25_x86 \
  -verbose -no-window \
  -qemu \
  -device virtio-net-pci,netdev=hn0,mac=52:55:00:d1:55:51 \
  -netdev tap,id=hn0,ifname=tap0,script=no,downscript=no

Normalement une nouvelle interface eth1 est présente dans l'émulateur Android. Et vous pouvez exécuter le binaire dhcpclient s'il est présent ou configurer une route statique vers votre réseau, alors cela fonctionne.

generic_x86:/ # ping -c 1 -I eth1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.1.60 eth1: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=17.1 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 17.160/17.160/17.160/0.000 ms

Mais j'ai quelques problèmes pour pinger l'émulateur depuis l'extérieur ou pour router tout le trafic dans l'émulateur vers le réseau hôte, voir mon autre post.

Connecter l'émulateur Android au réseau local

0 votes

Je reçois RTNETLINK answers: Device or resource busy quand j'appelle ip link set enp0s20u1 master br0

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X