Simulieren Sie eine niedrige Netzwerkkonnektivität für Android [geschlossen]


228

Ich möchte meine Anwendung auf Fälle geringer Netzwerkkonnektivität testen. Was ist der beste Weg, außer im Aufzug zu stehen? Ich habe versucht, mein Telefon in eine Aluminiumfolie zu wickeln, aber es hat nicht viel geholfen.

Ich muss es auf einem realen Gerät testen, nicht in einem Emulator.


1
Erforschen Sie auch Faradaysche Käfige . Sie sind einfach zu bauen.
JWW

Antworten:


119

Sie können hierfür den Emulator verwenden. Schauen Sie sich diese Seite an: Android Emulator . Achten Sie auf die nächsten beiden Argumente:

  1. -netdelay <delay>

    Stellen Sie die Netzwerklatenzemulation auf ein. Der Standardwert ist none. In der Tabelle unter Netzwerkverzögerungsemulation finden Sie unterstützte Werte.

  2. -netspeed <speed>

    Stellen Sie die Netzwerkgeschwindigkeitsemulation auf ein. Der Standardwert ist voll. In der Tabelle unter Netzwerkgeschwindigkeitsemulation finden Sie unterstützte Werte.

    Referenzgeschwindigkeiten bei steigenden 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
Vielen Dank, aber wie gesagt, ich möchte auf einem echten Gerät testen. Wie kann ich das auf einem HTC- oder Samsung-Telefon machen?
Maggie

2
Ich vermute, dass der einzige Weg darin besteht, einen WLAN-Router / AP zu haben, der die Netzwerkgeschwindigkeit steuern kann. Dies ist eher eine Sache des Netzwerkadministrators. Dies sollte aber theoretisch möglich sein.
Inazaruk

78
Ich habe den Aufzug benutzt :) aber danke an alle
Maggie

3
Verwenden Sie zum Simulieren der Latenz über HTTP ResponseCache.setDefault (neues CacheResponse () {...}) und geben Sie dort einen Thread.sleep (200) -Aufruf ein. Dies hat den Vorteil, dass es programmgesteuert gesteuert wird (dh nur in einer Aktivität) und andere Prozesse nicht beeinflusst. Für einen realistischeren Test sollten Sie jedoch das Limit auf Ihrem Router tcfestlegen oder den Befehl (von der Busybox) verwenden.
Yingted

112
Warum wurde dies als Antwort akzeptiert? Die Frage lautete eindeutig "nicht in einem Emulator"
Kyle Ivey

271

Das klingt vielleicht etwas verrückt, aber ein Mikrowellenherd dient als Mikrowellenschutz. Wenn Sie Ihr Gerät in einen Mikrowellenherd stellen (schalten Sie den Mikrowellenherd NICHT ein, während sich Ihr Gerät im Inneren befindet!), Verringert sich die Signalstärke erheblich. Es ist definitiv besser als in einem Aufzug zu stehen ...


3
Wow, wenn Sie mir jetzt einen Weg vorschlagen könnten, mich auch in den Ofen zu stecken. Und Öfen sind für die Abschirmung von 2,4 GHz ausgelegt. Bei niedrigeren Frequenzen funktioniert dies möglicherweise nicht. IDK!
WindRider

2
funktionierte nicht in meiner Mikrowelle (dh die Verbindung war immer noch anständig)! Agh: |
Yura

1
Wenn Sie ein USB-Kabel angeschlossen haben, kann sich das Signal auf diese Weise einschleichen. Wenn es sich in der Mikrowelle befindet und überhaupt kein Kabel angeschlossen ist, sollte es kein Signal erhalten. Sie sollten diesen Effekt auch mit Aluminiumfolie erzielen können, die das Telefon nicht zum Schmelzen bringt, da Sie das Telefon nicht versehentlich ausschalten können.
John Moore

Der Mikrowellenherd ist immer noch eine gute Option, wenn Sie eine sofortige Trennung auslösen müssen und keine weitere Benutzerinteraktion benötigen, was mein besonderer Anwendungsfall war.
Robert Yang

108

