Android: Simulate WiFi in the emulator?
I would like to check from my app whether the device has WiFi connectivity, but in order to do that, I must first find a way to get «WiFi» in the emulator. Just going to Settings -> Wireless controls -> Wifi says Unable to start Wi-Fi, while logcat says:
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
6 Answers 6
Currently, while you can use your computer’s Internet connection in the emulator, it’s not reliable to use it for simulating Wi-Fi. The WifiManager gets confused when you switch/want to test your connectivity state.
Even in Android 1.5, there were some problems with it (Issue 2571 — android), and while you can use your Internet for simulating HTTP connections and downloading data, finer control over Wi-Fi connectivity should better be done with a device.
Since this seems to be a popular question, I’ll go ahead and add an updated answer. The SDK still doesn’t support WiFi emulation, but Genymotion does WiFi by default, so you can use that to develop/test apps with specific WiFi functionality.
Starting from revision 26.1.3, the Android emulator now supports connecting to WiFi on a Nougat image (API 25).
Added support for Wi-Fi in some system images (currently only API level 25). An access point called «AndroidWifi» is available and Android automatically connects to it.
You can check the version of your emulator by going into emulator settings (three dots) > Help > About. Also note that if an AVD was created before version 26.1.3 was released, you will have to recreate your AVD. I read somewhere that wiping data might also work, but I did not try that.
I needed to disable hardware acceleration for it to be available. At time of writing set Emulated Performance Graphics to Software — GLES 2.0 .
In theory, linux (the kernel underlying android) has mac80211_hwsim driver, which simulates WiFi. It can be used to set up several WiFi devices (an acces point, and another WiFi device, and so on), which would make up a WiFi network.
It’s useful for testing WiFi programs under linux. Possibly, even under user-mode linux or other isolated virtual «boxes» with linux.
In theory, this driver could be used for tests in the android systems where you don’t have a real WiFi device (or don’t want to use it), and also in some kind of android emulators. Perhaps, one can manage to use this driver in android-x86, or—for testing—in android-x86 run in VirtualBox.
Включение WiFi на эмуляторе Android
Wi-Fi недоступен в эмуляторе. Мы должны проверить это на реальном устройстве.
Я хочу проверить VNC-сервер на эмуляторе, а приложению VNC-сервера требуется Wifi или USB для подключения к сети? тогда какое решение лучше?
@mfq запускается на реальном устройстве или использует VNC-приложение с открытым исходным кодом, измененное без разницы.
не тратьте свое время @salman Салман Халид? Это правда? С точки зрения программистов, я увидел, что нам нужно минимизировать стоимость покупки реального устройства, если это произошло. Сколько устройств нам понадобится, если мы просто хотим протестировать наше приложение? OMG . не все программисты богаты как другие . давай! Давайте сделаем так, чтобы эмулятор работал . поэтому мы делаем другие приложения . правильно, imz
«трата времени» также привлекла мое внимание. Это не хороший ответ, мы тратим время на разработку по мере необходимости;)
По-видимому, этого не происходит, и я не ожидал, что это произойдет. ОДНАКО Иван открывает хорошую возможность, которая ускользнула от людей Android.
Какова цель эмулятора? ЭМУЛЯТ, правильно? Я не понимаю, почему для тестирования — при условии, что тестер понимает ограничения — эмулятор не может добавить эмулятор Wifi.
Он может, например, эмулировать доступ WiFi, используя базовое подключение к Интернету хоста. Очевидно, что тестирование WPA/WEP differencess не имеет смысла, но, по крайней мере, это может переключить доступ через WiFi.
Или какой-то эмулятор-плагин, в котором будет базовый Wi-Fi-эмулятор, который будет эмулировать доступ WiFi через базовое соединение, но затем через конфигурацию он может эмулировать WPA/WEP, предоставляя список поддельных сетей Wi-Fi и соответствующие им поддельные пароли, которые будет сопоставлен с настраиваемым списком учетных данных.
В конце концов, идея состоит в том, чтобы выполнить начальное тестирование на эмуляторе, а затем перейти к фактическому устройству.
Согласовано. Если эмулируется 3G то почему не WiFi? Даже для того, чтобы позволить разработчикам работать с переключением состояния WiFi.
@Kilizo Проблема в том, что стек Wi-Fi очень тяжел для эмуляции и нуждается в поддержке для соединения хостов (или наличия запасного устройства WiFi для использования). Даже с такими вещами, как VMWare или VirtualBox, заставить виртуальную машину правильно использовать полноценное WiFi-устройство очень сложно. Сотовая связь легко эмулируется, все, что нужно сделать, это подключить вас к обычному Интернету, вам не нужно беспокоиться о локальной сети или о том, что эмулятор Android способен полностью контролировать сетевое устройство.
В теории linux (ядро, лежащее в основе android) имеет mac80211_hwsim драйвер, который имитирует WiFi. Его можно использовать для настройки нескольких устройств WiFi (точка доступа и другое устройство WiFi и т.д.), Которые будут составлять сеть WiFi.
Это полезно для тестирования Wi-Fi-программ под Linux. Возможно, даже под пользовательский режим linux или другие изолированные виртуальные «ящики» с linux.
Теоретически этот драйвер можно использовать для тестов в системах Android, где у вас нет реального WiFi-устройства (или вы не хотите его использовать), а также в каких-то эмуляторах Android. Пожалуй, можно использовать этот драйвер в android-x86 или — для тестирования — в android-x86 запустить в VirtualBox.
Обратите внимание, что большая часть того, что делает Wi-Fi «Wi-Fi» для приложения Android, находится в пользовательском режиме Android. Есть большая вероятность, что все, что нужно изменить, — это отчетность . Хотя сеть эмулятора имеет некоторые свойства, более совместимые с провайдером 3G, чем с Wi-Fi; в частности, транслятор сетевых адресов, который не принимает входящие соединения, кроме как через петлевой интерфейс машины разработки хостинга. Изменение платформы, чтобы она называлась Wi-Fi, вроде бы работало, но единственным локальным узлом, который мог подключиться, была бы машина разработки.
На данный момент, с версией 26.1.3 эмулятора Android, наконец, возможно на изображении v8 API 25. Если эмулятор был создан до обновления до последнего изображения API 25, вам нужно стереть данные или просто удалить и воссоздать изображение, если хотите.
Добавлена поддержка Wi-Fi в некоторых системных изображениях (в настоящее время только API уровень 25). Доступна точка доступа под названием «AndroidWifi» и Android автоматически подключается к нему. Поддержка Wi-Fi может быть отключена запуск эмулятора с параметром командной строки -feature -Wifi.
привет, что мне нужно сделать, чтобы включить функцию Wi-Fi? потому что в настройках эмулятора опция wifi отключается автоматически.
Я могу убедиться, что он работает с Image Android 7.1.1 (Google Apis), API Level 25, ABI x86. Странно то, что он не работает с более новыми изображениями: например, API 27, ABI x86 (здесь я могу включить Wi-Fi, но он автоматически отключится)
Вы правы @TmTron, по состоянию на август 2017 года я получил ответ от Google: « You’re right about API 26, it’s in the works and will be available in the future. As for backporting to earlier versions that’s something we would like to do although I can’t make any promises as to when that will happen or how far back we will go.
Эмулятор не предоставляет виртуальное оборудование для Wi-Fi. На веб-сайте разработчиков Android:
- WiFi
- Bluetooth
- NFC
- Вставка/извлечение SD-карты
- Наушники, подключенные к устройству
- USB
Тем не менее, вы можете посетить веб-сайты (с подключенным компьютером к Wi-Fi).
Недавно я проверил свой эмулятор, и кажется, что WiFi работает (на эмуляторе Nexus 5, API 24). Смотрите снимок экрана ниже.
Он автоматически подключился для меня.
Вот подробности эмулятора:
Name: Nexus_5_API_24 CPU/ABI: Google APIs Intel Atom (x86_64) Target: google_apis [Google APIs] (API level 23) Skin: nexus_5 hw.dPad: no runtime.network.speed: full hw.accelerometer: yes hw.device.name: Nexus 5 vm.heapSize: 64 skin.dynamic: yes hw.device.manufacturer: Google hw.gps: yes hw.initialOrientation: Portrait image.androidVersion.api: 23 hw.audioInput: yes tag.id: google_apis showDeviceFrame: yes hw.camera.back: emulated hw.mainKeys: no AvdId: Nexus_5_API_24 hw.camera.front: webcam0 hw.lcd.density: 480 avd.ini.displayname: Nexus 5 API 24 hw.gpu.mode: auto hw.ramSize: 1024 hw.trackBall: no hw.battery: yes hw.cpu.ncore: 2 hw.sdCard: yes tag.display: Google APIs runtime.network.latency: none hw.keyboard: yes hw.sensors.proximity: yes disk.dataPartition.size: 800M hw.sensors.orientation: yes avd.ini.encoding: UTF-8 hw.gpu.enabled: yes
-1, потому что на скриншоте показано, что устройство подключено через 4G, а не через WiFi, не отвечает, не решает и не предоставляет полезной информации на заданный вопрос.
@sixones Это не обязательно означает, что он не подключен к WiFi: 4G показан для целей эмуляции (например, что бы вы делали в приложении, если бы он был на 4G против 3G) и его можно изменить через настройки. Даже если WiFi отключен или не подключен , я все равно могу открыть Google, потому что мой компьютер подключен к WiFi. Таким образом, хотя вы можете просматривать / загружать веб-сайты, вы не можете эмулировать подключение к WiFi для целей эмуляции, и, таким образом, для этой цели вам необходимо реальное устройство, подключенное к WiFi.
@Stardust Stardust Точно, так что ваш ответ не дает ничего на заданный вопрос, кроме как показывает, что вы можете использовать сотовую связь. Интерфейс Android довольно прост: если вы подключены к Wi-Fi, он отображается в панели уведомлений, он также может отображать ваше сотовое соединение одновременно, в зависимости от того, что произошло. Все, что вы показали, — это то, что вы можете использовать эмулятор на хост-компьютере, подключенном к Wi-Fi, но это не то, о чем спрашивал этот вопрос.
Enabling WiFi on Android Emulator
How to enable WiFi on Android emulator? I have tried to find this but everyone is confusing WiFi with 3G.
7 Answers 7
Wifi is not available on the emulator if you are using below of API level 25.
When using an AVD with API level 25 or higher, the emulator provides a simulated Wi-Fi access point («AndroidWifi»), and Android automatically connects to it.
I want to test VNC server on emulator and vnc server app requires Wifi or USB to get connect to network? then what is the best solution ?
dont waste your time @salman khalid? Is that true? As programmers perspective, what I saw is that we need to minimize the cost of buying actual device if it happened. How many devices would we need if we just want to test our app? OMG. not every programmers are rich as others. come ‘on! Let’s make the emulator do the works. so we’re making another apps. right, imz
«waste time» also came to my attention. That’s not nice reply, we waste time on development as needed 😉
Apparently it does not and I didn’t quite expect it would. HOWEVER Ivan brings up a good possibility that has escaped Android people.
What is the purpose of an emulator? to EMULATE, right? I don’t see why for testing purposes -provided the tester understands the limitations- the emulator might not add a Wifi emulator.
It could for example emulate WiFi access by using the underlying internet connection of the host. Obviously testing WPA/WEP differencess would not make sense but at least it could toggle access via WiFi.
Or some sort of emulator plugin where there would be a base WiFi emulator that would emulate WiFi access via the underlying connection but then via configuration it could emulate WPA/WEP by providing a list of fake WiFi networks and their corresponding fake passwords that would be matched against a configurable list of credentials.
After all the idea is to do initial testing on the emulator and then move on to the actual device.