Simula connettività di rete bassa per Android [chiuso]


228

Vorrei testare la mia applicazione per casi di bassa connettività di rete. A parte l'ascensore, qual è il modo migliore per farlo? Ho provato a avvolgere il mio telefono in un foglio di alluminio, ma non ha aiutato molto.

Devo testarlo su un dispositivo reale, non in un emulatore.


1
Ricerca ha anche gabbie di Faraday . Sono facili da costruire.
JWW

Risposte:


119

È possibile utilizzare l'emulatore per questo. Dai un'occhiata a questa pagina: Emulatore Android . Presta attenzione ai prossimi due argomenti:

  1. -netdelay <delay>

    Impostare l'emulazione della latenza di rete su. Il valore predefinito è nessuno. Vedere la tabella in Emulazione ritardo di rete per i valori supportati.

  2. -netspeed <speed>

    Impostare l'emulazione della velocità di rete su. Il valore predefinito è pieno. Vedere la tabella in Emulazione velocità rete per i valori supportati.

    Velocità di riferimento in aumento di 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
grazie mille, ma come ho detto, vorrei provare su un dispositivo reale. in qualche modo posso farlo su un telefono HTC o Samsung?
Maggie,

2
La mia ipotesi è che l'unico modo per andare, è avere un router / AP wi-fi in grado di controllare la velocità della rete. Questo è più di un amministratore di rete. Ma ciò dovrebbe teoricamente essere possibile.
inazaruk,

78
Ho usato l'ascensore :) ma grazie a tutti
Maggie

3
Per simulare la latenza su HTTP, utilizzare ResponseCache.setDefault (nuovo CacheResponse () {...}) e inserire una chiamata Thread.sleep (200). Questo ha il vantaggio di essere programmaticamente controllato (cioè solo in una sola attività) e di non influenzare altri processi. Tuttavia, per un test più realistico, è necessario impostare il limite sul router o utilizzare il tccomando (da busybox).
gridò il

112
Perché questo è stato accettato come risposta? La domanda affermava chiaramente "non in un emulatore"
Kyle Ivey il

272

Questo può sembrare un po 'folle, ma un forno a microonde funge da scudo per microonde. Pertanto, inserendo il dispositivo in un forno a microonde (NON accendere il forno a microonde mentre il dispositivo è all'interno!), La potenza del segnale diminuirà in modo significativo. Sicuramente batte in piedi dentro un ascensore ...


3
Caspita, ora se potessi suggerirmi un modo per inserirmi anche nel forno. E i forni sono progettati per schermare 2,4 GHz. Potrebbe non funzionare per le frequenze più basse. IDK!
WindRider

2
non ha funzionato nel mio forno a microonde (cioè la connessione era ancora decente)! Agh: |
yura,

1
Se è collegato un cavo USB, il segnale può insinuarsi in quel modo. Se si trova all'interno del forno a microonde senza cavo, non dovrebbe ricevere alcun segnale. Dovresti essere in grado di ottenere questo effetto anche con un foglio di alluminio, che non scioglierà il telefono perché non puoi spegnerlo accidentalmente.
John Moore,

Il forno a microonde è ancora una buona opzione se è necessario attivare una disconnessione immediata e non richiedere ulteriori interazioni da parte dell'utente, che era il mio caso d'uso particolare.
Robert Yang,

108

Poiché l' opzione di sviluppo di iPhone si applica al tethering wifi, puoi ottenere un iPhone con iOS 6e sopra (ed è stato impostato su use for developmentscon xcode), impostarlo per emulare il profilo di rete desiderato, connettere il tuo dispositivo Android al suo hotspot

inserisci qui la descrizione dell'immagine


10
Questa era la soluzione alla quale siamo arrivati. È un peccato che questa sia l'opzione più sana disponibile. Va notato nella risposta che l'iPhone richiede una connessione 3G / cellulare per il tethering per funzionare. Si noti inoltre che le velocità di upload / download necessarie nell'utilità iPhone devono essere invertite rispetto al dispositivo collegato.
Kyle Ivey il

