根据您的帖子,我不确定您使用的是什么主机操作系统。我在 Linux(Ubuntu 16.04)上。如果你在做别的事情,细节可能与下面的不同,但概念是一样的。
Genymotion 依赖于 VirtualBox 主机专用适配器(例如,vboxnet0 和子网 192.168.56.0,如果您正在运行典型的 Linux 主机)来实现 adb 与 Android Studio 之类的连接。当您部署 Genymotion VM 时,会创建此适配器并在其上启用 VirtualBox 内置的 DHCP 服务器。因此,在启动后,您会看到启动了多个虚拟机的情况:
$ 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 适配器上运行我自己的侦听,并将其配置为为 Genymotion 提供固定 IP虚拟机基于它们各自的 MAC 地址。您可以在 File->Preferences->Network->Host-only Networks 下为 VirtualBox 仅主机适配器禁用 DHCP。我的主机上的 DHCP 服务器配置文件中的 sn-p 如下所示:
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 地址是Settings->Network->Adapter 1 的高级部分中显示的地址。您希望分配固定 IP 的虚拟机。
这基本上是可行的,除了一个更严重的问题:每次启动 VM 时,Genymotion 启动器都会检查网络配置。当它看到 VM 使用仅主机适配器并禁用 DHCP 时,如果不存在(例如,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 Launcher 在启动时更改网络设置的唯一方法是在启动每个 VM 时打开相应的 VirtualBox Settings 面板Genymotion 启动器。我猜它打开会在配置文件上设置某种锁定,使启动器无法更改任何内容。当我这样做时,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 会在引导期间移除(或可选)配置检查。
- 弄清楚打开 Settings 如何/为什么会锁定 VM 配置,然后永久锁定它。