Da iPhones Option Entwickler auf WiFi Tethering anwenden, können Sie ein iPhone bekommen , das hat iOS 6und oben (und eingestellt wurde , um use for developmentsmit dem xcode), stellen sie die gewünschte Netzwerkprofil zu emulieren, schließen Sie Ihr Android - Gerät seine Hotspot

Geben Sie hier die Bildbeschreibung ein


10
Dies war auch die Lösung, zu der wir gekommen sind. Es ist eine Schande, dass dies die vernünftigste verfügbare Option ist. In der Antwort sollte beachtet werden, dass das iPhone eine 3G / Mobilfunkverbindung benötigt, damit das Tethering funktioniert. Beachten Sie auch, dass die im iPhone-Dienstprogramm erforderlichen Upload- / Download-Geschwindigkeiten invertiert werden müssen, um sich auf das angebundene Gerät zu beziehen.
Kyle Ivey

Brillant! Blöd, dass dies die beste Option ist, zumal der Emulator das kann.
Karl

Der iPhone Emulator kann WiFi binden?
Kirill Kulakov

Vielen Dank. War verwirrt, wie man es einrichtet. So geht's - wenn Sie einen Mobilfunkplan haben, der persönliche Hotspots zulässt. Ich verwende iOS 7.12. 1) Gehen Sie zu EINSTELLUNGEN-> Mobilfunk-> Persönlicher Hotspot. 2) Schieben Sie den Schalter für den persönlichen Hotspot nach rechts, damit er grün / eingeschaltet ist 4) Scrollen Sie nach unten zu Network Link Conditioner und tippen Sie darauf. Schieben Sie ENABLE nach rechts, damit es grün ist. Wählen Sie schließlich ein Profil aus. Ich habe "Very Bad Network" gewählt. Dies gab mir Ping (2198 ms) Download (0,05 Mbit / s) Upload (0,08 Mbit / s) 5) Verbinden Sie Ihr Android mit Hotspot!
Anthony De Souza

1
Ich kann nicht aufhören zu lachen, aber dies ist die beste Lösung, um ein langsames Netzwerk auf einem realen Gerät zu simulieren. Danke
KD.

71

Update für Android Studio v 1.5 oder höher
Wie @LouMorda in einem Kommentar unten erwähnt hatEmulator im ursprünglichen Beitrag erwähnte Tab in Android Studio v 1.5 entfernt.

Jetzt haben sie diese Einstellungen in den Simulatoreinstellungen in platziert AVD Manager.
So greifen Sie auf diese Einstellungen zu:

  1. Wählen Tools -> Android -> AVD Manager
  2. Drücke den Edit AVD Schaltfläche (Stiftsymbol)
  3. Sie Network Settingskönnen auf die Show Advanced SettingsSchaltfläche zugreifen, indem Sie auf die Schaltfläche klicken

Hier ist ein Screenshot, wie es aussehen kann:
Einstellungen für Netzwerkgeschwindigkeit und Latenz in Android Studio v 1.5

Originaler Beitrag
Für alle, die Android Studio IDE verwenden:

  1. Gehe zu Run -> Edit Configurations
  2. Wählen Android Application -> [Your App]
  3. Wählen Emulator Sie Registerkarte
  4. Hier können Sie verschiedene Werte für Network Speedund Network Latencyzur Simulation verschiedener Geschwindigkeiten und Latenzen usw. Ändern

Alternativ können Sie verschiedene Argumente in das Additional command line optionsTextfeld eingeben, wie in der Antwort von @ inazaruk erwähnt.

Der folgende Screenshot beschreibt, wie dieser Run ConfigurationBildschirm aussieht:

Führen Sie den Konfigurationsbildschirm in Android Studio Beta 0.8.6 aus

Ich weiß, dass es etwas spät ist, diese Frage zu beantworten, aber ich hoffe, dies hilft anderen, die mit ähnlichen Problemen konfrontiert sind!

Bearbeiten
Für alle, die Eclipse verwenden, siehe die Antwort von @ Abhi unten.


1
Diese Registerkarte wurde in Android Studio v1.5
Lou Morda

