Genymotion 模拟器每次启动时都会收到不同的 IP
Genymotion emulators receive different IPs every time I start them
我最近注意到 Genymotion 模拟器 和 virtual box 配置存在问题。到目前为止,我只使用了一个 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 中的特定设备,以便在重新启动 virtual box 和 genymotion 后它们将相同?
根据您的 post,我不确定您使用的是哪种主机操作系统。我在 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 服务器(即使是廉价家用路由器中的服务器)都允许 MAC 注册固定 IP 租约。不幸的是,就目前而言,内置的 VirtualBox DHCP 服务器不支持此功能。
我的一个解决方法是在连接到 VM 的仅主机网络上禁用 VirtualBox DHCP 服务器,运行 我自己监听主机的 vboxnet0
适配器,然后配置它根据各自的 MAC 地址为 Genymotion 虚拟机提供固定 IP。您可以在 File->Preferences->Network->Host-only Networks 下为 VirtualBox host-only 适配器禁用 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 时检查网络配置。当它看到 VM 使用禁用 DHCP 的仅主机适配器时,如果 none 存在(例如,vboxnet1
、子网 192.168.57.0
)并启用 DHCP,它将创建一个新适配器,并更改VM 的网络配置指向此适配器。因此在启动后,您将拥有这个(注意与以前相比新的子网 .57):
$ adb devices
List of devices attached
192.168.57.101:5555 device
192.168.57.102:5555 device
在我试验的短时间内,我发现防止 Genymotion 启动器在启动时更改网络设置的唯一方法是打开相应的 VirtualBox 设置 面板同时从 Genymotion 启动器启动每个虚拟机。我想打开它会对配置文件进行某种锁定,使 Launcher 无法更改任何内容。当我这样做时,VM 设置为使用非 DHCP 适配器并且我的主机 DHCP 服务器配置如上,一台设备根据 DHCP 配置获取固定 IP,而其他设备根据启动顺序获取地址:
$ adb devices
List of devices attached
192.168.56.101:5555 device
192.168.56.123:5555 device
如果您可以在您的主机上设置 DHCP 服务器,并且不介意每次启动每个 VM 时打开 设置 面板,我想您可以考虑这是一个解决方法。对我来说,这不是很实用,更好的选择包括:
- VirtualBox 在其内置 DHCP 中添加了对 MAC 注册的支持
服务器。
- Genymotion 在引导期间删除(或可选)配置检查。
- 找出 how/why 打开 设置 锁定 VM 配置,然后永久锁定它。
我最近注意到 Genymotion 模拟器 和 virtual box 配置存在问题。到目前为止,我只使用了一个 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 中的特定设备,以便在重新启动 virtual box 和 genymotion 后它们将相同?
根据您的 post,我不确定您使用的是哪种主机操作系统。我在 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 服务器(即使是廉价家用路由器中的服务器)都允许 MAC 注册固定 IP 租约。不幸的是,就目前而言,内置的 VirtualBox DHCP 服务器不支持此功能。
我的一个解决方法是在连接到 VM 的仅主机网络上禁用 VirtualBox DHCP 服务器,运行 我自己监听主机的 vboxnet0
适配器,然后配置它根据各自的 MAC 地址为 Genymotion 虚拟机提供固定 IP。您可以在 File->Preferences->Network->Host-only Networks 下为 VirtualBox host-only 适配器禁用 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 时检查网络配置。当它看到 VM 使用禁用 DHCP 的仅主机适配器时,如果 none 存在(例如,vboxnet1
、子网 192.168.57.0
)并启用 DHCP,它将创建一个新适配器,并更改VM 的网络配置指向此适配器。因此在启动后,您将拥有这个(注意与以前相比新的子网 .57):
$ adb devices
List of devices attached
192.168.57.101:5555 device
192.168.57.102:5555 device
在我试验的短时间内,我发现防止 Genymotion 启动器在启动时更改网络设置的唯一方法是打开相应的 VirtualBox 设置 面板同时从 Genymotion 启动器启动每个虚拟机。我想打开它会对配置文件进行某种锁定,使 Launcher 无法更改任何内容。当我这样做时,VM 设置为使用非 DHCP 适配器并且我的主机 DHCP 服务器配置如上,一台设备根据 DHCP 配置获取固定 IP,而其他设备根据启动顺序获取地址:
$ adb devices
List of devices attached
192.168.56.101:5555 device
192.168.56.123:5555 device
如果您可以在您的主机上设置 DHCP 服务器,并且不介意每次启动每个 VM 时打开 设置 面板,我想您可以考虑这是一个解决方法。对我来说,这不是很实用,更好的选择包括:
- VirtualBox 在其内置 DHCP 中添加了对 MAC 注册的支持 服务器。
- Genymotion 在引导期间删除(或可选)配置检查。
- 找出 how/why 打开 设置 锁定 VM 配置,然后永久锁定它。