Symuluj niską łączność sieciową dla Androida [zamknięte]

228

Chciałbym przetestować moją aplikację pod kątem przypadków niskiej łączności sieciowej. Jaki jest najlepszy sposób na to, oprócz stania w windzie? Próbowałem owinąć telefon folią aluminiową, ale to niewiele pomogło.

Muszę to przetestować na prawdziwym urządzeniu, a nie w emulatorze.

Maggie
źródło
1
Również badania klatki Faradaya . Są łatwe w budowie.
jww

Odpowiedzi:

119

Możesz do tego użyć emulatora. Spójrz na tę stronę: Emulator Androida . Zwróć uwagę na dwa kolejne argumenty:

  1. -netdelay <delay>

    Ustaw emulację opóźnienia sieci na. Wartość domyślna to none. Obsługiwane wartości znajdują się w tabeli w Emulacji opóźnienia sieciowego.

  2. -netspeed <speed>

    Ustaw emulację prędkości sieci na. Wartość domyślna jest pełna. Obsługiwane wartości znajdują się w tabeli w Emulacji prędkości sieci.

    Prędkości odniesienia w rosnącym kb / s:

                            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
źródło
15
bardzo dziękuję, ale jak powiedziałem, chciałbym przetestować na prawdziwym urządzeniu. w jakikolwiek sposób mogę to zrobić na telefonie HTC lub Samsung?
Maggie,
2
Domyślam się, że jedynym sposobem jest posiadanie routera / punktu dostępowego Wi-Fi, który może kontrolować prędkość sieci. To jest raczej kwestia administratora sieci. Ale teoretycznie powinno to być możliwe.
inazaruk
78
Korzystałem z windy :) ale dziękuję wszystkim
Maggie
3
Aby zasymulować opóźnienie przez HTTP, użyj ResponseCache.setDefault (new CacheResponse () {...}) i wstaw tam wywołanie Thread.sleep (200). Ma to tę zaletę, że jest kontrolowane programowo (tj. Tylko w jednym działaniu) i nie wpływa na inne procesy. Jednak w celu bardziej realistycznego testu powinieneś ustawić limit na routerze lub użyć tcpolecenia (z busybox).
odezwał się
112
Dlaczego przyjęto to jako odpowiedź? Pytanie wyraźnie brzmiało: „nie w emulatorze”
Kyle Ivey,
272

Może to zabrzmieć trochę szalone, ale kuchenka mikrofalowa służy jako osłona kuchenki mikrofalowej. Dlatego włożenie urządzenia do kuchenki mikrofalowej (NIE włączaj kuchenki mikrofalowej, gdy urządzenie jest w środku!) Spowoduje znaczne zmniejszenie siły sygnału. To zdecydowanie bije stojąc w windzie ...

Shams Shafiq
źródło
3
Wow, teraz jeśli mógłbyś mi zasugerować sposób, w jaki zmieściłbym się w piekarniku. A piece są przeznaczone do ekranowania 2,4 GHz. Może nie działać dla niższych częstotliwości. NIE WIEM!
WindRider 30.01.2019
2
nie działało w mojej kuchence mikrofalowej (tj. połączenie było nadal przyzwoite)! Agh: |
yura
1
Jeśli masz podłączony kabel USB, sygnał może się w ten sposób zakraść. Jeśli jest w kuchence mikrofalowej bez podłączonego przewodu, nie powinien otrzymywać sygnału. Powinieneś być w stanie osiągnąć ten efekt również za pomocą folii aluminiowej, która nie stopi telefonu, ponieważ nie możesz przypadkowo go wyłączyć.
John Moore,
Kuchenka mikrofalowa jest nadal dobrą opcją, jeśli chcesz uruchomić natychmiastowe odłączenie i nie potrzebujesz dalszej interakcji użytkownika, co było moim szczególnym przypadkiem użycia.
Robert Yang,
108