@ S1LENT WARRIOR Was ist Latenz und was ist der Unterschied zwischen (zum Beispiel) "Geschwindigkeit: Kante, Latenz: keine" und "Geschwindigkeit: voll, Latenz: Kante"?
Johnny Five

1
@JohnnyFive Geschwindigkeit bezieht sich auf Ihre Netzwerkgeschwindigkeit, und Latenz bedeutet die Netzwerkverzögerung.
S1LENT WARRIOR

45

Ich weiß, dass es eine alte Frage ist, aber ...

Einige Telefone haben heutzutage die Einstellung, nur 2G zu verwenden. Es ist perfekt, um langsames Internet auf einem realen Gerät zu simulieren.

Geben Sie hier die Bildbeschreibung ein


perfekt ! zurück zum Rand und ein Upload mit 9kbyte / s.
JcV

Großartig, das passt perfekt zu meinem aktuellen Bedarf. In meinem Zimmer schlägt ein 200KB-Upload auf 2G fast immer fehl :)
Deleplace

3
Dieser Typ ist der echte MVP.
Edwoollard

33

Jahre alt, aber hey, ich werde mich mit meiner narrensicheren Methode bei Genymotion einschalten.

  • Laden Sie die kostenlose Testversion von Charles herunter: http://www.charlesproxy.com/download/

  • Es installieren

  • KlickenProxy -> Throttle Settings

  • Richten Sie Ihre HTTP-Drosselgeschwindigkeit ein

  • Schließen Sie das Fenster

  • Klicken Sie Proxy -> Throttling, um den Gashebel zu aktivieren

  • Öffnen Sie einen Genymotion-Emulator

  • Öffnen Sie die WLAN-Einstellungen

  • Drücken Sie lange auf die aktivierte WLAN-Verbindung

  • Klicken Modify Network

  • Klicken Show Advanced Options

  • Set ProxyzuManual

  • Stellen Sie das Proxy hostnameauf10.0.3.2

  • Stellen Sie das Portauf8888

  • Klicken Save

Und jetzt wird Ihr Netzwerk gedrosselt!


Woher haben Sie den Hostnamen 10.0.3.2? Ist das Charles Standard?
Abbood

Hostname sollte der Computer sein, auf dem die lokale Netzwerkadresse von Charles ausgeführt wird
MaTriXy

16

Sie können auch die langsame Internetverbindung auf einem echten Android-Gerät testen:

Getestet mit Samsung Galaxy S8 + Android 8.0.0

Gehen Sie zu Einstellungen -> Verbindung -> Mobiles Netzwerk -> und wählen Sie im Netzwerkmodus aus, ob Sie nur 2G- oder 3G- Verbindungen verwenden möchten


15

Ich habe eine Strategie, um Ihr Problem zu lösen. Sie können die Proxy-Anwendung verwenden, um Ihren Netzstatus zu ändern oder zu überwachen. zB Charles .

Sie sollten die Standardkonfiguration des Charles wie im folgenden Bild ändern, das ich gepostet habe.

Öffnen Sie Ihre Drosselklappeneinstellung

Einstellen der Drosselklappeneinstellung

Und schließlich werden Sie feststellen, dass der Nettostatus in ein niedrigeres Tempo umgewandelt wurde.

Vor

Einstellung nach


2
Dies ist die bislang einzig adäquate Lösung: D
egorikem

8

Einfache Möglichkeit, Ihre Anwendung mit geringer / schlechter Verbindung im Emulator zu testen:

Gehen Sie zu Ausführen > Konfigurationen ausführen , wählen Sie Ihre Android-Anwendung aus und wechseln Sie dort zur Registerkarte Ziel . Schauen Sie sich die Startparameter des Emulators an . Hier können Sie die Netzwerkgeschwindigkeit und die Netzwerklatenz einfach ändern.


8

Es gibt eine einfache Möglichkeit, niedrige Geschwindigkeiten auf einem realen Gerät zu testen, das anscheinend übersehen wurde. Es erfordert einen Mac und eine Ethernet- (oder eine andere kabelgebundene) Netzwerkverbindung.