Brillante! È sciocco che questa sia l'opzione migliore, soprattutto perché l'emulatore può farlo.
karl

L'emulatore iPhone può collegare il WiFi?
Kirill Kulakov il

Grazie. Era confuso su come installarlo. Questo è come - se sei su un piano cellulare che consente gli hotspot personali. Sto usando iOS 7.12 1) vai su IMPOSTAZIONI-> Cellulare-> Hotspot personale 2) fai scorrere l'interruttore Hotspot personale verso destra in modo che sia verde / acceso (puoi cambiare la password se preferisci) 3) tornare indietro, indietro e scorrere fino a Sviluppatore 4) scorrere verso il basso fino a Network Link Conditioner e toccarlo. far scorrere ENABLE a destra in modo che sia verde / acceso, infine scegliere un profilo. Ho scelto "Very Bad Network". Questo mi ha dato ping (2198ms) download (0,05 Mbps) upload (0,08 Mbps) 5) Collega il tuo Android all'hotspot!
Anthony De Souza,

1
Non riesco a smettere di ridere, ma questa è la soluzione migliore in assoluto per simulare una rete lenta su un dispositivo reale. Grazie
KD.

71

Aggiornamento per Android Studio v 1.5 o versione successiva
Come @LouMorda ha menzionato in un commento di seguito che ilEmulator scheda menzionata nel post originale è stata rimossa in Android Studio v 1.5.

Ora hanno inserito queste impostazioni in Impostazioni simulatore in AVD Manager.
Per accedere a queste impostazioni:

  1. Selezionare Tools -> Android -> AVD Manager
  2. Clicca il Edit AVD pulsante (icona a forma di matita)
  3. È Network Settingspossibile accedere a dopo aver fatto clic sul Show Advanced Settingspulsante

Ecco uno screenshot di come potrebbe apparire:
Impostazioni di velocità e latenza della rete in Android Studio v 1.5

Post originale
Per chiunque utilizzi l'IDE di Android Studio:

  1. Vai a Run -> Edit Configurations
  2. Selezionare Android Application -> [Your App]
  3. Selezionare Emulator scheda
  4. Qui è possibile modificare valori diversi per Network Speede Network Latencysimulare velocità e latenze diverse, ecc

In alternativa, puoi inserire vari argomenti nel Additional command line optionscampo di testo come indicato nella risposta di @ inazaruk.

Lo screenshot seguente descrive l' Run Configurationaspetto di questa schermata:

Schermata Esegui configurazioni in Android Studio beta 0.8.6

So che è un po 'tardi per rispondere a questa domanda, ma spero che questo aiuti gli altri ad affrontare problemi simili!

Modifica
Per chiunque usi eclipse, vedi la risposta di @ Abhi di seguito.


1
Questa scheda è stata rimossa in Android Studio v1.5
Lou Morda il

@ S1LENT WARRIOR Che cos'è la latenza e qual è la differenza tra (ad esempio) "speed: edge, latency: none" e "speed: full, latency: edge"?
Johnny Five,

1
La velocità di @JohnnyFive si riferisce alla velocità della rete e la latenza indica il ritardo della rete.
S1LENT WARRIOR

45

So che è una vecchia domanda ma ...

Alcuni telefoni al giorno d'oggi hanno un'impostazione per utilizzare solo 2G. È perfetto per la simulazione di Internet lenta su un dispositivo reale.

inserisci qui la descrizione dell'immagine


Perfetto ! back to edge e un upload a 9kbyte / s.
JcV,

Ottimo, questo si adatta perfettamente al mio attuale bisogno. Nella mia stanza, un caricamento di
200 KB

3
Questo ragazzo è il vero MVP.
edwoollard,

33

