Установить IP-адрес для эмулятора Android
У меня есть сценарий, где мне нужно запустить эмулятор Android с определенным IP-адресом? Можно ли так запустить эмулятор?
Я не хочу делать IP-переадресацию или что-то другое, потому что в эмуляторе запущена программа для Android, которая при загрузке настраивается с IP-адресом эмуляторов Android, присутствующим во время загрузки.
По умолчанию IP-адрес эмулятора 10.0.2.15, который мне нужно изменить. Также этот Ip установлен в init.goldfish.rc и init.goldfish.sh. Если я их поменяю, все равно ip андроида 10.0.2.15.
1 ответ
Я сделал работу таким образом:
В эмуляторе Android, если вы выполните команду ifconfig, вы увидите в качестве сетевых устройств bridge, eth0 и eth1. Где у моста 10.0.2.15, так как ip и eth0 работают, но без ip, а eth1 не работает без ip.
Теперь создайте устройства TAP и Bridge на вашем хост-компьютере и соедините ваше устройство TAP с любой из работающих карт Ethernet на вашем хост-компьютере.
Устройство TAP (tap1) и связывание (br1) его с eth0 можно создать, выполнив следующие шаги:
$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
Вы должны быть в состоянии увидеть eth1 вниз с ip 0.0.0.0, теперь запустите команду ниже, чтобы вызвать eth1:
$netcfg eth1 dhcp
И вуаля!!! у вас есть eth1 с IP-адресом, назначенным с сервера DHCP.
Дайте мне знать, если это работает!!!
Теперь, если у вас есть программа, открывающая порт эмулятора Android на IP-адресе внешнего сервера, она будет проходить через eth0 хост-машины на внешний сервер.