Ponieważ iPhone opcja deweloper stosuje się na wifi tethering, można uzyskać iPhone, który ma iOS 6i powyżej (i został ustawiony na use for developmentsz xcode), ustawić go naśladować żądany profil sieci, podłącz Android urządzenie do jego hotspot

wprowadź opis zdjęcia tutaj

Kirill Kulakov
źródło
10
Do tego też doszliśmy. Szkoda, że ​​jest to najbardziej rozsądna dostępna opcja. W odpowiedzi należy zauważyć, że iPhone wymaga połączenia 3G / komórkowego, aby tethering działał. Należy również pamiętać, że prędkości przesyłania / pobierania w narzędziu iPhone'a muszą zostać odwrócone, aby dotyczyły urządzenia na uwięzi.
Kyle Ivey,
Znakomity! Głupie, że to najlepsza opcja, zwłaszcza że emulator może to zrobić.
karl
Emulator iPhone'a może tethering WiFi?
Kirill Kulakov,
Dzięki. Był zdezorientowany, jak to skonfigurować. Oto jak - jeśli korzystasz z planu komórkowego, który pozwala na korzystanie z osobistych punktów dostępu. Używam iOS 7.12 1) przejdź do USTAWIENIA-> Komórkowe-> Osobisty hotspot 2) przesuń przełącznik Osobisty hotspot w prawo, aby był zielony / włączony (możesz zmienić hasło, jeśli wolisz) 3) cofnij się, wróć i przewiń w dół do Deweloper 4) przewiń w dół do Network Link Conditioner i dotknij go. przesuń WŁĄCZ w prawo, aby był zielony / włączony, a na końcu wybierz profil. Wybrałem „Very Bad Network”. To dało mi ping (2198ms) pobieranie (0,05 Mb / s) przesyłanie (0,08 Mb / s) 5) Podłącz Androida do hotspotu!
Anthony De Souza
1
Nie mogę przestać się śmiać, ale jest to najlepsze rozwiązanie do symulacji wolnej sieci na prawdziwym urządzeniu. Dzięki
KD.
71

Aktualizacja dla Androida Studio v 1.5 lub nowszego
Jak @LouMorda wspomniał w komentarzu poniżej, że Emulatorkarta wymieniona w oryginalnym poście została usunięta w Android Studio v 1.5.

Teraz umieścili te ustawienia w Ustawieniach symulatora w AVD Manager.
Aby uzyskać dostęp do tych ustawień:

  1. Wybierz Tools -> Android -> AVD Manager
  2. Kliknij Edit AVDprzycisk (ikona ołówka)
  3. Network SettingsMożna uzyskać po kliknięciu Show Advanced Settingsprzycisku

Oto zrzut ekranu, jak to może wyglądać:
Ustawienia prędkości i opóźnienia sieci w Android Studio v 1.5

Oryginalny post
Dla każdego, kto używa Android Studio IDE:

  1. Iść do Run -> Edit Configurations
  2. Wybierz Android Application -> [Your App]
  3. Wybierz Emulatorzakładkę
  4. Tutaj możesz zmieniać różne wartości Network Speedi Network Latencysymulować różne prędkości i opóźnienia itp

Alternatywnie możesz wpisać różne argumenty w Additional command line optionspolu tekstowym, jak wspomniano w odpowiedzi @ inazaruk.

Poniższy zrzut ekranu opisuje, jak Run Configurationwygląda ten ekran:

Uruchom ekran konfiguracji w Android Studio w wersji beta 0.8.6

Wiem, że jest trochę za późno, aby odpowiedzieć na to pytanie, ale mam nadzieję, że pomoże to innym w obliczu podobnych problemów!

Edytuj
Dla każdego używającego zaćmienia, patrz odpowiedź @ Abhi poniżej.

