Simuler une faible connectivité réseau pour Android [fermé]


228

Je voudrais tester mon application pour les cas de faible connectivité réseau. Sauf debout dans l'ascenseur, quelle est la meilleure façon de procéder? J'ai essayé d'envelopper mon téléphone dans une feuille d'aluminium, mais cela n'a pas beaucoup aidé.

Je dois le tester sur un vrai appareil, pas dans un émulateur.


1
Recherchez également les cages de Faraday . Ils sont faciles à construire.
2018 à 11h53

Réponses:


119

Vous pouvez utiliser l'émulateur pour cela. Jetez un œil à cette page: Android Emulator . Faites attention aux deux arguments suivants:

  1. -netdelay <delay>

    Définissez l'émulation de latence du réseau sur. La valeur par défaut est aucune. Consultez le tableau dans Emulation de délai réseau pour les valeurs prises en charge.

  2. -netspeed <speed>

    Définissez l'émulation de la vitesse du réseau sur. La valeur par défaut est pleine. Consultez le tableau de l'émulation de la vitesse du réseau pour les valeurs prises en charge.

    Vitesses de référence en kbps croissants:

                            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
merci beaucoup, mais comme je l'ai dit, je voudrais tester sur un vrai appareil. de toute façon je peux le faire sur un téléphone htc ou samsung?
Maggie

2
Je suppose que la seule façon de procéder est d'avoir un routeur / point d'accès Wi-Fi qui peut contrôler la vitesse du réseau. Il s'agit plus d'une chose d'administration réseau. Mais cela devrait théoriquement être possible.
inazaruk

78
J'ai utilisé l'ascenseur :) mais merci à tous
Maggie

3
Pour simuler la latence sur HTTP, utilisez ResponseCache.setDefault (nouveau CacheResponse () {...}) et placez-y un appel Thread.sleep (200). Cela a l'avantage d'être contrôlé par programme (c'est-à-dire uniquement dans une seule activité) et de ne pas affecter les autres processus. Cependant, pour un test plus réaliste, vous devez définir la limite sur votre routeur ou utiliser la tccommande (depuis busybox).
décédé

112
Pourquoi cela a-t-il été accepté comme réponse? La question indiquait clairement "pas dans un émulateur"
Kyle Ivey

272

Cela peut sembler un peu fou, mais un four à micro-ondes sert de bouclier à micro-ondes. Par conséquent, si vous placez votre appareil dans un four à micro-ondes (N'ALLUMEZ PAS le four à micro-ondes lorsque votre appareil est à l'intérieur!), La puissance du signal diminuera considérablement. Ça bat vraiment debout dans un ascenseur ...


3
Wow, maintenant si vous pouviez me suggérer un moyen de me mettre dans le four aussi. Et les fours sont conçus pour protéger 2,4 GHz. Cela peut ne pas fonctionner pour les fréquences plus basses. IDK!
WindRider

2
ne fonctionnait pas dans mon micro-ondes (c'est-à-dire que la connexion était toujours correcte)! Agh: |
yura

1
Si vous avez un cordon USB connecté, le signal peut se faufiler de cette façon. S'il se trouve à l'intérieur du micro-ondes sans aucun cordon, il ne devrait pas recevoir de signal. Vous devriez pouvoir obtenir cet effet également avec du papier d'aluminium, qui ne fera pas fondre le téléphone car vous ne pouvez pas éteindre accidentellement le téléphone.
John Moore

Le four à micro-ondes est toujours une bonne option si vous devez déclencher une déconnexion immédiate et ne nécessite pas d'interaction supplémentaire avec l'utilisateur, ce qui était mon cas d'utilisation particulier.
Robert Yang

108

Étant donné que l' option développeur iPhones s'applique sur le partage de connexion Wi-Fi, vous pouvez obtenir un iPhone qui a iOS 6et au-dessus (et a été défini use for developmentsavec le xcode), le configurer pour émuler le profil réseau souhaité, connecter votre appareil Android à son hotspot

entrez la description de l'image ici


10
C'est aussi la solution à laquelle nous sommes arrivés. Il est dommage que ce soit l'option la plus saine disponible. Il convient de noter dans la réponse que l'iPhone nécessite une connexion 3G / cellulaire pour que le partage de connexion fonctionne. Il convient également de noter que les vitesses de téléchargement / téléchargement dans l'utilitaire iPhone doivent être inversées pour respecter le périphérique attaché.
Kyle Ivey

Brillant! Idiot que c'est la meilleure option, d'autant plus que l'émulateur peut le faire.
karl

L'émulateur iPhone peut attacher le WiFi?
Kirill Kulakov

Merci. A été confus comment le configurer. Voici comment - si vous utilisez un forfait cellulaire qui autorise les points d'accès personnels. J'utilise iOS 7.12 1) allez dans PARAMÈTRES-> Cellulaire-> Hotspot personnel 2) faites glisser le commutateur Hotspot personnel vers la droite pour qu'il soit vert / allumé (peut changer le mot de passe si vous préférez) 3) retournez, revenez en arrière et faites défiler jusqu'à Développeur 4) faites défiler jusqu'à Network Link Conditioner et appuyez dessus. faites glisser ENABLE vers la droite pour qu'il soit vert / allumé choisissez enfin un profil. J'ai choisi "Very Bad Network". Cela m'a donné un ping (2198ms) téléchargement (0,05 Mbps) téléchargement (0,08 Mbps) 5) Connectez votre Android au hotspot!
Anthony De Souza

