Android: Имитировать Wi-Fi в эмуляторе?

Я хочу проверить у моего приложения, есть ли у устройства WiFi-соединение, но для этого я должен сначала найти способ получить "WiFi" в эмуляторе. Просто перейдите в Настройки → Элементы управления беспроводной сетью → Wi-Fi. Невозможно запустить 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

Как смоделировать соединение Wi-Fi в эмуляторе?

Ответ 1

Поскольку это, кажется, популярный вопрос, я продолжу и добавлю обновленный ответ. SDK по-прежнему не поддерживает эмуляцию Wi-Fi, но Genymotion делает Wi-Fi по умолчанию, поэтому вы можете использовать его для разработки/тестирования приложений с конкретными WiFi.

Ответ 2

В настоящее время, хотя вы можете использовать интернет-соединение своего компьютера в эмуляторе, он не надежен использовать его для имитации Wi-Fi. WifiManager запутывается, когда вы переключаете/хотите проверить свое состояние подключения.

Даже в Android 1.5 были некоторые проблемы с ним (Issue 2571 - android), и хотя вы можете использовать свой Интернет для имитации HTTP соединений и загрузки данных, более тонкое управление связью Wi-Fi лучше делать с помощью устройства.

Ответ 3

Android-эмулятор wifi

Начиная с версии 26.1.3, эмулятор Android теперь поддерживает подключение к Wi-Fi на изображении Nougat (API 25).

Добавлена ​​поддержка Wi-Fi в некоторых системных изображениях (в настоящее время только уровень API 25). Доступна точка доступа под названием "AndroidWifi", и Android автоматически подключается к ней.

Источник: https://developer.android.com/studio/releases/emulator.html#26-1-3

Вы можете проверить версию своего эмулятора, перейдя в настройки эмулятора (три точки) > Справкa > О программе. Также обратите внимание, что если AVD был создан до того, как была выпущена версия 26.1.3, вам придется воссоздать свой AVD. Я где-то читал, что очистка данных может также работать, но я не пробовал этого.

Ответ 4

В теории linux (ядро, лежащее в основе android) имеет mac80211_hwsim драйвер, имитирующий WiFi. Его можно использовать для настройки нескольких устройств WiFi (точка доступа и другое устройство WiFi и т.д.), Которые будут составлять сеть WiFi.

Это полезно для тестирования Wi-Fi-программ под Linux. Возможно, даже под пользовательский режим linux или другие изолированные виртуальные "ящики" с linux.

Теоретически этот драйвер можно использовать для тестов в системах Android, где у вас нет реального WiFi-устройства (или вы не хотите его использовать), а также в каких-то эмуляторах Android. Пожалуй, можно использовать этот драйвер в android-x86 или - для тестирования - в android-x86 запустить в VirtualBox.

Ответ 5

Если у вас нет реального устройства, я думаю, что лучший способ - установить android-x86 или использовать его на live usb. Между андроидами и android-x86 нет различий.

И поддержка android-x86 wi-fi. поэтому вы можете установить приложение и запустить его.

Ответ 6

Вероятно, нет замены для тестирования на реальном устройстве, но если вы ищете достаточно хороший тестовый пример в эмуляторе, дайте Fake Wifi Connection попытка:

Он заставляет приложения думать, что они подключены к Wi-Fi, независимо от того, что такое базовое соединение.

отказ от ответственности: Я написал этот материал.
Он работает, перехватывая вызовы ConnectivityManager/WifiManager (использует Xposed). Я попытался охватить большинство из них, так что это неплохая работа, тем не менее всегда возможно, что некоторые из них отсутствуют (если вы найдете что-то, дайте мне знать).