Aktivieren Sie die Wifi-Freigabe auf dem Mac, verwandeln Sie Ihren Computer in einen Wifi-Hotspot und verbinden Sie Ihr Gerät damit. Verwenden Sie Netlimiter / Charles Proxy oder Network Link Conditioner (möglicherweise bereits installiert), um die Geschwindigkeit zu steuern.

Weitere Informationen und Informationen zu den Geschwindigkeiten, die Sie testen sollten, finden Sie unter: http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor -verbindungen /


Über den Einstellungsbereich "Freigabe" können Sie fast jede Verbindung mit den meisten anderen teilen. Ich habe es so eingestellt, dass meine WLAN-Verbindung über Bluetooth freigegeben wird. (Die Verbindung über Bluetooth-Optionen wurde auf meinem Android-Telefon erst angezeigt, als dies eingerichtet wurde.)
Doug Reeder

So installieren Sie das Network Link Conditioner Tool: stackoverflow.com/q/9659382
Pang

7

In Android Studio beim Ausführen eines Emulators:

1- Klicken Sie unten in der Emulator-Seitenleiste auf die Schaltfläche Einstellungen

2- Gehen Sie zu Cellular

3- Stellen Sie den Netzwerktyp ein

Bildschirmfoto


6

Facebook hat so etwas wie Augmented Traffic Control gebaut . Eine kurze Zusammenfassung von ihrer GitHub-Seite:

Augmented Traffic Control (ATC) ist ein Tool zur Simulation von Netzwerkbedingungen. Es ermöglicht die Steuerung der Verbindung eines Geräts zum Internet. Entwickler können ATC verwenden, um ihre Anwendung unter verschiedenen Netzwerkbedingungen zu testen und dabei problemlos Hochgeschwindigkeits-, Mobil- und sogar stark beeinträchtigte Netzwerke zu emulieren. Zu den Aspekten der Verbindung, die gesteuert werden können, gehören:

  • Bandbreite
  • Latenz
  • Paketverlust
  • beschädigte Pakete
  • Pakete bestellen

Um den Netzwerkverkehr gestalten zu können, muss ATC auf einem Gerät ausgeführt werden, das den Verkehr weiterleitet und die tatsächliche IP-Adresse des Geräts erkennt, z. B. Ihr Netzwerk-Gateway. Auf diese Weise können auch Geräte, die über ATC routen, ihren Datenverkehr gestalten. Der Datenverkehr kann mithilfe einer Weboberfläche gestaltet / nicht geformt werden, sodass Geräte mit einem Webbrowser ATC verwenden können, ohne dass eine Clientanwendung erforderlich ist.

Sie finden es hier auf GitHub: https://github.com/facebook/augmented-traffic-control

Sie haben auch einen Blog-Beitrag darüber geschrieben: https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/


6

Ich bin überrascht, dass niemand dies erwähnt hat. Sie können über Bluetooth eine Verbindung herstellen und diese um mehr als zehn Meter (oder weniger bei Hindernissen) voneinander trennen. Du hast eine wirklich schlechte Verbindung. Keine Mikrowelle, kein Aufzug, keine Software erforderlich.


Dies ist eigentlich eine gute Lösung, es sei denn, Sie haben eine sehr gute Bluetooth-Verbindung. Dazu muss ein altes Gerät verwendet werden. :)
Android-Entwickler

5

Oder auf einem tatsächlichen Gerät können Sie unter Einstellungen -> Mobilfunknetze -> Bevorzugte Netzwerktypen den langsamsten verfügbaren auswählen ... Natürlich ist dies sehr begrenzt, aber für einige Testzwecke kann dies ausreichen.


3

UPDATE auf dem Android Studio AVD:

  1. Öffnen Sie den AVD-Manager
  2. AVD erstellen / bearbeiten
  3. Klicken Sie auf Erweiterte Einstellungen
  4. Wählen Sie Ihre bevorzugte Konnektivitätseinstellung

Keine Mikrowellen oder Aufzüge :)



2

