Имитация низкого сетевого подключения для 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                     
    
inazaruk
источник
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 ниже.

S1LENT WARRIOR
источник
1
Эта вкладка была удалена в Android Studio v1.5
Лу Морда
@ S1LENT WARRIOR Что такое задержка и в чем разница (например) между «скоростью: фронтом, задержкой: нет» и «скоростью: полной, задержкой: фронтом»?
Джонни Пять
1
@JohnnyFive скорость относится к скорости вашей сети, а задержка означает задержку сети.
S1LENT WARRIOR
45

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

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

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

Pkmmte
источник
идеальный ! обратно к краю и загрузки на 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

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

VicVu
источник
откуда вы взяли имя хоста 10.0.3.2? это Чарльз по умолчанию?
Abbood
имя хоста должно быть компьютером, на котором работает адрес локальной сети Чарльза
MaTriXy
16

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

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

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

рм -рф
источник
15

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

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

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

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

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

Перед

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

Бенчур Вонг
источник
2
Пока это единственное адекватное решение: D
egorikem
8

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

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

pgarriga
источник
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 -связностей /

James_OSM
источник
Используя панель настроек «Общий доступ», вы можете поделиться практически любым соединением с большинством других. Я настроил его на совместное использование 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/

Anirudh
источник
6

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

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

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

JPM
источник
3

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

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

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

detman
источник
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. Запустите свой сценарий в приложении.

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

CGR
источник
1

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

Lester
источник
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-адрес устройства и установите ограничение;

Артем Н
источник