Имитация низкого сетевого подключения для Android
Я хотел бы протестировать свое приложение на предмет низкого сетевого подключения. Как лучше всего это сделать, кроме как стоять в лифте? Я пытался обернуть телефон в алюминиевую фольгу, но это не сильно помогло.
Мне нужно проверить это на реальном устройстве, а не в эмуляторе.
25 ответов
Вы можете использовать эмулятор для этого. Взгляните на эту страницу: Android Emulator. Обратите внимание на следующие два аргумента:
-netdelay <delay>
Установите для эмуляции задержки сети значение. Значением по умолчанию является none. См. Таблицу в разделе "Эмуляция задержки сети" для получения информации о поддерживаемых значениях.
-netspeed <speed>
Установите эмуляцию скорости сети на. Значение по умолчанию заполнено. См. Таблицу в эмуляции скорости сети для поддерживаемых значений.
Это может показаться немного сумасшедшим, но микроволновая печь служит защитным экраном. Следовательно, помещение устройства в микроволновую печь (НЕ включайте микроволновую печь, когда устройство находится внутри!) Приведет к значительному снижению уровня сигнала. Это определенно бьет стоя внутри лифта...
Так как опция для разработчиков iPhone применяется при подключении к Wi-Fi, вы можете получить iPhone с iOS 6
и выше (и был установлен на use for developments
с xcode
), настройте его для эмуляции нужного сетевого профиля, подключите устройство Android к его точке доступа
Обновление для Android Studio v 1.5 или выше
Как @LouMorda упомянул в комментарии ниже, что Emulator
Вкладка, упомянутая в оригинальном сообщении, была удалена в Android Studio v 1.5.
Теперь они разместили эти настройки в настройках симулятора в AVD Manager
,
Чтобы получить доступ к этим настройкам:
- Выбрать
Tools -> Android -> AVD Manager
- Нажмите на
Edit AVD
кнопка (значок карандаша) Network Settings
можно получить после нажатия наShow Advanced Settings
кнопка
Вот скриншот того, как это может выглядеть:
Оригинальный пост
Для тех, кто использует Android Studio IDE:
- Идти к
Run -> Edit Configurations
- Выбрать
Android Application -> [Your App]
- Выбрать
Emulator
табуляция - Здесь вы можете изменить различные значения для
Network Speed
а такжеNetwork Latency
моделировать различные скорости и задержки и т. д.
Кроме того, вы можете ввести различные аргументы в Additional command line options
текстовое поле, упомянутое в ответе @ inazaruk.
На скриншоте ниже показано, как это Run Configuration
Экран выглядит так:
Я знаю, что уже поздно отвечать на этот вопрос, но я надеюсь, что это поможет другим, сталкивающимся с подобными проблемами!
редактировать
Для тех, кто использует затмение, см . Ответ @Abhi ниже.
Я знаю, что это старый вопрос, но...
Некоторые телефоны в настоящее время имеют настройку использования только 2G. Он идеально подходит для симуляции медленного интернета на реальном устройстве.
Годы, но эй, я включу мой надежный метод с Genymotion.
Загрузите бесплатную пробную версию Charles: http://www.charlesproxy.com/download/
Установить его
Нажмите
Proxy -> Throttle Settings
Настройте свои удушенные скорости HTTP
Закройте это окно
Нажмите
Proxy -> Throttling
включить дроссельОткройте эмулятор Genymotion
Откройте настройки Wi-Fi
Длительно нажмите включенное соединение Wi-Fi
Нажмите
Modify Network
Нажмите
Show Advanced Options
Задавать
Proxy
вManual
Установить
Proxy hostname
в10.0.3.2
Установить
Port
в8888
Нажмите
Save
И теперь ваша сеть будет ограничена!
У меня есть одна стратегия, чтобы решить вашу проблему. Вы можете использовать приложение прокси для изменения или мониторинга вашего сетевого статуса. например, Чарльз.
Вы должны изменить конфигурацию Чарльза по умолчанию, как показано на следующем рисунке.
И, наконец, вы обнаружите, что сетевой статус был сформирован в более низком темпе.
Вы также можете проверить медленное интернет-соединение на реальном устройстве Android:
Протестировано с Samsung Galaxy S8 + Android 8.0.0
Перейдите в " Настройки" -> " Подключение" -> " Мобильная сеть" -> и в режиме сети вы можете использовать только подключения 2G или3G.
В Android Studio при запуске эмулятора:
1- Нажмите кнопку настроек внизу боковой панели эмулятора.
2- Перейти к сотовой связи
3- Установить тип сети
Существует простой способ тестирования низких скоростей на реальном устройстве, которое, кажется, упустили из виду. Для этого требуется Mac и сетевое (или другое проводное) сетевое соединение.
Включите общий доступ к Wi-Fi на Mac, превратив компьютер в точку доступа Wi-Fi, подключите к нему свое устройство. Используйте Netlimiter/Charles Proxy или Network Link Conditioner (который вы, возможно, уже установили) для контроля скорости.
Для получения более подробной информации и понять, какие скорости вы должны проверить при проверке: http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor-connections/
Простой способ проверить ваше приложение с низким / плохим соединением в эмуляторе:
Выберите " Выполнить" > " Выполнить настройки", выберите приложение Android и перейдите на вкладку " Цель ". Посмотри параметры запуска Эмулятора. Здесь вы можете легко изменить скорость сети и задержку в сети.
Я удивлен, что никто не упомянул об этом. Вы можете привязать через Bluetooth, и разделить их на десять + метров (или меньше с препятствиями). У тебя очень плохая связь. Без микроволновки, без лифта, без программного обеспечения.
Или на реальном устройстве вы можете перейти в "Настройки" -> "Мобильные сети" -> "Предпочтительные типы сетей" и выбрать самый медленный из доступных... Конечно, это очень ограничено, но для некоторых целей тестирования этого может быть достаточно.
Facebook создал нечто, называемое расширенным управлением трафиком. Краткое резюме со страницы GitHub:
Расширенное управление трафиком (ATC) - это инструмент для моделирования условий в сети. Позволяет контролировать подключение устройства к Интернету. Разработчики могут использовать ATC для тестирования своих приложений в различных сетевых условиях, легко эмулируя высокоскоростные, мобильные и даже сильно поврежденные сети. Аспекты соединения, которыми можно управлять, включают в себя:
- пропускная способность
- задержка
- потеря пакета
- поврежденные пакеты
- заказ пакетов
Чтобы иметь возможность формировать сетевой трафик, ATC должен работать на устройстве, которое маршрутизирует трафик и видит реальный IP-адрес устройства, например, ваш сетевой шлюз. Это также позволяет любым устройствам, которые маршрутизируют через ATC, иметь возможность формировать свой трафик. Трафик может формироваться / не формироваться с использованием веб-интерфейса, что позволяет любым устройствам с веб-браузером использовать ATC без необходимости клиентского приложения.
Вы можете найти его здесь на GitHub: https://github.com/facebook/augmented-traffic-control
Они также написали сообщение в блоге об этом: https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/
ОБНОВЛЕНИЕ на Android студии AVD:
- открыть менеджер AVD
- создать / редактировать AVD
- нажмите дополнительные настройки
- выберите предпочитаемую настройку подключения
Никаких микроволновок или лифтов:)
Для пользователя Mac OS вы можете использовать Network Link Conditioner, который можно загрузить с Apple. установите это как AP на Mac, и любые устройства могли подключить его.
Вы можете использовать Facebook с открытым исходным кодом ATC http://facebook.github.io/augmented-traffic-control/
Выберите "Выполнить"> "Выполнить настройки", выберите приложение Android и перейдите на вкладку "Цель". Сделайте изменения, как показано на рисунке.
Хотите проверить отсутствие сетевого подключения или просто медленное сетевое подключение? Если первое, вы можете перейти к Settings > Wireless & networks > Airplane mode
и включите режим полета. Это позволит вам проверить недоступность сети на реальном устройстве.
Я боролся с этой проблемой в течение полдня, наконец, я пришел к такому решению:
В целом, тестирование на реальном устройстве не имеет особого смысла, так как для того, чтобы оно заработало, нужно много пройти. Единственный логичный способ провести реальное тестирование - это подключить телефон к сотовой сети низкого качества, такой как EDGE, если это предоставляет ваша телефонная компания. Вы можете попытаться сделать это, набрав
*#*#4636#*#*
в приложении телефонаОригинальный эмулятор Android слишком медленный для тестирования и не достигает большего, чем решение, описанное выше.
Лучший способ сделать это - использовать Genymotion. Это эмулятор Android с гораздо лучшей производительностью, чем оригинальные AVD, и версия для личного использования бесплатна.
После того, как вы создали виртуальное устройство в Genymotion, просто пройдите этот урок, чтобы установить прокси для устройства.
Запустите на своем хосте прокси-сервер, который имитирует плохие условия сети, такие как Crapify или Toxiproxy (я только что проверил первый), и все готово.
Обновить:
Я только что понял, что вы можете выбрать ту же стратегию и с реальными устройствами. Я чувствую себя идиотом, потому что не осознаю этого раньше. Просто запустите прокси-сервер Crapify на своем компьютере, установите в прокси-телефоне свой локальный адрес и вуаля, у вас на телефоне будет дрянной интернет.
Мне нужно было ограничить низкий уровень интернета на собственном устройстве AndroidTV, и, исходя из того, что я читал, наиболее подходящим решением было ограничить доступ к Интернету непосредственно в моем маршрутизаторе.
Зайдите в настройки роутера (локально это что-то вроде 192.168.0.1) -> настройте DHCP-сервер (если он не работает) -> выберите IP-адрес устройства и установите ограничение;
Очень старый пост, но я добавлю свои два цента. Я ОЧЕНЬ доволен этим аппаратным продуктом ( https://apposite-tech.com/products/linktropy-mini/), который позволил нам смоделировать множество реальных условий. Долгое время у нас были проблемы с устранением различных проблем, которые работали бы в эмуляторе или в режиме полета.
У нас есть несколько различных профилей, от нулевого подключения до различных стадий предельного подключения, с разной степенью задержки, потерей пакетов и ошибками битов. Самое замечательное в том, что мы можем изменять их на лету, не перезапуская приложение в эмуляторе. Цена полностью окупилась для нашего магазина, и им очень просто пользоваться.
Я обнаружил, что netlimiter4 - лучшее решение для регулирования данных в эмуляторах. Он обеспечивает детальное управление через приличный графический интерфейс и предоставляет графическую обратную связь по пропускной способности данных для каждого процесса. В настоящее время в бесплатной бета-версии. Скриншот
http://www.netlimiter.com/products/nl4
В магазине игр есть приложения, которые можно использовать для доступа к реальным устройствам, но для них требуется root (я не могу дать никаких советов относительно того, насколько хорошо они работают, если они вообще есть - YMMV.)
поиск bradybound в игровом магазине, я не могу опубликовать более одной ссылки..
Как предлагает @VicVu Charles (или любой другой прокси-инструмент), это более простой способ. Но я хотел бы добавить, что вы можете делать это и с вашим устройством, а не только с genymotion или другими эмуляторами. Процесс будет таким же:
Измените настройки Wi-Fi вашего устройства / эмулятора, чтобы использовать прокси-сервер вручную. Затем установите имя прокси-сервера и порт a. установите имя хоста как ip вашей системы (получите ip вашего pc/mac, используя ifconfig/ifconfig) b. установить номер порта genymotion (проверьте настройки прокси в charles)
PS: Ваше устройство / эмулятор ДОЛЖЕН использовать тот же Wi-Fi, поскольку используемый вами ip, скорее всего, будет частным ip.
Просто зайдите на монитор устройства Android из Android studio, затем DDMS -> Emulator Control. Там будут свойства Speed и Latency.
Ты пробовал это? Настройки - Сети - Дополнительно - Мобильные сети - Режим сети - Выберите предпочитаемую сеть (например, 2G).
Другой метод, который я использовал, был упомянут выше. Подключите через горячую точку iPhone. Надеюсь это поможет.
Я использую миттропрокси HTTPS прокси. https://mitmproxy.org/
Mitmproxy - это прокси-приложение с открытым исходным кодом, которое позволяет перехватывать соединения HTTP и HTTPS между любым клиентом HTTP(S). Это позволяет отслеживать, захватывать и изменять эти соединения в режиме реального времени. Запрос на изменение, ответ, заголовок, ... Кроме того, вы можете перехватывать различные запросы.
например response_delay.py:
from mitmproxy import http
from time import sleep
def response(flow: http.HTTPFlow) -> None:
sleep(5.0)
Затем выполнение этого комментария задерживает все ответы от сервера:
mitmproxy --cert \*.asdf.at=./cert.pem --scripts response_delay.py
В моем приложении я использую закрепление сертификата, поэтому вам нужно добавить сертификат (приватный + публичный)
cat private.key public.key> cert.pem
Вы можете найти простое руководство здесь.
Вы можете найти другие примеры сценариев здесь.
Откройте терминал в Android Studio и перейдите на../../Android/sdk/tools. Исполняемый файл эмулятора должен быть доступен здесь.
Запустите./emulator -netdelay "delay_in_millis" -avd "emulator_device_name"
Пример: ./emulator -netdelay 60000 -avd Nexus_5_API_21
Теперь создайте свое приложение и установите его в эмуляторе.
- Запустите свой сценарий в приложении.
Убедитесь, что у вас есть изменения кода в приложении, которое устанавливает время ожидания для вашего запроса и обрабатывает это.