Имитация низкого сетевого подключения для Android [закрыто]


228

Я хотел бы протестировать свое приложение на предмет низкого сетевого подключения. Как лучше всего это делать, кроме как стоять в лифте? Я пытался обернуть телефон в алюминиевую фольгу, но это не сильно помогло.

Мне нужно проверить это на реальном устройстве, а не в эмуляторе.


1
Также исследуйте клетки Фарадея . Их легко построить.
— jww

Ответы:


119

Вы можете использовать эмулятор для этого. Взгляните на эту страницу: Android Emulator . Обратите внимание на следующие два аргумента:

  1. -netdelay <delay>

    Установите для эмуляции задержки в сети значение. Значением по умолчанию является none. См. Таблицу в разделе «Эмуляция задержки сети» для получения информации о поддерживаемых значениях.

  2. -netspeed <speed>

    Установите эмуляцию скорости сети в. Значение по умолчанию заполнено. См. Таблицу в эмуляции скорости сети для поддерживаемых значений.

    Скорости для справки при увеличении кбит / с:

                            UP       DOWN
                      -------- ----------
    gsm   GSM/CSD         14.4       14.4
    hscsd HSCSD           14.4       57.6
    gprs  GPRS            28.8       57.6
    umts  UMTS/3G        384.0      384.0
    edge  EDGE/EGPRS     473.6      473.6
    hsdpa HSDPA         5760.0   13,980.0
    lte   LTE         58,000.0  173,000.0
    evdo  EVDO        75,000.0  280,000.0
    full  No limit           ∞          ∞
    

15
Большое спасибо, но, как я уже сказал, я хотел бы проверить на реальном устройстве. В любом случае я могу сделать это на телефоне HTC или Samsung?
— Мэгги

2
Я предполагаю, что единственный путь, это иметь Wi-Fi роутер / AP, которая может контролировать скорость сети. Это скорее вещи сетевого администратора. Но это должно быть теоретически возможно.
— Иназарук

78
Я использовал лифт :), но спасибо всем
— Мэгги

3
Для имитации задержки по HTTP используйте ResponseCache.setDefault (new CacheResponse () {...}) и поместите туда вызов Thread.sleep (200). Преимущество этого состоит в том, что он контролируется программно (т.е. только в одном действии) и не влияет на другие процессы. Однако для более реалистичного теста вы должны установить ограничение на вашем маршрутизаторе или с помощью tcкоманды (из busybox).
— yingted

112
Почему это было принято как ответ? На вопрос четко поставлен вопрос «не в эмуляторе»
— Кайл Айви

272

Это может показаться немного сумасшедшим, но микроволновая печь служит защитным экраном. Поэтому, если вы поместите ваше устройство в микроволновую печь (НЕ включайте микроволновую печь, когда ваше устройство находится внутри!), Уровень сигнала значительно упадет. Это определенно бьет стоя внутри лифта ...


3
Ух ты, теперь, если бы ты мог предложить мне способ втиснуться в духовку тоже. А духовки рассчитаны на экранирование 2,4 ГГц. Это может не работать для более низких частот. ИДК!
— WindRider

2
не работал в моей микроволновке (т.е. соединение было все еще приличным)! Ахх: |
— Yura

1
Если у вас есть USB-шнур, сигнал может пробиться таким образом. Если он находится внутри микроволновой печи без шнура, он не должен получать сигнал. Вы также сможете добиться этого эффекта с помощью алюминиевой фольги, которая не расплавит телефон, потому что вы не можете случайно выключить телефон.
— Джон Мур

Микроволновая печь все еще является хорошим вариантом, если вам нужно вызвать немедленное отключение и не требовать дальнейшего взаимодействия с пользователем, что было моим конкретным вариантом использования.
— Роберт Ян

108

Так как опция разработчика iPhone применяется при подключении к Wi-Fi, вы можете получить iPhone, который имеет iOS 6и выше (и был установлен use for developmentsс xcode), настроить его на эмуляцию нужного сетевого профиля, подключить ваше устройство Android к его точке доступа.

введите описание изображения здесь


10
Это было решением, к которому мы тоже пришли. Обидно, что это самый вменяемый вариант из доступных. В ответе следует отметить, что для работы iPhone требуется соединение 3G / сотовая связь. Также следует отметить, что скорости загрузки / выгрузки, необходимые для утилиты iPhone, должны быть инвертированы, чтобы соответствовать привязанному устройству.
— Кайл Айви