1
Je ne peux pas m'arrêter de rire mais c'est la meilleure solution au monde pour simuler un réseau lent sur un vrai appareil. Merci
KD.

71

Mise à jour pour Android Studio v 1.5 ou supérieur
Comme @LouMorda l'a mentionné dans un commentaire ci-dessous que leEmulator onglet mentionné dans la publication d'origine a été supprimé dans Android Studio v 1.5.

Maintenant, ils ont placé ces paramètres dans Paramètres du simulateur dans AVD Manager.
Pour accéder à ces paramètres:

  1. Sélectionner Tools -> Android -> AVD Manager
  2. Clique le Edit AVD bouton (icône crayon)
  3. On Network Settingspeut y accéder après avoir cliqué sur le Show Advanced Settingsbouton

Voici une capture d'écran de son apparence:
Paramètres de vitesse et de latence du réseau dans Android Studio v 1.5

Message d'origine
Pour toute personne utilisant Android Studio IDE:

  1. Aller à Run -> Edit Configurations
  2. Sélectionner Android Application -> [Your App]
  3. Sélectionner Emulator onglet
  4. Ici, vous pouvez modifier différentes valeurs pour Network Speedet Network Latencysimuler différentes vitesses et latences, etc.

Alternativement, vous pouvez entrer divers arguments dans le Additional command line optionschamp de texte comme mentionné dans la réponse de @ inazaruk.

La capture d'écran ci-dessous décrit à quoi Run Configurationressemble cet écran:

Exécuter l'écran des configurations dans Android Studio beta 0.8.6

Je sais qu'il est un peu tard pour répondre à cette question, mais j'espère que cela aide d'autres personnes confrontées à des problèmes similaires!

Modifier
Pour toute personne utilisant eclipse, voir la réponse de @ Abhi ci-dessous.


1
Cet onglet a été supprimé dans Android Studio v1.5
Lou Morda

@ S1LENT WARRIOR Qu'est-ce que la latence et quelle est la différence entre (par exemple) "speed: edge, latency: none" et "speed: full, latency: edge"?
Johnny Five

1
La vitesse @JohnnyFive fait référence à la vitesse de votre réseau, et la latence signifie le retard du réseau.
S1LENT WARRIOR

45

Je sais que c'est une vieille question mais ...

De nos jours, certains téléphones ont un réglage pour utiliser uniquement la 2G. Il est parfait pour simuler un Internet lent sur un vrai appareil.

entrez la description de l'image ici


parfait! retour à bord et un téléchargement à 9kbyte / s.
JcV

Super, cela correspond parfaitement à mon besoin actuel. Dans ma chambre, un téléchargement de 200 Ko échoue presque toujours sur 2G :)
Deleplace

3
Ce mec est le vrai MVP.
edwoollard

33

