Android simulieren niedrige Netzwerkkonnektivität

Ich möchte meine Anwendung für Fälle von geringer Netzwerkkonnektivität testen. Außer im Aufzug stehen, was ist der beste Weg, dies zu tun? Ich habe versucht, mein Telefon in eine Aluminiumfolie zu wickeln, aber es hat nicht viel geholfen.
Ich muss es auf einem echten Gerät testen, nicht in einem Emulator.

   

    Sie können den Emulator dafür verwenden. Sehen Sie sich diese Seite an: Android Emulator . Achte auf die nächsten beiden Argumente:

    1. -netdelay

      Stellen Sie die Netzwerklatenzemulation auf ein. Standardwert ist keiner. Informationen zu unterstützten Werten finden Sie in der Tabelle zur Netzwerkverzögerungsemulation.

    2. -netspeed

      Stellen Sie die Netzwerkgeschwindigkeitsemulation auf. Der Standardwert ist voll. Informationen zu unterstützten Werten finden Sie in der Tabelle zur Netzwerkgeschwindigkeitsemulation.

    Dies mag ein bisschen verrückt klingen, aber ein Mikrowellenherd dient als Mikrowellenschild. Wenn Sie Ihr Gerät daher in einen Mikrowellenherd stellen (schalten Sie den Mikrowellenofen NICHT ein, während sich Ihr Gerät darin befindet!), Wird Ihre Signalstärke stark abfallen. Es ist definitiv besser, in einem Aufzug zu stehen …

    Da die iPhone-Entwickleroption auf Wifi-Tethering anwendbar ist, können Sie ein iPhone mit iOS 6 und höher (und use for developments mit dem xcode ) verwenden, das gewünschte Netzwerkprofil emulieren und Ihr Android- Gerät mit seinem Hotspot verbinden

    Bildbeschreibung hier eingeben

    Update für Android Studio Version 1.5 oder höher
    Wie @LouMorda in einem Kommentar unten erwähnte, wurde die im Originalbeitrag erwähnte Registerkarte ” Emulator in Android Studio 1.5 entfernt.

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

    1. Wählen Sie Tools -> Android -> AVD Manager
    2. Klicken Sie auf die Schaltfläche Edit AVD (Stiftsymbol)
    3. Auf die Network Settings , nachdem Sie auf die Schaltfläche Show Advanced Settings anzeigen geklickt haben

    Hier ist ein Screenshot, wie es aussehen könnte:
    Netzwerkgeschwindigkeit und Latenzeinstellungen in Android Studio Version 1.5

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

    1. Gehe zu Run -> Edit Configurations
    2. Wähle Android Application -> [Your App]
    3. Wählen Sie die Registerkarte Emulator
    4. Hier können Sie verschiedene Werte für Network Speed und Network Latency ändern, um verschiedene Geschwindigkeiten und Latenzzeiten zu simulieren

    Alternativ können Sie im Textfeld Additional command line options verschiedene Argumente eingeben, wie in @ inazaruks Antwort erwähnt.

    Der folgende Screenshot beschreibt, wie dieser Bildschirm ” Run Configuration aussieht:

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

    Ich weiß, es ist ein bisschen spät, um auf diese Frage zu antworten, aber ich hoffe, dass dies hilft anderen mit ähnlichen Problemen konfrontiert!

    Bearbeiten
    Für jeden, der Eclipse benutzt, siehe @ Abhis Antwort unten.

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

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

    • Es installieren

    • Klicken Sie auf Proxy -> Throttle Settings

    • Richten Sie Ihre HTTP-gedrosselten Geschwindigkeiten ein

    • Schließe das Fenster

    • Klicken Sie auf Proxy -> Throttling , um die Proxy -> Throttling zu aktivieren

    • Öffnen Sie einen Genymotion-Emulator

    • Öffnen Sie die WLAN-Einstellungen

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

    • Klicken Sie auf Modify Network

    • Klicken Sie auf Show Advanced Options

    • Setzen Sie Proxy auf Manual

    • 10.0.3.2 Sie den Proxy hostname auf 10.0.3.2

    • Stellen Sie den Port auf 8888

    • Klicken Sie auf Save

    Und jetzt wird Ihr Netzwerk gedrosselt!

    Ich weiß, es ist eine alte Frage, aber …

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

    Bildbeschreibung hier eingeben

    Einfache Möglichkeit zum Testen Ihrer Anwendung mit niedriger / schlechter Verbindung im Emulator:

    Go Run > Führe Konfigurationen aus , wähle deine Android-Anwendung aus und gehe dort zum Ziel- Tab. Suchen Sie die Startparameter des Emulators . Hier können Sie Netzwerkgeschwindigkeit und Netzwerklatenz einfach ändern.

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

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

    Für weitere Details und um zu verstehen, welche Art von Geschwindigkeiten Sie testen sollten, finden Sie unter: http://openssignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-on-or Verbindungen /

    Facebook hat etwas namens Augmented Traffic Control erstellt . Eine kurze Zusammenfassung von ihrer GitHub Seite:

    Augmented Traffic Control (ATC) ist ein Werkzeug, um Netzwerkbedingungen zu simulieren. Es ermöglicht die Kontrolle der Verbindung, die ein Gerät mit dem Internet hat. Entwickler können ATC verwenden, um ihre Anwendung unter verschiedenen Netzwerkbedingungen zu testen und problemlos Hochgeschwindigkeitsnetze, Mobilfunknetze und sogar stark beeinträchtigte Netzwerke zu emulieren. Aspekte der Verbindung, die gesteuert werden können, umfassen:

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

    Um den Netzwerkverkehr gestalten zu können, muss ATC auf einem Gerät laufen, das den Verkehr routet und die reale IP-Adresse des Geräts sieht, wie beispielsweise Ihr Netzwerk-Gateway. Auf diese Weise können auch alle Geräte, die über ATC routen, ihren Datenverkehr gestalten. Der Verkehr kann über ein Web-Interface geformt / ungeformt werden, so dass alle Geräte mit einem Webbrowser ATC ohne die Notwendigkeit einer Client-Anwendung verwenden können.

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

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

    Oder auf einem tatsächlichen Gerät können Sie Einstellungen -> Mobilfunknetze -> Bevorzugte Netzwerktypen wählen und die langsamste verfügbare wählen … Natürlich ist das sehr begrenzt, aber für einige Testzwecke könnte es genug sein.

    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 das folgende Bild, das ich gepostet habe, ändern.

    Öffne deine Gaseinstellung

    Einstellung Ihrer Gaseinstellung

    Und schließlich werden Sie feststellen, dass der Netto-Status in eine niedrigere Geschwindigkeit umgewandelt wurde.

    Vor

    Einstellung nach

    Für und Mac OS Benutzer können Sie Network Link Conditioner verwenden, die von Apple heruntergeladen werden können. Stellen Sie es als AP auf Mac ein und alle Geräte könnten es verbinden.

    Sie können entweder Facebook Open-Source-Tools verwenden ATC http://facebook.github.io/augmented-traffic-control/

    Go Run> Führe Konfigurationen aus, wähle deine Android-Anwendung aus und gehe dort zum Ziel-Tab. Führen Sie die Änderungen wie in der Abbildung gezeigt aus.

    Bildbeschreibung hier eingeben

    UPDATE im 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 Verbindungseinstellung

    Keine Mikrowellen oder Aufzüge 🙂

    Ich habe einen halben Tag lang mit diesem Problem gekämpft, schließlich kam ich zu dieser Lösung:

    • Das Testen auf einem echten Gerät macht nicht viel Sinn, da man viel durchmachen muss, damit es funktioniert. Der einzige logische Weg, um echte Tests zu erzielen, besteht darin, dass Ihr Telefon eine Verbindung zu einem Mobilfunknetz mit niedriger Qualität wie EDGE herstellt, wenn es von Ihrer Telefongesellschaft bereitgestellt wird. Sie können dies versuchen, indem Sie in der Telefon-App *#*#4636#*#* wählen

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

    Der beste Weg, dies zu tun, ist Genymotion . Es ist ein Android-Emulator mit viel besserer performance als die ursprünglichen AVDs und die Version für den persönlichen Gebrauch ist kostenlos.

    Genymotion Emulator

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

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

    Aktualisieren:

    Ich habe gerade gemerkt, dass du die gleiche Strategie auch mit echten Geräten auswählen kannst. Ich fühle mich wie ein Idiot, weil ich es früher nicht 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.

    Möchten Sie keine Netzwerkverbindung oder nur eine langsame Netzwerkverbindung testen? Wenn Sie Ersteres sind, können Sie zu Settings > Wireless & networks > Airplane mode und den Flugmodus aktivieren. Auf diese Weise können Sie die Netzwerkverfügbarkeit auf einem tatsächlichen Gerät testen.

    Wie von @VicVu vorgeschlagen, ist Charles (oder jedes andere Proxy-Tool) ein einfacher Weg zu gehen. 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 process wird der gleiche sein:

    Ändern Sie die WLAN-Einstellung Ihres Geräts / Emulators, um den manuellen Proxy zu verwenden. Und dann setzen Sie den Proxy Hostname & Port a. setze den Hostnamen als IP deines Systems (erhalte die IP deines PC / Mac mit ifconfig / ifconfig) b. Setze die Portnummer von genymotion (überprüfe die Proxy-Einstellungen in charles)

    PS: Dein Gerät / Emulator MUSS das selbe WiFi verwenden, da die IP, die du verwendest, höchstwahrscheinlich die private IP sein wird.

    1. Öffnen Sie das Terminal in Androidroid und gehen Sie zu ../../Android/sdk/tools. ‘Emulator’ ausführbare Datei 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 jetzt 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 behandelt.

    Gehe einfach auf Android-Geräte-Monitor von Android Studio, dann DDMS -> Emulator Control.There werden Geschwindigkeit und Latenz-Eigenschaften sein.

    Ich fand, dass netlimiter4 die beste Lösung für das Drosseln von Daten in Emulatoren ist. Es bietet granulare Kontrolle durch eine anständige GUI und gibt Ihnen grafische Rückmeldung über den Datendurchsatz zu jedem process. Derzeit in einer kostenlosen Betaversion. Bildschirmfoto

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

    Es gibt Apps im Play Store, um auf tatsächliche Geräte zu drosseln, aber sie benötigen root (ich kann keinen Rat geben, wie gut sie funktionieren, wenn überhaupt – YMMV.)

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

    Ich bin überrascht, dass das niemand erwähnt hat. Sie können über Bluetooth anbinden und sie um zehn + Meter (oder weniger mit Hindernissen) trennen. Du hast eine wirklich schlechte Verbindung. Keine Mikrowelle, kein Aufzug, keine Software benötigt.

    Hast du das probiert? Einstellungen – Netzwerke – Mehr – Mobile Netzwerke – Netzwerkmodus – Wählen Sie das bevorzugte Netzwerk (z. B. 2G).

    Eine andere Methode, die ich verwendete, wurde oben erwähnt. Verbinde dich über den iPhone Hotspot. Hoffe das hilft.

    Ich benutze mitmproxy HTTPS-Proxy. https://mitmproxy.org/

    Mitmproxy ist eine Open-Source-Proxy-Anwendung, die HTTP- und HTTPS-Verbindungen zwischen jedem HTTP (S) -Client abfangen kann. Es ermöglicht die Überwachung, Erfassung und Änderung dieser Verbindungen in Echtzeit. Change Request, Response, Header, … Zusätzlich können Sie verschiedene Anfragen abfangen.

    zB Antwort_Delay.py :

     from mitmproxy import http from time import sleep def response(flow: http.HTTPFlow) -> None: sleep(5.0) 

    Wenn Sie diesen Kommentar ausführen, werden alle Antworten vom Server verzögert:

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

    In meiner App verwende ich das Zertifikat-Pinning, daher müssen Sie das Zertifikat hinzufügen (privat + öffentlich)

    cat private.key public.key> cert.pem

    Sie können hier ein einfaches Tutorial finden .

    Weitere Skriptbeispiele finden Sie hier .