S1LENT WARRIOR
źródło
1
Ta karta została usunięta w Android Studio v1.5
Lou Morda,
@ S1LENT WARRIOR Czym jest opóźnienie i jaka jest różnica między (na przykład) „prędkością: zboczem, opóźnieniem: brak” i „prędkością: pełną, opóźnieniem: zboczem”?
Johnny Five,
1
@JohnnyFive prędkość odnosi się do prędkości sieci, a opóźnienie oznacza opóźnienie sieci.
S1LENT WARRIOR
45

Wiem, że to stare pytanie, ale ...

Niektóre telefony mają obecnie ustawienie umożliwiające korzystanie tylko z 2G. Jest idealny do symulacji wolnego Internetu na prawdziwym urządzeniu.

wprowadź opis zdjęcia tutaj

K
źródło
idealny ! powrót do krawędzi i przesyłanie z prędkością 9 kb / s.
JcV
Świetnie, idealnie pasuje do mojej obecnej potrzeby. W moim pokoju przesyłanie 200 KB prawie zawsze kończy się niepowodzeniem na 2G :)
Deleplace
3
Ten facet to prawdziwy MVP.
edwoollard
33

Lata, ale hej, wprowadzę moją niezawodną metodę z Genymotion.

  • Pobierz bezpłatną wersję próbną Charlesa: http://www.charlesproxy.com/download/

  • Zainstaluj to

  • KliknijProxy -> Throttle Settings

  • Skonfiguruj swoje przepustowości HTTP

  • Zamknij to okno

  • Kliknij, Proxy -> Throttlingaby włączyć przepustnicę

  • Otwórz emulator Genymotion

  • Otwórz ustawienia Wi-Fi

  • Naciśnij i przytrzymaj włączone połączenie Wi-Fi

  • Kliknij Modify Network

  • Kliknij Show Advanced Options

  • Ustaw ProxynaManual

  • Ustaw Proxy hostnamena10.0.3.2

  • Ustaw Portna8888

  • Kliknij Save

A teraz twoja sieć będzie dławiona!

VicVu
źródło
skąd masz nazwę hosta 10.0.3.2? czy to domyślna charle?
abbood
nazwa
16

Możesz także przetestować powolną łączność z Internetem na prawdziwym urządzeniu z Androidem:

Testowane z Samsung Galaxy S8 + Android 8.0.0

Idź do Ustawienia -> Połączenia -> Mobile Network -> i pod networkmode można używać tylko 2G lub 3G połączeń

rm -rf
źródło
15

Mam jedną strategię rozwiązania twojego problemu. Możesz użyć aplikacji proxy do modyfikowania lub monitorowania stanu sieci. np . Charles .

Powinieneś zmienić domyślną konfigurację Charlesa jak na poniższym obrazku, który zamieściłem.

Otwórz ustawienie przepustnicy

Ustawianie ustawienia przepustnicy

I wreszcie odkryjesz, że status sieci został ukształtowany w niższym tempie.

Przed

Ustawienie po

Benchur Wong
źródło
2
To jedyne jak dotąd odpowiednie rozwiązanie: D
egorikem
8

Łatwy sposób przetestowania aplikacji przy niskim / złym połączeniu w emulatorze:

Idź Uruchom > Uruchom konfiguracje , wybierz aplikację na Androida , a następnie przejdź do zakładki Cel . Parametry uruchamiania Look Emulator . Tutaj możesz łatwo modyfikować szybkość sieci i opóźnienie sieci.

pgarriga
źródło
8

Istnieje prosty sposób testowania niskich prędkości na prawdziwym urządzeniu, które wydaje się być przeoczone. Wymaga komputera Mac i połączenia sieciowego Ethernet (lub innego przewodowego).

Włącz udostępnianie Wi-Fi na komputerze Mac, zmieniając komputer w hotspot Wi-Fi, podłącz do niego urządzenie. Użyj Netlimiter / Charles Proxy lub Network Link Conditioner (który mógł już być zainstalowany), aby kontrolować prędkości.