Brilliant! Глупо, что это лучший вариант, тем более что эмулятор может это сделать.
— Карл

Эмулятор iPhone может привязать WiFi?
— Кирилл Кулаков

Спасибо. Был смущен, как это настроить. Вот как - если у вас сотовый план, который разрешает использование личных точек доступа. Я использую iOS 7.12 1) перейдите в НАСТРОЙКИ-> Сотовая связь-> Персональная точка доступа 2) сдвиньте переключатель Персональная точка доступа вправо, чтобы он стал зеленым / включен (можно сменить пароль, если хотите) 3) вернитесь назад и вернитесь к Разработчику 4) прокрутите вниз до Network Link Conditioner и коснитесь его. сдвиньте ENABLE вправо, чтобы он стал зеленым, и, наконец, выберите профиль. Я выбрал «Очень плохую сеть». Это дало мне ping (2198ms) download (0.05Mbps) upload (0.08Mbps) 5) Подключите ваш Android к точке доступа!
— Энтони Де Соуза,

1
Я не могу перестать смеяться, но это лучшее решение в целом для симуляции медленной сети на реальном устройстве. Спасибо
— к.д.

71

Обновление для Android Studio v 1.5 или более
поздней версии. @LouMorda упомянула в комментарии ниже, что Emulatorвкладка, упомянутая в оригинальном сообщении, была удалена в Android Studio v 1.5.

Теперь они разместили эти настройки в настройках симулятора в AVD Manager.
Чтобы получить доступ к этим настройкам:

  1. Выбрать Tools -> Android -> AVD Manager
  2. Нажмите Edit AVDкнопку (значок карандаша)
  3. Network SettingsМожно получить после нажатия на Show Advanced Settingsкнопку

Вот скриншот того, как это может выглядеть:
Настройки скорости и задержки сети в Android Studio v 1.5

Оригинальный пост
Для тех, кто использует Android Studio IDE:

  1. Перейти к Run -> Edit Configurations
  2. Выбрать Android Application -> [Your App]
  3. Выберите Emulatorвкладку
  4. Здесь вы можете изменять различные значения Network Speedи Network Latencyмоделировать различные скорости и задержки и т. Д.

Кроме того, вы можете ввести различные аргументы в Additional command line optionsтекстовое поле, как указано в ответе @ inazaruk.

На приведенном ниже снимке экрана показано, как Run Configurationвыглядит этот экран:

Запустите экран настроек в Android Studio beta 0.8.6

Я знаю, что уже поздно отвечать на этот вопрос, но я надеюсь, что это поможет другим, сталкивающимся с подобными проблемами!

Редактировать
Для тех, кто использует затмение, см . Ответ @ Abhi ниже.


1
Эта вкладка была удалена в Android Studio v1.5
— Лу Морда

@ S1LENT WARRIOR Что такое задержка и в чем разница (например) между «скоростью: фронтом, задержкой: нет» и «скоростью: полной, задержкой: фронтом»?
— Джонни Пять

1
@JohnnyFive скорость относится к скорости вашей сети, а задержка означает задержку сети.
— S1LENT WARRIOR

45

Я знаю, что это старый вопрос, но ...

Некоторые телефоны в настоящее время имеют настройку использования только 2G. Он идеально подходит для симуляции медленного интернета на реальном устройстве.

введите описание изображения здесь


идеальный ! обратно к краю и загрузки на 9 КБ / с.
— JcV

Отлично, это идеально подходит для моей текущей потребности. В моей комнате загрузка
— 200

3
Этот парень настоящий MVP.
— Edwoollard

33

Годы, но эй, я включу мой надежный метод с 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

И теперь ваша сеть будет ограничена!


откуда вы взяли имя хоста 10.0.3.2? это Чарльз по умолчанию?
— Abbood

имя хоста должно быть компьютером, на котором работает адрес локальной сети Чарльза
— MaTriXy

16

Вы также можете проверить медленное интернет-соединение на реальном устройстве Android:

Протестировано с Samsung Galaxy S8 + Android 8.0.0

Перейти к Настройки -> Подключение -> Мобильная сеть -> и под networkmode вы можете использовать только 2G или 3G соединения


15

