【问题标题】:Genymotion emulators receive different IPs every time I start themGenymotion 模拟器每次启动时都会收到不同的 IP
【发布时间】:2016-05-02 15:07:13
【问题描述】:

我最近注意到 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 中的特定设备,以便在重新启动虚拟盒和 genymotion 后它们将相同?

【问题讨论】:

  • 我相信您可以使用设备名称功能来区分设备
  • 我明白这一点,但我要避免的是始终转到我的脚本并根据当前连接的任何设备调整 UDID 功能。
  • 这就是appium会理解的差异化因素

标签: android virtualbox genymotion


【解决方案1】:

根据您的帖子,我不确定您使用的是什么主机操作系统。我在 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 时都打开 设置 面板,我想您可以考虑这是一种解决方法。对我来说,这不是很实用,更好的选择包括:

  1. VirtualBox 在其内置 DHCP 中增加了对 MAC 注册的支持 服务器。
  2. Genymotion 会在引导期间移除(或可选)配置检查。
  3. 弄清楚打开 Settings 如何/为什么会锁定 VM 配置,然后永久锁定它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2017-09-10
    • 2022-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    相关资源
    最近更新 更多