Anni ma ehi, entrerò con il mio metodo infallibile con Genymotion.

  • Scarica la versione di prova gratuita di Charles: http://www.charlesproxy.com/download/

  • Installalo

  • ClicProxy -> Throttle Settings

  • Imposta le tue velocità di limitazione HTTP

  • Chiudi quella finestra

  • Fare clic Proxy -> Throttlingper abilitare l'acceleratore

  • Apri un emulatore Genymotion

  • Apri le impostazioni wifi

  • Premere a lungo la connessione wifi abilitata

  • Clic Modify Network

  • Clic Show Advanced Options

  • Imposta ProxysuManual

  • Impostare Proxy hostnamesu10.0.3.2

  • Impostare Portsu8888

  • Clic Save

E ora la tua rete sarà limitata!


da dove hai preso il nome host 10.0.3.2? è quel default di charle?
circa il

hostname dovrebbe essere il computer che esegue l'indirizzo di rete locale Charles
MaTriXy il

16

Puoi anche testare la connettività Internet lenta su un vero dispositivo Android:

Testato con Samsung Galaxy S8 + Android 8.0.0

Vai a Impostazioni -> Connessione -> rete mobile -> e sotto networkmode si può scegliere di utilizzare solo 2G o 3G connessioni


15

Ho una strategia per risolvere il tuo problema. È possibile utilizzare l'applicazione del proxy per modificare o monitorare il proprio stato di rete. ad es . Charles .

Dovresti cambiare la configurazione predefinita di Charles come nella seguente immagine che ho pubblicato.

Apri la tua impostazione dell'acceleratore

Impostazione dell'impostazione dell'acceleratore

E infine, scoprirai che lo stato della rete è stato modellato a un ritmo più basso.

Prima

Impostazione dopo


2
Questa è l'unica soluzione adeguata finora: D
egorikem,

8

Modo semplice per testare l'applicazione con una connessione bassa / errata nell'emulatore:

Vai Esegui > Esegui configurazioni , seleziona la tua applicazione Android e vai alla scheda Destinazione . Guarda i parametri di avvio dell'emulatore . Qui puoi facilmente modificare la velocità della rete e la latenza della rete.


8

Esiste un modo semplice per testare le basse velocità su un dispositivo reale che sembra essere stato trascurato. Richiede un Mac e una connessione di rete ethernet (o altri cablati).

Attiva la condivisione Wifi sul Mac, trasforma il tuo computer in un hotspot Wifi, collega il tuo dispositivo a questo. Usa Netlimiter / Charles Proxy o Network Link Conditioner (che potresti aver già installato) per controllare le velocità.

Per maggiori dettagli e per capire quale tipo di velocità dovresti provare al check out: http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor -connessioni /


Utilizzando il riquadro delle preferenze "Condivisione", è possibile condividere la maggior parte delle connessioni con la maggior parte delle altre. L'ho impostato per condividere la mia connessione WiFi tramite Bluetooth. (La connessione tramite le opzioni bluetooth non è stata visualizzata sul mio telefono Android fino a quando non è stato impostato.)
Doug Reeder

Per installare lo strumento Network Link Conditioner: stackoverflow.com/q/9659382
Pang

7

In Android Studio, durante l'esecuzione di un emulatore:

1- Premi il pulsante Impostazioni nella parte inferiore della barra laterale dell'emulatore

2- Vai su Cellulare

3- Impostare il tipo di rete

Immagine dello schermo


6

Facebook ha creato qualcosa chiamato Augmented Traffic Control . Un breve riassunto dalla loro pagina GitHub:

Augmented Traffic Control (ATC) è uno strumento per simulare le condizioni della rete. Consente di controllare la connessione che un dispositivo ha a Internet. Gli sviluppatori possono utilizzare ATC per testare la propria applicazione in diverse condizioni di rete, emulando facilmente reti ad alta velocità, mobili e persino gravemente compromesse. Gli aspetti della connessione che possono essere controllati includono:

  • la larghezza di banda
  • latenza
  • perdita di pacchetti
  • pacchetti corrotti
  • ordinazione dei pacchetti