У меня есть одна стратегия, чтобы решить вашу проблему. Вы можете использовать приложение прокси для изменения или мониторинга вашего сетевого статуса. например, Чарльз .

Вы должны изменить конфигурацию Чарльза по умолчанию, как показано на следующем рисунке.

Откройте настройки газа

Настройка вашего газа

И, наконец, вы обнаружите, что сетевой статус был сформирован в более низком темпе.

Перед

Настройка после


2
Пока это единственное адекватное решение: D
— egorikem

8

Простой способ проверить ваше приложение с низким / плохим соединением в эмуляторе:

Выберите « Выполнить» > « Выполнить настройки» , выберите приложение Android и перейдите на вкладку « Цель ». Посмотри параметры запуска Эмулятора . Здесь вы можете легко изменить скорость сети и задержку в сети.


8

Существует простой способ тестирования низких скоростей на реальном устройстве, которое, кажется, упустили из виду. Для этого требуется 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 -связностей /


Используя панель настроек «Общий доступ», вы можете поделиться практически любым соединением с большинством других. Я настроил его на совместное использование WiFi-соединения через Bluetooth. (Параметры подключения через Bluetooth не отображались на моем телефоне Android, пока это не было настроено.)
— Дуг Ридер

Для установки инструмента Network Link Conditioner: stackoverflow.com/q/9659382
— Pang

7

В Android Studio при запуске эмулятора:

1- Нажмите кнопку настроек внизу боковой панели эмулятора

2- Перейти к сотовой связи

3- Установить тип сети

Скриншот


6

Facebook построили что - то под названием Augmented Traffic Control . Краткое резюме со страницы 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/


6

Я удивлен, что никто не упомянул об этом. Вы можете привязать через Bluetooth, и разделить их на десять + метров (или меньше с препятствиями). У вас есть реальное плохое соединение. Без микроволновки, без лифта, без программного обеспечения.


На самом деле это хорошее решение, если у вас не очень хорошее соединение Bluetooth. Для этого нужно использовать старое устройство. :)
— разработчик для Android

5

Или на реальном устройстве вы можете перейти в «Настройки» -> «Мобильные сети» -> «Предпочтительные типы сетей» и выбрать самый медленный из доступных ... Конечно, это очень ограничено, но для некоторых целей тестирования этого может быть достаточно.


3

ОБНОВЛЕНИЕ на Android студии AVD:

  1. открыть менеджер AVD
  2. создать / редактировать AVD
  3. нажмите дополнительные настройки
  4. выберите предпочитаемую настройку подключения

Никаких микроволновок или лифтов :)


3

Для пользователя Mac OS вы можете использовать Network Link Conditioner, который можно загрузить с Apple. установите его как AP на Mac, и любые устройства могут подключить его.

Вы можете использовать инструменты с открытым исходным кодом Facebook ATC http://facebook.github.io/augmented-traffic-control/


2

Хотите проверить отсутствие сетевого подключения или просто медленное сетевое подключение? Если первое, вы можете перейти Settings > Wireless & networks > Airplane modeи включить режим полета. Это позволит вам проверить недоступность сети на реальном устройстве.


Спасибо, но я пытался проверить на слабое подключение к сети. Например. для низкого сигнала EDGE или что-то в этом роде.
— Мэгги

Ах. Жаль, что вы не можете отключить 3G и вернуться в EDGE роуминг. По крайней мере, на моем телефоне вы не можете.
— Дэвид Конрад

2

Выберите «Выполнить»> «Выполнить настройки», выберите приложение Android и перейдите на вкладку «Цель». Сделайте изменения, как показано на рисунке.

введите описание изображения здесь


2

Я боролся с этой проблемой в течение полдня, наконец я пришел к такому решению:

  • В целом, тестирование на реальном устройстве не имеет особого смысла, так как для того, чтобы оно заработало, нужно много пройти. Единственный логичный способ провести реальное тестирование - это подключить телефон к сотовой сети низкого качества, например EDGE, если это предоставляет ваша телефонная компания. Вы можете попробовать сделать это, набрав *#*#4636#*#*в приложении телефона

  • Оригинальный эмулятор Android слишком медленный для тестирования и не достигает большего, чем решение, описанное выше.

Лучший способ сделать это - использовать Genymotion . Это эмулятор Android с гораздо лучшей производительностью, чем оригинальные AVD, и версия для личного использования бесплатна.

