Моделюйте низьку мережеву підключення для Android [закрито]


228

Я хотів би перевірити свою програму на випадки низької підключення до мережі. Окрім стояння в ліфті, який найкращий спосіб це зробити? Я спробував загорнути телефон в алюмінієву фольгу, але це не дуже допомогло.

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


1
Також досліджуйте клітини Фарадея . Їх легко побудувати.
jww

Відповіді:


119

Для цього можна використовувати емулятор. Погляньте на цю сторінку: Емулятор Android . Зверніть увагу на наступні два аргументи:

  1. -netdelay <delay>

    Встановіть емуляцію затримки в мережі на. Значення за замовчуванням - жодне. Дивіться таблицю в Емуляції затримки мережі для підтримуваних значень.

  2. -netspeed <speed>

    Встановіть емуляцію швидкості мережі на. Значення за замовчуванням повне. Дивіться таблицю в емуляції швидкості мережі для підтримуваних значень.

    Швидкість для довідок у збільшенні kbps:

                            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, який може керувати швидкістю мережі. Це більше речі адміністратора мережі. Але теоретично це повинно бути можливим.
inazaruk

78
Я користувався ліфтом :), але дякую всім
Меггі

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

112
Чому це було прийнято як відповідь? У запитанні чітко сказано "не в емуляторі"
Кайл Іві

272

Це може здатися трохи божевільним, але мікрохвильова піч служить мікрохвильовим екраном. Тому розміщення пристрою всередині мікрохвильової печі (НЕ включайте мікрохвильову піч, поки ваш пристрій знаходиться всередині!) Призведе до значного падіння потужності сигналу. Це безумовно б'є стоячи всередині ліфта ...


3
Нічого собі, якщо ви можете запропонувати мені спосіб вписатись у духовку. А духовки розраховані на екранування 2,4 ГГц. Він може не працювати на нижчих частотах. ІДК!
WindRider

2
не працював у моїй мікрохвильовій печі (тобто з'єднання все ще було пристойним)! Agh: |
Юра

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

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

108

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

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


10
Це було рішення, до якого ми також прийшли. Прикро, що це найзручніший доступний варіант. Слід зазначити у відповіді, що iPhone вимагає 3G / стільникового з'єднання для того, щоб приєднатися до роботи. Також слід врахувати, що швидкість завантаження / завантаження в утиліті iPhone потрібно інвертувати, щоб вона стосувалася прив'язаного пристрою.
Кайл Айві

Блискуче! Дурне, що це найкращий варіант, тим більше, що емулятор може це зробити.
Карл

Емулятор iPhone може зв’язати WiFi?
Кирило Кулаков

Дякую. Заплутався, як його налаштувати. Ось так - якщо ви перебуваєте на стільниковому плані, який дозволяє персональні гарячі точки. 1 4) прокрутіть униз до Кондиціонера мережевих посилань та торкніться його. просуньте ENABLE вправо, щоб він став зеленим / увімкнути нарешті, виберіть профіль. Я вибрав "Дуже погана мережа". Це дало мені завантажити пінг (2198 мс) завантажити (0,05 Мбіт / с) завантажити (0,08 Мбіт / с) 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
Lou Morda

@ S1LENT WARRIOR Що таке затримка та яка різниця між (наприклад) "швидкістю: край, затримка: немає" та "швидкість: повна, затримка: край"?
Джонні П'ять

1
@JohnnyFive швидкість означає швидкість вашої мережі, а затримка означає затримку мережі.
S1LENT WARRIOR

45

Я знаю, що це старе питання, але ...

Деякі телефони сьогодні мають налаштування використовувати лише 2G. Він ідеально підходить для імітації повільного Інтернету на реальному пристрої.

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


ідеально! назад до краю та завантаження в 9 кбайт / с.
JcV

Чудово, це цілком відповідає моїй сьогоднішній потребі. У моїй кімнаті завантаження на 200 КБ майже завжди не вдається на 2G :)
Deleplace

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? це Чарл за замовчуванням?
абат

ім'я хоста має бути комп’ютером, на якому використовується локальна адреса локальної мережі Чарльза
MaTriXy

16

Ви також можете перевірити повільне підключення до Інтернету на реальному пристрої Android:

Тестовано на Samsung Galaxy S8 + Android 8.0.0

Перейдіть у Налаштування -> З'єднання -> Мобільна мережа -> та під мережевим режимом ви можете використовувати лише 2G підключення або 3G


15

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

Вам слід змінити конфігурацію Карла за замовчуванням, як на наступному зображенні, яке я опублікував.

Відкрийте налаштування дросельної заслінки

Налаштування налаштування дросельної заслінки

І, нарешті, ви виявите, чистий статус був сформований у більш низькому темпі.

До цього

Встановлення після


2
Це єдине досі адекватне рішення: D
egorikem

8

Простий спосіб перевірити свою програму при низькому / поганому підключенні в емуляторі:

Go Run > Конфігурація Run , виберіть додаток для Android , і перейти до цільової вкладці. Подивіться параметри запуску емулятора . Тут ви можете легко змінити мережеву швидкість та мережеву затримку.


8

Існує простий спосіб тестування низьких швидкостей на реальному пристрої, який, здається, був упущений з уваги. Для цього потрібні підключення до мережі Mac та ethernet (або інше дротове).