Per essere in grado di modellare il traffico di rete, ATC deve essere in esecuzione su un dispositivo che instrada il traffico e vede l'indirizzo IP reale del dispositivo, come ad esempio il gateway di rete. Ciò consente inoltre a tutti i dispositivi che attraversano ATC di essere in grado di modellare il loro traffico. Il traffico può essere modellato / non modificato utilizzando un'interfaccia Web che consente a tutti i dispositivi con un browser Web di utilizzare ATC senza la necessità di un'applicazione client.

Puoi trovarlo qui su GitHub: https://github.com/facebook/augmented-traffic-control

Hanno anche scritto un post sul blog a riguardo: https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/


6

Sono sorpreso che nessuno lo abbia menzionato. Puoi collegarti via Bluetooth e separarli di dieci + metri (o meno con ostacoli). Hai una vera cattiva connessione. Nessun forno a microonde, nessun ascensore, nessun software necessario.


Questa è in realtà una buona soluzione, a meno che tu non abbia un'ottima connessione Bluetooth. È necessario utilizzare un vecchio dispositivo per questo. :)
Sviluppatore Android

5

Oppure su un dispositivo reale puoi andare su Impostazioni -> Reti mobili -> Tipi di rete preferiti e scegliere il più lento disponibile ... Naturalmente questo è molto limitato, ma per alcuni scopi di test potrebbe essere sufficiente.


3

AGGIORNAMENTO su Android Studio AVD:

  1. apri AVD manager
  2. crea / modifica AVD
  3. fai clic su impostazioni avanzate
  4. seleziona la tua impostazione di connettività preferita

Nessun forno a microonde o ascensori :)



2

Vuoi provare per nessuna connessione di rete o solo una connessione di rete lenta? Se il primo, puoi andare Settings > Wireless & networks > Airplane modee attivare la modalità aereo. Ciò ti consentirà di verificare l'indisponibilità della rete su un dispositivo reale.


Grazie, ma stavo provando a verificare la connettività di rete bassa. Per esempio. per un segnale EDGE basso o qualcosa del genere.
Maggie,

Ah. Peccato che non sia possibile disattivare 3G e tornare al roaming EDGE. Almeno sul mio telefono non puoi.
David Conrad,

2

Vai Esegui> Esegui configurazioni, seleziona la tua applicazione Android e vai alla scheda Destinazione. Apporta le modifiche come mostrato nella figura.

inserisci qui la descrizione dell'immagine


2

Ho lottato con questo problema per mezza giornata, finalmente sono arrivato a questa soluzione:

  • I test su un dispositivo reale non hanno molto senso nel complesso in quanto è necessario passare molto per farlo funzionare. L'unico modo logico per ottenere test reali è di connettere il tuo telefono a una rete cellulare di bassa qualità, come EDGE, se la tua compagnia telefonica lo fornisce. Puoi provare a farlo componendo *#*#4636#*#*l'app del telefono

  • L'emulatore Android originale è troppo lento per i test e non ottiene più della soluzione sopra.

Il modo migliore per farlo è usare Genymotion . È un emulatore Android con prestazioni molto migliori rispetto agli AVD originali e la versione per uso personale è gratuita.

Emulatore di genimotion

Dopo aver creato il dispositivo virtuale in Genymotion, basta seguire questo tutorial per impostare un proxy per il dispositivo.

Esegui un server proxy sul tuo computer host che simuli cattive condizioni di rete, come Crapify o Toxiproxy (ho testato solo il primo) e sei a posto.

Aggiornare:

Ho appena realizzato che puoi scegliere la stessa strategia anche con dispositivi reali. Mi sento un idiota per non averlo realizzato prima. Basta avviare un proxy Crapify sul tuo computer, impostare il proxy del telefono sull'indirizzo locale del tuo computer e voilà, hai internet scadente sul tuo telefono.


1

come suggerito da @VicVu Charles (o qualsiasi altro strumento proxy) è un modo più semplice di procedere. Ma vorrei aggiungere che puoi farlo anche con il tuo dispositivo, non solo genymotion o altri emulatori. Il processo sarà lo stesso:

Modifica le impostazioni Wi-Fi del tuo dispositivo / emulatore per utilizzare il proxy manuale. Quindi impostare il nome host e la porta proxy a. imposta il nome host come ip del tuo sistema (ottieni l'ip del tuo pc / mac usando ifconfig / ifconfig) b. imposta il numero di porta di genymotion (controlla le impostazioni proxy in charles)

PS: il tuo dispositivo / emulatore DEVE utilizzare lo stesso wifi poiché l'ip che stai utilizzando sarà molto probabilmente l'ip privato.


1
  1. Apri il terminale in Android Studio e vai a ../../Android/sdk/tools. L'eseguibile 'emulatore' dovrebbe essere disponibile qui.

  2. Esegui ./emulator -netdelay "delay_in_millis" -avd "emulator_device_name"

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

  3. Ora costruisci la tua app e installala nell'emulatore.

  4. Esegui il tuo scenario in app.

Assicurati di avere le modifiche al codice nell'app che imposta il timeout sulla richiesta e lo gestisce.


1

Basta andare al monitor del dispositivo Android da Android Studio, quindi DDMS -> Controllo dell'emulatore. Ci saranno proprietà di velocità e latenza.


1

Ho trovato netlimiter4 la migliore soluzione per limitare i dati agli emulatori. Fornisce un controllo granulare attraverso un'interfaccia grafica decente e fornisce un feedback grafico sulla velocità di trasmissione dei dati per ciascun processo. Attualmente in beta gratuita. immagine dello schermo

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

Ci sono app disponibili nel Play Store per limitare i dispositivi reali ma richiedono il root (non posso fornire alcun consiglio su come funzionano, se non del tutto - YMMV.)

cerca bradybound nel Play Store, non riesco a pubblicare più di un link ..


1

hai provato questo? Impostazioni - Reti - Altro - Reti mobili - Modalità rete - Seleziona la rete preferita (ad esempio 2G).

Un altro metodo che ho usato è stato menzionato sopra. Connessione tramite hot spot per iPhone. Spero che questo ti aiuti.


1

Sto usando il proxy mitmproxy HTTPS. https://mitmproxy.org/

Mitmproxy è un'applicazione proxy open source che consente di intercettare connessioni HTTP e HTTPS tra qualsiasi client HTTP (S). Permette di monitorare, acquisire e modificare queste connessioni in tempo reale. Richiesta di modifica, risposta, intestazione, ... Inoltre è possibile intercettare richieste diverse.

ad esempio response_delay.py :

from mitmproxy import http
from time import sleep

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

Quindi l'esecuzione di questo commento ritarda tutte le risposte dal server:

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

Nella mia app sto usando il pinning del certificato, quindi devi aggiungere il certificato (privato + pubblico)

cat private.key public.key> cert.pem

Puoi trovare un semplice tutorial qui .

Puoi trovare altri esempi di scripting qui .


0

Post molto vecchio ma aggiungerò i miei due centesimi. Sono stato MOLTO felice con questo prodotto hardware ( https://apposite-tech.com/products/linktropy-mini/ ) che ci ha permesso di simulare molte condizioni del mondo reale. Per molto tempo abbiamo avuto difficoltà a risolvere vari problemi che avrebbero funzionato in emulatore o in modalità aereo.

Abbiamo diversi profili impostati dalla connettività zero a varie fasi della connettività marginale, con diversi gradi di latenza, perdita di pacchetti ed errori di bit. La cosa grandiosa è che possiamo cambiarli al volo senza dover riavviare l'app in un emulatore. Il prezzo è valsa la pena per il nostro negozio ed è morto semplice da usare.


0

Avevo bisogno di limitare la connessione Internet bassa sul dispositivo nativo AndroidTV e in base a ciò che ho letto, la soluzione più adatta era limitare l'accesso a Internet direttamente nel mio router.
Vai alle impostazioni del router (localmente è smth come 192.168.0.1) -> imposta il server DHCP (se non è in esecuzione) -> scegli l'indirizzo IP di un dispositivo e imposta la restrizione;

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.