Möchten Sie keine Netzwerkverbindung oder nur eine langsame Netzwerkverbindung testen? In diesem Fall können Sie den Settings > Wireless & networks > Airplane modeFlugzeugmodus aktivieren. Auf diese Weise können Sie die Nichtverfügbarkeit des Netzwerks auf einem tatsächlichen Gerät testen.


Vielen Dank, aber ich habe versucht, auf geringe Netzwerkkonnektivität zu testen. Z.B. für ein Signal mit niedriger EDGE oder so ähnlich.
Maggie

Ah. Schade, dass Sie 3G nicht ausschalten und zum EDGE-Roaming zurückkehren können. Zumindest kannst du das auf meinem Handy nicht.
David Conrad

2

Gehen Sie zu Ausführen> Konfigurationen ausführen, wählen Sie Ihre Android-Anwendung aus und wechseln Sie dort zur Registerkarte Ziel. Nehmen Sie die Änderungen wie in der Abbildung gezeigt vor.

Geben Sie hier die Bildbeschreibung ein


2

Ich hatte einen halben Tag mit diesem Problem zu kämpfen, schließlich kam ich zu dieser Lösung:

  • Das Testen auf einem realen Gerät macht insgesamt wenig Sinn, da Sie viel durchmachen müssen, damit es funktioniert. Der einzig logische Weg, um echte Tests durchzuführen, besteht darin, Ihr Telefon mit einem Mobilfunknetz von geringer Qualität wie EDGE zu verbinden, sofern Ihre Telefongesellschaft dies bereitstellt. Sie können dies versuchen, indem Sie *#*#4636#*#*in der Telefon-App wählen

  • Der ursprüngliche Android-Emulator ist viel zu langsam zum Testen und erreicht nicht mehr als die oben genannte Lösung.

Der beste Weg, dies zu tun, ist die Verwendung von Genymotion . Es ist ein Android-Emulator mit einer viel besseren Leistung als die Original-AVDs und die Version für den persönlichen Gebrauch ist kostenlos.

Genymotion Emulator

Nachdem Sie Ihr virtuelles Gerät in Genymotion erstellt haben, führen Sie einfach dieses Lernprogramm durch , um einen Proxy für das Gerät festzulegen .

Führen Sie auf Ihrem Host-Computer einen Proxyserver aus, der beispielsweise schlechte Netzwerkbedingungen simuliert Crapify oder Toxiproxy simuliert (ich habe nur den ersteren getestet), und Sie können loslegen .

Aktualisieren:

Ich habe gerade festgestellt, dass Sie dieselbe Strategie auch mit echten Geräten wählen können. Ich fühle mich wie ein Idiot, weil ich es nicht früher bemerkt habe. Starten Sie einfach einen Crapify-Proxy auf Ihrem Computer, stellen Sie Ihren Telefon-Proxy auf die lokale Adresse Ihres Computers ein und voila, Sie haben beschissenes Internet auf Ihrem Telefon.


1

Wie von @VicVu Charles (oder einem anderen Proxy-Tool) vorgeschlagen, ist dies ein einfacher Weg. Aber ich möchte hinzufügen, dass Sie dies auch mit Ihrem Gerät tun können, nicht nur mit Genymotion oder anderen Emulatoren. Der Prozess wird der gleiche sein:

Ändern Sie die WLAN-Einstellung Ihres Geräts / Emulators, um den manuellen Proxy zu verwenden. Legen Sie dann den Proxy-Hostnamen und -Port fest. A. Legen Sie den Hostnamen als IP Ihres Systems fest (rufen Sie die IP Ihres PCs / Macs mit ifconfig / ifconfig ab). b. Stellen Sie die Portnummer von Genymotion ein (überprüfen Sie die Proxy-Einstellungen in Charles).

PS: Ihr Gerät / Emulator MUSS dasselbe WLAN verwenden, da die von Ihnen verwendete IP-Adresse höchstwahrscheinlich die private IP-Adresse ist.


1
  1. Öffnen Sie das Terminal in Android Studio und gehen Sie zu ../../Android/sdk/tools. Die ausführbare Datei 'emulator' sollte hier verfügbar sein.

  2. Führen Sie ./emulator -netdelay "delay_in_millis" -avd "emulator_device_name" aus.

    Beispiel: ./emulator -netdelay 60000 -avd Nexus_5_API_21

  3. Erstellen Sie nun Ihre App und installieren Sie sie im Emulator.

  4. Führen Sie Ihr Szenario in der App aus.