Увімкніть обмін Wi-Fi на Mac, перетворивши комп’ютер у точку доступу Wi-Fi, підключіть до цього свій пристрій. Використовуйте Netlimiter / Charles Proxy або Network Connector Conditioner (який, можливо, ви вже встановили) для управління швидкістю.

Щоб отримати докладніші відомості та зрозуміти, які швидкості ви повинні перевірити, перевірте: http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor -з'єднання /


Використовуючи панель уподобань "Спільний доступ", ви можете ділитися більшістю будь-якого з'єднання з більшістю будь-якого іншого. Я встановив його для спільного доступу до WiFi через Bluetooth. (Підключення через опції Bluetooth не з’явилося на моєму Android-телефоні, поки це не було встановлено.)
Doug Reeder

Щоб встановити інструмент кондиціонера Network Link: stackoverflow.com/q/9659382
Pang,

7

У Android Studio під час роботи емулятора:

1- Натисніть кнопку налаштувань у нижній частині бічної панелі емулятора

2- Перейдіть до стільникового зв'язку

3- Встановити тип мережі

Знімок екрана


6

Facebook побудував щось, що називається Доповнене управління трафіком . Короткий підсумок зі сторінки GitHub:

Розширений контроль трафіку (УВД) - це інструмент для моделювання мережевих умов. Це дозволяє контролювати з'єднання, яке має пристрій до Інтернету. Розробники можуть використовувати ATC для тестування свого застосування в різних мережевих умовах, легко емулюючи швидкісні, мобільні та навіть сильно порушені мережі. Аспекти з'єднання, якими можна керувати, включають:

  • пропускна здатність
  • затримка
  • втрата пакету
  • пошкоджені пакети
  • замовлення пакетів

Для того, щоб мати можливість формувати мережевий трафік, АТС повинен працювати на пристрої, який спрямовує трафік і бачить реальну IP-адресу пристрою, наприклад, ваш мережевий шлюз. Це також дозволяє будь-яким пристроям, які проходять через АТС, мати можливість формувати свій трафік. Трафік можна формувати / формувати за допомогою веб-інтерфейсу, що дозволяє будь-яким пристроям із веб-браузером користуватися 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. Для цього потрібно використовувати старий пристрій. :)
андроїд розробник

5

Або на фактичному пристрої ви можете перейти в Налаштування -> Мобільні мережі -> Кращі типи мереж і вибрати найповільніші доступні ... Звичайно, це дуже обмежено, але для деяких тестових цілей це може бути достатньо.


3

ОНОВЛЕННЯ в студії Android AVD:

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

Ніяких мікрохвиль чи ліфтів :)


3

для користувачів ОС Mac і Mac ви можете використовувати кондиціонер Network Link, який можна завантажити з 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, просто пройдіть цей підручник, щоб встановити проксі для пристрою.

Запустіть на своєму хост-сервері проксі-сервер, який імітує погані мережеві умови, наприклад Crapify або Toxiproxy (я протестував лише попередні), і ви готові йти.

Оновлення:

Я щойно зрозумів, що ви можете вибрати саму стратегію і з реальними пристроями. Я відчуваю себе ідіоткою за те, що раніше цього не усвідомив. Просто запустіть проксі-сервер Crapify на своєму комп’ютері, встановіть проксі телефону на локальну адресу та вуаля вашого комп'ютера, у вас на телефоні є хитрий Інтернет.


1

як запропонував @VicVu Чарльз (або будь-який інший інструмент проксі) - це простіший шлях. Але я хотів би додати, що ви можете це робити і зі своїм пристроєм, а не лише з генімоцією чи іншими емуляторами. Процес буде таким же:

Змініть налаштування wifi вашого пристрою / емулятора, щоб використовувати проксі-сервер вручну. А потім встановіть ім'я хоста проксі-сервера та порт a. встановіть ім'я хоста як ip вашої системи (отримайте ip вашого ПК / mac, використовуючи ifconfig / ifconfig) b. встановити номер порту genymotion (перевірити параметри проксі в charles)

PS: Ваш пристрій / емулятор ОБОВ'ЯЗКОВО повинен використовувати той самий wifi, оскільки ip, який ви використовуєте, швидше за все, буде приватним ip.


1
  1. Відкрийте термінал в студії Android і перейдіть до ../../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, потім DDMS -> Емулятор управління. Там будуть властивості швидкості та затримки.


1

Я виявив netlimiter4 найкращим рішенням для дроселювання даних емуляторів. Він забезпечує ґрунтовний контроль через гідний інтерфейс і дає графічний зворотний зв'язок щодо пропускної здатності даних до кожного процесу. Наразі у безкоштовній бета-версії. скріншот

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

У ігровому магазині є програми, що дозволяють переключити фактичні пристрої, але вони вимагають root (я не можу надати будь-яку пораду щодо того, наскільки добре вони працюють, якщо взагалі - YMMV.)

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


1

ви пробували це? Налаштування - Мережі - Більше - Мобільні мережі - Режим мережі - Виберіть бажану мережу (наприклад, 2G).

Інший метод, який я використовував, був згаданий вище. Підключіться через гарячу точку iPhone. Сподіваюсь, це допомагає.


1

Я використовую mitmproxy 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

У своєму додатку я використовую фіксацію сертифікатів, тому вам потрібно додати сертифікат (приватний + загальнодоступний)

кішка 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.