【问题标题】:Android: Simulate WiFi in the emulator?Android:在模拟器中模拟 WiFi?
【发布时间】:2009-10-13 22:44:49
【问题描述】:

我想从我的应用程序中检查设备是否具有 WiFi 连接,但为了做到这一点,我必须首先找到在模拟器中获取“WiFi”的方法。只需转到 设置 -> 无线控制 -> Wifi无法启动 Wi-Fi,而 logcat 说:

E/WifiService(  566): Failed to load Wi-Fi driver.
D/SettingsWifiEnabler(  695): Received wifi state changed from Unknown to Enabling
D/SettingsWifiEnabler(  695): Received wifi state changed from Enabling to Unknown

如何在模拟器中模拟 WiFi 连接?

【问题讨论】:

  • 那么你该如何处理呢?你解决了吗?

标签: android testing android-emulator wifi device-emulation


【解决方案1】:

目前,虽然您可以在模拟器中使用计算机的 Internet 连接,但使用它来模拟 Wi-Fi 并不可靠。当您切换/想要测试您的连接状态时,WifiManager 会感到困惑。

即使在 Android 1.5 中,它也存在一些问题 (Issue 2571 - android),虽然您可以使用 Internet 来模拟 HTTP 连接和下载数据,但最好通过设备来更好地控制 Wi-Fi 连接。

【讨论】:

    【解决方案2】:

    由于这似乎是一个热门问题,我将继续添加更新的答案。 SDK 仍然不支持 WiFi 仿真,但 Genymotion 默认支持 WiFi,因此您可以使用它来开发/测试具有特定 WiFi 功能的应用程序。

    【讨论】:

    • 正确,但仅在授权版 atm 中。
    • 2017 年更新,当您禁用硬件加速时,它现在可以在 API 25 emulator 中使用 -
    【解决方案3】:

    从版本 26.1.3 开始,Android 模拟器现在支持在 Nougat 图像 (API 25) 上连接到 WiFi。

    在某些系统映像中添加了对 Wi-Fi 的支持(目前只有 API 级别 25)。一个名为“AndroidWifi”的接入点可用,Android 会自动连接到它。

    来源:https://developer.android.com/studio/releases/emulator.html#26-1-3

    您可以通过进入模拟器设置(三个点)> 帮助 > 关于来检查模拟器的版本。另请注意,如果 AVD 是在 26.1.3 版本发布之前创建的,则必须重新创建 AVD。我在某处读到擦除数据也可能有效,但我没有尝试过。

    【讨论】:

    • 我需要禁用硬件加速才能使用它。在撰写本文时,将Emulated Performance Graphics 设置为Software - GLES 2.0
    【解决方案4】:

    理论上,linux(android底层的内核)有mac80211_hwsim驱动,模拟WiFi。它可用于设置多个 WiFi 设备(一个接入点和另一个 WiFi 设备等),从而组成一个 WiFi 网络。

    在 linux 下测试 WiFi 程序很有用。可能,即使在user-mode linux 或其他与 linux 隔离的虚拟“盒子”下。

    理论上,此驱动程序可用于在您没有真正的 WiFi 设备(或不想使用它)的 android 系统中进行测试,也可用于某种 android 模拟器。或许,可以设法在 android-x86 中使用此驱动程序,或者——用于测试——在 android-x86 中在 VirtualBox 中运行。

    【讨论】:

      【解决方案5】:

      如果您没有真机,我认为最好的方法是安装android-x86 或在live usb 上使用它。 android 和 android-x86 之间没有区别。

      而且 android-x86 支持 wi-fi。这样您就可以安装并运行您的应用了。

      【讨论】:

      • 好吧...但是它可以按原样工作吗?我的意思是从那个模拟器(virtualbox)模拟wifi? :D
      • 今天还没有。
      【解决方案6】:

      可能无法替代在真实设备上进行测试,但如果您正在模拟器中寻找足够好的测试用例,请尝试Fake Wifi Connection

      无论底层连接是什么,它都会让应用认为它们在 wifi 上。

      免责声明:这些东西是我写的。
      它通过拦截 ConnectivityManager / WifiManager 调用(使用Xposed)来工作。我已经尝试涵盖其中的大部分内容,所以它做得很好,但总有可能遗漏了一些内容(如果你发现了什么,请告诉我)。

      【讨论】:

        猜你喜欢
        • 2011-06-18
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        相关资源
        最近更新 更多