Genymotion模拟器每次启动时都会收到不同的IP

时间:2016-05-02 15:07:14

标签: android virtualbox genymotion

我最近注意到 Genymotion模拟器虚拟框配置存在问题。到目前为止,我只使用了一个genymotion模拟器,一旦我开始一直有一个静态IP地址,我的Java脚本自动化测试没有给我任何问题,因为它被配置为完全调用此IP并运行测试模拟器。最近我决定在我的列表中添加其他几个模拟器,现在这些IP搞砸了。有时,来自一个设备的IP(如果它关闭)被分配给另一个仿真器,或者来自最后创建的仿真器的IP被分配给第一个,依此类推。我们假设列表中有4个设备;我注意到优先顺序如何分配IP。如果我启动虚拟框,打开genymotion并启动第一个设备,它将获得 192.168.155.101 ;第二个设备 192.168.155.102 ;第三个设备 192.168.155.103 ;等等。但是,如果我关闭并再次打开genymotion和虚拟框,决定首先启动第四个设备,它从第一个192.168.155.101获取IP地址,这带来了Appium / Selenium脚本的配置问题。是否可以将某些IP分配给genymotion中的特定设备,以便在重新启动虚拟盒和genymotion后它们将是相同的?

1 个答案:

答案 0 :(得分:2)

从您的帖子中,我不确定您使用的是哪种主机操作系统。我在Linux上(Ubuntu 16.04)。如果您使用其他内容,则细节可能与下面的内容不同,但概念是相同的。

Genymotion依赖于VirtualBox仅限主机的适配器(例如vboxnet0和子网192.168.56.0,如果您运行的是典型的Linux主机),可以adb连接到Android Studio等。部署Genymotion VM时,会创建此适配器并在其上启用内置于VirtualBox的DHCP服务器。因此,在启动之后,您将看到启动了多个VM的类似内容:

$ adb devices
List of devices attached
192.168.56.101:5555 device
192.168.56.102:5555 device

只要您不重新启动VirtualBox,就可以关闭并重新启动这些虚拟机,每次都会获得相同的地址。但是,正如您所看到的,如果重新启动VirtualBox,则没有其先前地址的内存,并且寻址将取决于引导顺序。

大多数功能齐全的DHCP服务器(即使是便宜的家用路由器中的服务器)都允许对固定IP租约进行MAC注册。不幸的是,就目前而言,内置的VirtualBox DHCP服务器不支持此功能。

我有一个解决方法的想法是在仅与主机连接的主机上禁用VirtualBox DHCP服务器,在主机的vboxnet0适配器上运行我自己的监听,并将其配置为根据各自的MAC地址为Genymotion VM提供固定IP。您可以在 File-> Preferences-> Network-> Host-only Networks 下为VirtualBox仅主机适配器禁用DHCP。来自我的主机上的DHCP服务器配置文件的片段如下所示:

subnet 192.168.56.0 netmask 255.255.255.0 {
  range 192.168.56.101 192.168.56.200;
}

host n5_2 {
  hardware ethernet 08:00:27:1F:F2:7E;
  fixed-address 192.168.56.123;
}

其中192.168.56.0指的是vboxnet0子网分配,hardware ethernet地址是设置 - >网络 - >适配器1的高级部分所示的地址为您希望拥有固定IP分配的每个VM。

除了一个加重问题外,这基本上有效:Genymotion Launcher每次启动VM时都会检查网络配置。当它使用仅禁用DHCP的主机适配器看到VM时,如果不存在(例如,vboxnet1,子网192.168.57.0)并启用DHCP,它将创建一个新的,并更改VM&#39 ; s网络配置指向此适配器。因此,在启动之后,您将拥有此功能(请注意新子网.57与之前相比):

$ adb devices
List of devices attached
192.168.57.101:5555 device
192.168.57.102:5555 device

在我尝试的短时间内,我发现阻止Genymotion Launcher在启动时更改网络设置的唯一方法是在启动每个VM时打开相应的VirtualBox 设置面板Genymotion发射器。我想打开它会对配置文件产生某种锁定,使得Launcher无法改变任何东西。当我这样做时,如果VM设置为使用非DHCP适配器和我上面配置的主机DHCP服务器,则一个设备根据DHCP配置获取固定IP,而其他设备根据引导顺序获取地址:< / p>

$ adb devices
List of devices attached
192.168.56.101:5555 device
192.168.56.123:5555 device

如果您可以在主机上设置DHCP服务器,并且不介意每次启动每个VM时打开设置面板,我想您可以认为这是一种解决方法。对我来说,它不是很实用,更好的选择包括:

  1. VirtualBox在其内置DHCP中添加了对MAC注册的支持 服务器
  2. Genymotion在启动过程中删除(或可选)配置检查。
  3. 弄清楚如何/为什么让设置打开锁定VM配置,然后永久锁定它。