Aby uzyskać więcej informacji i zrozumieć, jakie prędkości powinieneś przetestować przy kasie : http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor -znajomości/

James_OSM
źródło
Korzystając z panelu preferencji „Udostępnianie”, możesz współdzielić większość połączeń z większością dowolnych innych. Skonfigurowałem to, aby udostępniać moje połączenie Wi-Fi przez Bluetooth. (Łączenie za pomocą opcji Bluetooth nie pojawiło się na moim telefonie z Androidem, dopóki nie zostało skonfigurowane.)
Doug Reeder,
Aby zainstalować narzędzie Network Link Conditioner: stackoverflow.com/q/9659382
Pang
7

W Android Studio podczas uruchamiania emulatora:

1- Naciśnij przycisk Ustawienia na dole paska bocznego emulatora

2– Idź do komórkowej

3- Ustaw typ sieci

Zrzut ekranu

Mert Kahraman
źródło
6

Facebook zbudował coś o nazwie Augmented Traffic Control . Krótkie streszczenie ze strony GitHub:

Rozszerzona kontrola ruchu (ATC) to narzędzie do symulacji warunków w sieci. Pozwala kontrolować połączenie urządzenia z Internetem. Programiści mogą używać ATC do testowania swoich aplikacji w różnych warunkach sieciowych, łatwo emulując sieci o dużej prędkości, mobilne, a nawet poważnie uszkodzone. Aspekty połączenia, które można kontrolować, obejmują:

  • pasmo
  • czas oczekiwania
  • utrata pakietu
  • uszkodzone pakiety
  • zamawianie pakietów

Aby móc kształtować ruch sieciowy, ATC musi działać na urządzeniu, które kieruje ruchem i widzi prawdziwy adres IP urządzenia, na przykład bramę sieciową. Pozwala to również dowolnemu urządzeniu kierującemu się przez ATC na kształtowanie ruchu. Ruch można kształtować / kształtować za pomocą interfejsu sieciowego, dzięki czemu dowolne urządzenia z przeglądarką internetową mogą korzystać z ATC bez potrzeby stosowania aplikacji klienckiej.

Można go znaleźć tutaj na GitHub: https://github.com/facebook/augmented-traffic-control

Napisali również post na blogu na ten temat: https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/

Anirudh
źródło
6

Dziwię się, że nikt o tym nie wspominał. Możesz tethering przez Bluetooth i rozdzielić je na dziesięć + metrów (lub mniej z przeszkodami). Masz naprawdę złe połączenie. Bez mikrofalówki, windy, bez oprogramowania.

Haemin Yoo
źródło
To jest naprawdę dobre rozwiązanie, chyba że masz bardzo dobre połączenie Bluetooth. W tym celu musisz użyć starego urządzenia. :)
deweloper Androida
5

Lub na rzeczywistym urządzeniu możesz przejść do Ustawienia -> Sieci mobilne -> Preferowane typy sieci i wybrać najwolniejszy dostępny ... Oczywiście jest to bardzo ograniczone, ale dla niektórych celów testowych może to wystarczyć.

jpm
źródło
3

AKTUALIZACJA w studiu Android AVD:

  1. otwórz menedżera AVD
  2. utwórz / edytuj AVD
  3. kliknij ustawienia zaawansowane
  4. wybierz preferowane ustawienie łączności

Brak mikrofalówek lub wind :)

detman
źródło
3

Dla użytkowników systemu Mac OS możesz użyć Network Link Conditioner, który można pobrać z Apple. ustaw go jako AP na Macu i każdy dział może go podłączyć.

możesz użyć narzędzi Facebooka typu open source ATC http://facebook.github.io/augmented-traffic-control/

Lucas Liu
źródło
2

Czy chcesz przetestować brak połączenia sieciowego, czy tylko powolne połączenie sieciowe? Jeśli to pierwsze, możesz przejść do Settings > Wireless & networks > Airplane modetrybu samolotowego i włączyć go. To pozwoli ci przetestować niedostępność sieci na rzeczywistym urządzeniu.

