Установить 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 хост-машины на внешний сервер.

Другие вопросы по тегам