Ans mais bon, je vais jouer avec ma méthode infaillible avec Genymotion.

  • Téléchargez la version d'essai gratuite de Charles: http://www.charlesproxy.com/download/

  • Installez-le

  • Cliquez surProxy -> Throttle Settings

  • Configurez vos vitesses limitées HTTP

  • Fermez cette fenêtre

  • Cliquez Proxy -> Throttlingpour activer l'accélérateur

  • Ouvrez un émulateur Genymotion

  • Ouvrez les paramètres wifi

  • Appuyez longuement sur la connexion wifi activée

  • Cliquez sur Modify Network

  • Cliquez sur Show Advanced Options

  • Réglez ProxysurManual

  • Réglez le Proxy hostnamesur10.0.3.2

  • Réglez le Portsur8888

  • Cliquez sur Save

Et maintenant, votre réseau sera étranglé!


d'où avez-vous obtenu le nom d'hôte 10.0.3.2? est le défaut de charle?
abbood

le nom d'hôte doit être l'ordinateur exécutant l'adresse du réseau local de Charles
MaTriXy

16

Vous pouvez également tester la connectivité Internet lente sur un véritable appareil Android:

Testé avec Samsung Galaxy S8 + Android 8.0.0

Allez dans Paramètres -> Connexion -> Réseau mobile -> et sous mode réseau, vous pouvez choisir d'utiliser uniquement des connexions 2G ou 3G


15

J'ai une stratégie pour régler votre problème. Vous pouvez utiliser l'application de proxy pour modifier ou surveiller votre statut net. par exemple, Charles .

Vous devez changer la configuration par défaut du Charles comme l'image suivante que j'ai postée.

Ouvrez votre réglage des gaz

Définition de votre réglage de l'accélérateur

Et enfin, vous découvrirez que le statut net a été façonné à un rythme plus lent.

Avant

Réglage après


2
C'est la seule solution adéquate à ce jour: D
egorikem

8

Un moyen facile de tester votre application avec une connexion faible / mauvaise dans l'émulateur:

Allez Exécuter > Exécuter les configurations , sélectionnez votre application Android , puis allez dans l' onglet Cible . Regardez les paramètres de lancement de l'émulateur . Ici, vous pouvez facilement modifier la vitesse du réseau et la latence du réseau.


8

Il existe un moyen simple de tester les faibles vitesses sur un appareil réel qui semble avoir été ignoré. Il nécessite un Mac et une connexion réseau Ethernet (ou autre filaire).

Activez le partage Wifi sur le Mac, transformez votre ordinateur en point d'accès Wifi, connectez votre appareil à celui-ci. Utilisez Netlimiter / Charles Proxy ou Network Link Conditioner (que vous avez peut-être déjà installé) pour contrôler les vitesses.

Pour plus de détails et pour comprendre quel type de vitesses vous devez tester lors du check out: http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor -Connexions/


En utilisant le volet de préférences "Partage", vous pouvez partager la plupart des connexions avec la plupart des autres. Je l'ai configuré pour partager ma connexion WiFi via Bluetooth. (Les options de connexion via Bluetooth n'apparaissaient pas sur mon téléphone Android jusqu'à ce qu'elles soient configurées.)
Doug Reeder

Pour installer l'outil de conditionneur de liaison réseau: stackoverflow.com/q/9659382
Pang

7

Dans Android Studio, lors de l'exécution d'un émulateur:

1- Appuyez sur le bouton des paramètres en bas de la barre latérale de l'émulateur

2- Aller au cellulaire

3- Définir le type de réseau

Capture d'écran


6

Facebook a construit quelque chose appelé Contrôle de trafic augmenté . Un bref résumé de leur page GitHub:

Augmented Traffic Control (ATC) est un outil pour simuler les conditions du réseau. Il permet de contrôler la connexion d'un appareil à Internet. Les développeurs peuvent utiliser ATC pour tester leur application dans différentes conditions de réseau, émulant facilement des réseaux à haut débit, mobiles et même gravement endommagés. Les aspects de la connexion qui peuvent être contrôlés comprennent:

  • largeur de bande
  • latence
  • perte de paquets
  • paquets corrompus
  • commande de paquets

Afin de pouvoir façonner le trafic réseau, l'ATC doit fonctionner sur un appareil qui achemine le trafic et voit la véritable adresse IP de l'appareil, comme votre passerelle réseau par exemple. Cela permet également à tous les appareils qui transitent par l'ATC de façonner leur trafic. Le trafic peut être mis en forme / non mis en forme à l'aide d'une interface Web permettant à tous les appareils dotés d'un navigateur Web d'utiliser ATC sans avoir besoin d'une application client.

