私はこの方法で仕事をしました:
Android Emulatorでifconfigを実行すると、ネットワークデバイスとしてbridge、eth0、eth1が表示されます。ここで、ブリッジには10.0.2.15があり、IPとeth0はアップしていますが、IPはありません。また、eth1はIPなしでダウンしています。
次に、ホストマシン上にTAPおよびブリッジデバイスを作成し、ホストマシン上で機能しているイーサネットカードのいずれかとTAPデバイスをブリッジします。
TAPデバイス(tap1)とそれをeth0でブリッジする(br1)は、以下の手順に従って作成できます。
$sudo ip tuntap add dev tap1 mode tap
$sudo ip link show dev tap1
$sudo brctl addbr br1
$sudo brctl addif br1 tap1
$sudo brctl addif br1 eth0
$sudo ip link set eth0 up
$sudo ip link set br1 up
$sudo brctl show
したがって、TAPが起動し、eth1が任意のdhcpサーバーに接続されている場合は、dhcpサーバーを起動します。dhcpサーバーが起動したら、以下のコマンドでエミュレーターを実行します。
$sudo ./emulator -avd <avd_name> -qemu -net nic,vlan=1 -net user,vlan=1,hostname=<hostname_you_want> -net nic,vlan=2,macaddr=<mac_id_of_eth1_of_android_emulator> -net tap,ifname=tap1,script=no,vlan=2
Androidエミュレータシェルで、以下のコマンドを実行します。
$netcfg
ip 0.0.0.0でeth1がダウンしているのを確認できるはずです。次に、コマンドの下で実行してeth1を起動します。
$netcfg eth1 dhcp
そして出来上がり!!! DHCPサーバーから割り当てられたIPアドレスを持つeth1があります。
それがうまくいくかどうか私に知らせてください!!!
これで、Androidエミュレーターに外部サーバーのIPアドレスのポートを開くプログラムがある場合、それはホストマシンのeth0を経由して外部サーバーに到達します。