David Conrad
źródło
Dzięki, ale próbowałem przetestować pod kątem niskiej łączności sieciowej. Na przykład. dla niskiego sygnału EDGE lub coś takiego.
Maggie,
Ach Szkoda, że ​​nie można wyłączyć 3G i wrócić do roamingu EDGE. Przynajmniej na moim telefonie nie możesz.
David Conrad
2

Idź Uruchom> Uruchom konfiguracje, wybierz aplikację na Androida, a następnie przejdź do zakładki Cel. Wykonaj zmiany, jak pokazano na rysunku.

wprowadź opis zdjęcia tutaj

Abhi
źródło
2

Walczyłem z tym problemem przez pół dnia, w końcu doszedłem do tego rozwiązania:

  • Testowanie na prawdziwym urządzeniu nie ma większego sensu, ponieważ musisz wiele zrobić, aby działało. Jedynym logicznym sposobem na przeprowadzenie prawdziwych testów jest połączenie telefonu z niskiej jakości siecią komórkową, taką jak EDGE, jeśli zapewnia to firma telekomunikacyjna. Możesz spróbować to zrobić, wybierając *#*#4636#*#*aplikację telefonu

  • Oryginalny emulator Androida jest zbyt wolny do testowania i nie osiąga więcej niż powyższe rozwiązanie.

Najlepszym sposobem na to jest użycie Genymotion . Jest to emulator Androida o znacznie lepszej wydajności niż oryginalne AVD, a wersja do użytku osobistego jest darmowa.

Emulator genymotion

Po utworzeniu urządzenia wirtualnego w Genymotion wystarczy przejść przez ten samouczek, aby ustawić serwer proxy dla tego urządzenia.

Uruchom serwer proxy na swoim komputerze hosta, który symuluje złe warunki sieciowe, takie jak Crapify lub Toxiproxy (testowałem tylko ten pierwszy) i jesteś gotowy .

Aktualizacja:

Właśnie zdałem sobie sprawę, że możesz wybrać tę samą strategię również z prawdziwymi urządzeniami. Czuję się jak idiota, bo nie zdawałem sobie z tego sprawy wcześniej. Wystarczy uruchomić serwer proxy Crapify na komputerze, ustawić serwer proxy telefonu na adres lokalny komputera i voila, masz kiepski internet w telefonie.

Iman Akbari
źródło
1

jak sugeruje @VicVu Charles (lub dowolne inne narzędzie proxy) jest łatwiejszym sposobem. Chciałbym jednak dodać, że możesz to zrobić na swoim urządzeniu, a nie tylko na genymotion lub innych emulatorach. Proces będzie taki sam:

Zmodyfikuj ustawienia Wi-Fi urządzenia / emulatora, aby korzystać z ręcznego proxy. A następnie ustaw nazwę hosta serwera proxy i port a. ustaw nazwę hosta jako ip twojego systemu (uzyskaj ip swojego komputera PC / Mac przy pomocy ifconfig / ifconfig) b. ustaw numer portu genymotion (sprawdź ustawienia proxy w charles)

PS: Twoje urządzenie / emulator MUSI używać tego samego Wi-Fi, ponieważ używany ip najprawdopodobniej będzie prywatnym ip.

Ankit
źródło
1
  1. Otwórz terminal w Android Studio i przejdź do ../../Android/sdk/tools. Plik wykonywalny „emulatora” powinien być dostępny tutaj.

  2. Uruchom ./emulator -netdelay "delay_in_millis" -avd "emulator_device_evice"

    Np .: ./emulator -netdelay 60000 -avd Nexus_5_API_21

  3. Teraz skompiluj aplikację i zainstaluj ją w emulatorze.

  4. Uruchom swój scenariusz w aplikacji.