Эмулятор Genymotion

После того, как вы создали виртуальное устройство в Genymotion, просто пройдите этот урок, чтобы установить прокси для устройства.

Запустите прокси-сервер на хост-компьютере, который имитирует плохие условия сети, такие как Crapify или Toxiproxy (я только что проверил первый), и все готово .

Обновить:

Я только что понял, что вы можете выбрать ту же стратегию и с реальными устройствами. Я чувствую себя идиотом, потому что не осознаю этого раньше. Просто запустите прокси-сервер Crapify на своем компьютере, установите в прокси-телефоне свой локальный адрес и вуаля, у вас на телефоне будет дрянной интернет.


1

как предлагает @VicVu Charles (или любой другой прокси-инструмент), это более простой способ. Но я хотел бы добавить, что вы можете делать это и с вашим устройством, а не только с genymotion или другими эмуляторами. Процесс будет таким же:

Измените настройки Wi-Fi вашего устройства / эмулятора, чтобы использовать прокси-сервер вручную. Затем установите имя прокси-сервера и порт a. установите имя хоста как ip вашей системы (получите ip вашего pc / mac, используя ifconfig / ifconfig) b. установить номер порта genymotion (проверьте настройки прокси в charles)

PS: Ваше устройство / эмулятор ДОЛЖЕН использовать тот же Wi-Fi, поскольку используемый вами ip, скорее всего, будет частным ip.


1
  1. Откройте терминал в Android Studio и перейдите на ../../Android/sdk/tools. Исполняемый файл эмулятора должен быть доступен здесь.

  2. Запустите ./emulator -netdelay "delay_in_millis" -avd "emulator_device_name"

    Пример: ./emulator -netdelay 60000 -avd Nexus_5_API_21

  3. Теперь создайте свое приложение и установите его в эмуляторе.

  4. Запустите свой сценарий в приложении.

Убедитесь, что у вас есть изменения кода в приложении, которое устанавливает время ожидания для вашего запроса и обрабатывает это.


1

Просто зайдите на монитор устройства Android из Android studio, затем DDMS -> Emulator Control. Там будут свойства Speed ​​и Latency.


1

Я обнаружил, что netlimiter4 - лучшее решение для регулирования данных в эмуляторах. Он обеспечивает детальное управление через приличный графический интерфейс и предоставляет графическую обратную связь по пропускной способности данных для каждого процесса. В настоящее время в бесплатной бета-версии. Скриншот

http://www.netlimiter.com/products/nl4

В магазине игр есть приложения, позволяющие регулировать работу реальных устройств, но для них требуется root (я не могу дать никаких советов относительно того, насколько хорошо они работают, или вообще не работают - YMMV.)

поиск bradybound в игровом магазине, я не могу опубликовать более одной ссылки ..


1

ты пробовал это? Настройки - Сети - Дополнительно - Мобильные сети - Режим сети - Выберите предпочитаемую сеть (например, 2G).

Другой метод, который я использовал, был упомянут выше. Подключите через горячую точку iPhone. Надеюсь это поможет.


1

Я использую миттропрокси 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

Вы можете найти простое руководство здесь .

Вы можете найти другие примеры сценариев здесь .


0

Очень старый пост, но я добавлю свои два цента. Я был ОЧЕНЬ счастлив с этим аппаратным продуктом ( https://apposite-tech.com/products/linktropy-mini/ ), который позволил нам смоделировать множество реальных условий. Долгое время у нас были проблемы с поиском неисправностей в различных вещах, которые могли бы работать в режиме эмулятора или в режиме самолета

У нас есть несколько различных профилей настройки от нулевого подключения до различных этапов предельного подключения с различными уровнями задержки, потери пакетов и ошибок по битам. Самое замечательное в этом то, что мы можем изменить их на лету без необходимости перезапуска приложения в эмуляторе. Цена полностью стоила того для нашего магазина, и она очень проста в использовании.


0

Мне нужно было регулировать низкий интернет на устройстве AndroidTV, и, исходя из того, что я прочитал, наиболее подходящим решением было ограничение доступа в Интернет непосредственно в моем маршрутизаторе.
Зайдите в настройки маршрутизатора (локально это что-то вроде 192.168.0.1) -> настроить DHCP-сервер (если он не работает) -> выберите IP-адрес устройства и установите ограничение;

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.