Stellen Sie sicher, dass Sie Ihre Codeänderungen in der App haben, die das Zeitlimit für Ihre Anfrage festlegt und diese verarbeitet.


1

Gehen Sie einfach von Android Studio zum Android-Gerätemonitor und dann zu DDMS -> Emulator Control. Es gibt Eigenschaften für Geschwindigkeit und Latenz.


1

Ich fand netlimiter4 die beste Lösung, um Daten auf Emulatoren zu drosseln. Es bietet eine detaillierte Steuerung durch eine anständige Benutzeroberfläche und gibt Ihnen grafisches Feedback zum Datendurchsatz für jeden Prozess. Derzeit in einer kostenlosen Beta. Bildschirmfoto

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

Es gibt Apps im Play Store, mit denen Sie auf tatsächliche Geräte drosseln können, für die jedoch Root erforderlich ist (ich kann keine Ratschläge dazu geben, wie gut sie funktionieren, wenn überhaupt - YMMV.)

Suche nach Bradybound im Play Store, ich kann nicht mehr als einen Link posten.


1

hast du das versucht Einstellungen - Netzwerke - Mehr - Mobile Netzwerke - Netzwerkmodus - Wählen Sie das bevorzugte Netzwerk (z. B. 2G).

Eine andere Methode, die ich verwendet habe, wurde oben erwähnt. Verbindung über den iPhone-Hotspot herstellen. Hoffe das hilft.


1

Ich verwende Mitmproxy HTTPS-Proxy. https://mitmproxy.org/

Mitmproxy ist eine Open Source-Proxy-Anwendung, mit der HTTP- und HTTPS-Verbindungen zwischen beliebigen HTTP (S) -Clients abgefangen werden können. Es ermöglicht die Überwachung, Erfassung und Änderung dieser Verbindungen in Echtzeit. Änderungsanforderung, Antwort, Header, ... Zusätzlich können Sie verschiedene Anforderungen abfangen.

zB response_delay.py :

from mitmproxy import http
from time import sleep

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

Das Ausführen dieses Kommentars verzögert dann alle Antworten vom Server:

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

In meiner App verwende ich das Anheften von Zertifikaten, daher müssen Sie das Zertifikat hinzufügen (privat + öffentlich).

cat private.key public.key> cert.pem

Ein einfaches Tutorial finden Sie hier .

Weitere Skriptbeispiele finden Sie hier .


0

Sehr alter Beitrag, aber ich werde meine zwei Cent hinzufügen. Ich war SEHR zufrieden mit diesem Hardwareprodukt ( https://apposite-tech.com/products/linktropy-mini/ ), mit dem wir viele reale Bedingungen simulieren konnten. Lange Zeit hatten wir Probleme bei der Fehlerbehebung bei verschiedenen Problemen, die im Emulator oder im Flugzeugmodus funktionieren würden.

Wir haben verschiedene Profile eingerichtet, von Null-Konnektivität bis zu verschiedenen Stufen der Grenzkonnektivität mit unterschiedlichen Latenzgraden, Paketverlusten und Bitfehlern. Das Tolle daran ist, dass wir diese im laufenden Betrieb ändern können, ohne die App in einem Emulator neu starten zu müssen. Der Preis hat sich für unseren Shop absolut gelohnt und ist kinderleicht zu bedienen.


0

Ich musste das niedrige Internet auf einem nativen AndroidTV-Gerät drosseln und basierend auf dem, was ich gelesen habe, war die am besten geeignete Lösung, den Internetzugang direkt in meinem Router zu beschränken.
Gehen Sie zu den Router-Einstellungen (lokal ist es etwas wie 192.168.0.1) -> richten Sie den DHCP-Server ein (falls er nicht ausgeführt wird) -> wählen Sie die IP-Adresse eines Geräts und legen Sie die Einschränkung fest;

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.