Upewnij się, że masz zmiany w kodzie aplikacji, która ustawia limit czasu dla twojego żądania i obsługuje to.

cgr
źródło
1

Wystarczy przejść do monitora urządzenia Android ze studia Android, a następnie DDMS -> Sterowanie emulatorem. Będą właściwości Szybkość i Opóźnienie.

Lester
źródło
1

Odkryłem, że netlimiter4 jest najlepszym rozwiązaniem do dławienia danych do emulatorów. Zapewnia szczegółową kontrolę za pomocą przyzwoitego interfejsu GUI i zapewnia graficzne informacje zwrotne na temat przepustowości danych dla każdego procesu. Obecnie w bezpłatnej wersji beta. zrzut ekranu

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

W sklepie z zabawkami są dostępne aplikacje do dławienia rzeczywistych urządzeń, ale wymagają rootowania (nie mogę udzielić żadnej porady dotyczącej tego, jak dobrze działają, jeśli w ogóle - YMMV).

wyszukaj bradybound w sklepie Play, nie mogę opublikować więcej niż jednego linku ..

Michael.
źródło
1

próbowałeś tego? Ustawienia - Sieci - Więcej - Sieci mobilne - Tryb sieci - Wybierz preferowaną sieć (na przykład 2G).

Inną metodę, której użyłem, wspomniano powyżej. Połącz przez hot spot iPhone'a. Mam nadzieję że to pomoże.

Charlie Brown
źródło
1

Używam proxy HTTPS mitmproxy . https://mitmproxy.org/

Mitmproxy to aplikacja proxy typu open source, która umożliwia przechwytywanie połączeń HTTP i HTTPS między dowolnym klientem HTTP (S). Pozwala monitorować, rejestrować i zmieniać te połączenia w czasie rzeczywistym. Zmień żądanie, odpowiedź, nagłówek ... Dodatkowo możesz przechwytywać różne żądania.

np. response_delay.py :

from mitmproxy import http
from time import sleep

def response(flow: http.HTTPFlow) -> None:
    sleep(5.0)

Wykonanie tego komentarza opóźnia wszystkie odpowiedzi z serwera:

mitmproxy --cert \*.asdf.at=./cert.pem --scripts response_delay.py

W mojej aplikacji używam przypinania certyfikatów, więc musisz dodać certyfikat (prywatny + publiczny)

cat private.key public.key> cert.pem

Prosty samouczek można znaleźć tutaj .

Możesz znaleźć inne przykłady skryptów tutaj .

Manuel Schmitzberger
źródło
0

Bardzo stary post, ale dodam dwa centy. Byłem bardzo zadowolony z tego produktu sprzętowego ( https://apposite-tech.com/products/linktropy-mini/ ), który umożliwił nam symulację wielu rzeczywistych warunków. Przez długi czas mieliśmy problemy z rozwiązywaniem problemów związanych z emulatorem lub trybem samolotowym.

Mamy kilka różnych konfiguracji profili, od zerowej łączności do różnych etapów marginalnej łączności, z różnymi stopniami opóźnień, utraty pakietów i błędów bitów. Wspaniałą rzeczą jest to, że możemy je zmieniać w locie bez konieczności ponownego uruchamiania aplikacji w emulatorze. Dla naszego sklepu cena była całkowicie tego warta, a korzystanie z niego jest proste.

Benjamin Johnson
źródło
0

Musiałem dławić niski internet na rodzimym urządzeniu z AndroidTV i na podstawie tego, co przeczytałem, najbardziej odpowiednim rozwiązaniem było ograniczenie dostępu do Internetu bezpośrednio na moim routerze.
Przejdź do ustawień routera (lokalnie jest to jak 192.168.0.1) -> skonfiguruj serwer DHCP (jeśli nie jest uruchomiony) -> wybierz adres IP urządzenia i ustaw ograniczenie;

Artem N.
źródło