Vous pouvez le trouver ici sur GitHub: https://github.com/facebook/augmented-traffic-control

Ils ont également écrit un blog à ce sujet: https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/


6

Je suis surpris que personne n'ait mentionné cela. Vous pouvez attacher via Bluetooth et les séparer de dix + mètres (ou moins avec des obstacles). Vous avez une très mauvaise connexion. Pas de micro-ondes, pas d'ascenseur, pas de logiciel nécessaire.


C'est en fait une bonne solution, sauf si vous avez une très bonne connexion Bluetooth. Besoin d'utiliser un ancien appareil pour cela. :)
développeur Android

5

Ou sur un appareil réel, vous pouvez aller dans Paramètres -> Réseaux mobiles -> Types de réseaux préférés et choisir le plus lent disponible ... Bien sûr, cela est très limité, mais pour certains tests, cela pourrait être suffisant.


3

MISE À JOUR sur le studio Android AVD:

  1. ouvrir le gestionnaire AVD
  2. créer / modifier AVD
  3. cliquez sur paramètres avancés
  4. sélectionnez votre paramètre de connectivité préféré

Pas de micro-ondes ni d'ascenseurs :)


3

Pour les utilisateurs de Mac OS et vous pouvez utiliser Network Link Conditioner qui peut être téléchargé à partir d'Apple. définissez-le comme un AP sur mac et tous les périphériques pourraient le connecter.

vous pouvez soit utiliser les outils open source facebook ATC http://facebook.github.io/augmented-traffic-control/


2

Voulez-vous tester l'absence de connexion réseau ou simplement une connexion réseau lente? S'il s'agit du premier, vous pouvez accéder au Settings > Wireless & networks > Airplane modemode Avion et l'activer. Cela vous permettra de tester l'indisponibilité du réseau sur un appareil réel.


Merci, mais j'essayais de tester la faible connectivité réseau. Par exemple. pour un signal EDGE faible ou quelque chose comme ça.
Maggie

Ah. Dommage que vous ne puissiez pas désactiver la 3G et revenir à l'itinérance EDGE. Au moins, sur mon téléphone, vous ne pouvez pas.
David Conrad,

2

Allez Exécuter> Exécuter les configurations, sélectionnez votre application Android, puis allez dans l'onglet Cible. Effectuez les modifications comme indiqué sur la figure.

entrez la description de l'image ici


2

Je me battais avec ce problème pendant une demi-journée, enfin je suis arrivé à cette solution:

  • Les tests sur un appareil réel n'ont pas beaucoup de sens dans l'ensemble, car vous devez passer par beaucoup pour le faire fonctionner. La seule façon logique de réaliser de véritables tests est de connecter votre téléphone à un réseau cellulaire de faible qualité, comme EDGE, si votre compagnie de téléphone le fournit. Vous pouvez essayer de le faire en composant *#*#4636#*#*dans l'application téléphone

  • L'émulateur Android d'origine est beaucoup trop lent pour les tests et n'atteint pas plus que la solution ci-dessus.

La meilleure façon de le faire est d'utiliser Genymotion . C'est un émulateur Android avec de bien meilleures performances que les AVD d'origine et la version pour usage personnel est gratuite.

Emulateur Genymotion

Après avoir créé votre appareil virtuel dans Genymotion, suivez simplement ce tutoriel pour définir un proxy pour l'appareil.

Exécutez un serveur proxy sur votre machine hôte qui simule les mauvaises conditions de réseau, comme Crapify ou Toxiproxy (je n'ai testé que le premier) et vous êtes prêt à partir.

Mettre à jour:

Je viens de réaliser que vous pouvez également choisir la même stratégie avec des appareils réels. Je me sens comme un idiot de ne pas l'avoir réalisé plus tôt. Il vous suffit de démarrer un proxy Crapify sur votre ordinateur, de configurer le proxy de votre téléphone sur l'adresse locale de votre ordinateur et le tour est joué, vous avez un Internet pourri sur votre téléphone.


1

comme suggéré par @VicVu Charles (ou tout autre outil proxy) est un moyen plus simple de procéder. Mais je voudrais ajouter que vous pouvez également le faire avec votre appareil, pas seulement avec Genymotion ou d'autres émulateurs. Le processus sera le même:

Modifiez le paramètre wifi de votre appareil / émulateur pour utiliser un proxy manuel. Et puis définissez le nom d'hôte et le port du proxy a. définissez le nom d'hôte comme IP de votre système (obtenez l'IP de votre PC / Mac en utilisant ifconfig / ifconfig) b. définir le numéro de port de genymotion (vérifier les paramètres proxy dans charles)

PS: Votre appareil / émulateur DOIT utiliser le même wifi car l'IP que vous utilisez sera très probablement l'IP privée.


1
  1. Ouvrez le terminal dans Android Studio et accédez à ../../Android/sdk/tools. l'exécutable «émulateur» devrait être disponible ici.

  2. Exécutez ./emulator -netdelay "delay_in_millis" -avd "emulator_device_name"

    Ex: ./emulator -netdelay 60000 -avd Nexus_5_API_21

  3. Maintenant, créez votre application et installez-la dans l'émulateur.

  4. Exécutez votre scénario dans l'application.

Assurez-vous que vos modifications de code dans l'application définissent le délai d'expiration de votre demande et le gèrent.


1

Accédez simplement au moniteur de l'appareil Android à partir du studio Android, puis DDMS -> Contrôle de l'émulateur. Il y aura des propriétés de vitesse et de latence.


1

J'ai trouvé que netlimiter4 était la meilleure solution pour limiter les données aux émulateurs. Il fournit un contrôle granulaire via une interface graphique décente et vous donne un retour graphique sur le débit de données de chaque processus. Actuellement en version bêta gratuite. capture d'écran

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

Il existe des applications disponibles sur le Play Store pour limiter les appareils réels, mais elles nécessitent un root (je ne peux pas fournir de conseils sur leur fonctionnement, le cas échéant - YMMV.)

recherchez bradybound sur le Play Store, je ne peux pas poster plus d'un lien ..


1

avez-vous essayé cela? Paramètres - Réseaux - Plus - Réseaux mobiles - Mode réseau - Sélectionnez le réseau préféré (2G par exemple).

Une autre méthode que j'ai utilisée a été mentionnée ci-dessus. Connectez-vous via le hot spot de l'iPhone. J'espère que cela t'aides.


1

J'utilise mitmproxy proxy HTTPS. https://mitmproxy.org/

Mitmproxy est une application proxy open source qui permet d'intercepter les connexions HTTP et HTTPS entre n'importe quel client HTTP (S). Il permet de surveiller, capturer et modifier ces connexions en temps réel. Modifier la demande, la réponse, l'en-tête, ... De plus, vous pouvez intercepter différentes demandes.

par exemple response_delay.py :

from mitmproxy import http
from time import sleep

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

Ensuite, l'exécution de ce commentaire retarde toutes les réponses du serveur:

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

Dans mon application, j'utilise l'épinglage de certificat, vous devez donc ajouter le certificat (privé + public)

cat private.key public.key> cert.pem

Vous pouvez trouver un tutoriel simple ici .

Vous pouvez trouver d'autres exemples de script ici .


0

Très vieux poste mais j'ajouterai mes deux cents. J'ai été TRÈS satisfait de ce produit matériel ( https://apposite-tech.com/products/linktropy-mini/ ) qui nous a permis de simuler un grand nombre de conditions réelles. Pendant longtemps, nous avons eu du mal à dépanner diverses choses qui fonctionneraient en émulateur ou en mode avion.

Nous avons plusieurs profils différents, de la connectivité zéro aux différentes étapes de la connectivité marginale, avec différents degrés de latence, de perte de paquets et d'erreurs sur les bits. La grande chose à ce sujet est que nous pouvons les modifier à la volée sans avoir à relancer l'application dans un émulateur. Le prix en valait la peine pour notre boutique, et il est très simple à utiliser.


0

J'avais besoin d'étrangler Internet bas sur un appareil natif AndroidTV et sur la base de ce que j'ai lu, la solution la plus appropriée était de limiter l'accès à Internet directement dans mon routeur.
Accédez aux paramètres du routeur (localement, c'est comme 192.168.0.1) -> configurez le serveur DHCP (s'il ne fonctionne pas) -> choisissez l'adresse IP d'un périphérique et définissez la restriction;

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.