Simule baja conectividad de red para Android [cerrado]

228

Me gustaría probar mi aplicación para casos de baja conectividad de red. Excepto en el elevador, ¿cuál es la mejor manera de hacer esto? Intenté envolver mi teléfono en una lámina de aluminio, pero no me ayudó mucho.

Necesito probarlo en un dispositivo real, no en un emulador.

Maggie
fuente
1
También investigue las jaulas de Faraday . Son fáciles de construir.
jww

Respuestas:

119

Puedes usar el emulador para esto. Echa un vistazo a esta página: Emulador de Android . Presta atención a los siguientes dos argumentos:

  1. -netdelay <delay>

    Establezca la emulación de latencia de red en. El valor predeterminado es ninguno. Consulte la tabla en Network Delay Emulation para conocer los valores admitidos.

  2. -netspeed <speed>

    Establezca la emulación de velocidad de red en. El valor predeterminado está lleno. Consulte la tabla en Emulación de velocidad de red para conocer los valores admitidos.

    Velocidades de referencia en kbps crecientes:

                            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
fuente
15
muchas gracias, pero como dije, me gustaría probar en un dispositivo real. ¿De alguna manera puedo hacer esto en un teléfono HTC o Samsung?
Maggie
2
Supongo que la única forma de hacerlo es tener un enrutador / AP wi-fi que pueda controlar la velocidad de la red. Esto es más de un administrador de red. Pero esto debería ser teóricamente posible.
inazaruk
78
He usado el ascensor :) pero gracias a todos
Maggie
3
Para simular la latencia sobre HTTP, use ResponseCache.setDefault (new CacheResponse () {...}) y coloque una llamada Thread.sleep (200) allí. Esto tiene la ventaja de estar controlado mediante programación (es decir, solo en una actividad) y no afectar a otros procesos. Sin embargo, para una prueba más realista, debe establecer el límite en su enrutador o usar el tccomando (desde busybox).
gritó
112
¿Por qué se aceptó esto como respuesta? La pregunta decía claramente "no en un emulador"
Kyle Ivey
272

Esto puede sonar un poco loco, pero un horno de microondas sirve como un escudo de microondas. Por lo tanto, colocar su dispositivo dentro de un horno de microondas (¡NO encienda el horno de microondas mientras su dispositivo esté dentro!) Hará que la intensidad de la señal disminuya significativamente. Definitivamente supera estar parado dentro de un elevador ...

Shams Shafiq
fuente
3
Wow, ahora si pudieras sugerirme una forma de meterme en el horno también. Y los hornos están diseñados para proteger 2.4 GHz. Es posible que no funcione para frecuencias más bajas. ¡NO SÉ!
WindRider
2
no funcionó en mi microondas (es decir, la conexión aún era decente)! Agh: |
yura
1
Si tiene un cable USB conectado, la señal puede colarse de esa manera. Si está dentro del microondas sin ningún cable conectado, no debería recibir señal. Debería poder lograr este efecto también con papel de aluminio, que no derretirá el teléfono porque no puede apagarlo accidentalmente.
John Moore
El horno de microondas sigue siendo una buena opción si necesita activar una desconexión inmediata y no requiere mayor interacción del usuario, que fue mi caso de uso particular.
Robert Yang
108

Ya que opción de desarrollador de iPhones se aplica a la conexión WiFi, puede obtener un iPhone que tenga iOS 6y superior (y se haya configurado use for developmentscon xcode), configúrelo para emular el perfil de red deseado, conecte su dispositivo Android a su punto de acceso

ingrese la descripción de la imagen aquí

Kirill Kulakov
fuente
10
Esta fue la solución a la que llegamos también. Es una pena que esta sea la opción más sensata disponible. Cabe señalar en la respuesta que el iPhone requiere una conexión 3G / celular para que funcione la conexión. También debe tener en cuenta que las velocidades de carga / descarga que se necesitan en la utilidad del iPhone deben invertirse para estar en relación con el dispositivo conectado.
Kyle Ivey
¡Brillante! Es una tontería que esta sea la mejor opción, especialmente porque el emulador puede hacerlo.
karl
¿El emulador de iPhone puede atar WiFi?
Kirill Kulakov el
Gracias. Estaba confundido cómo configurarlo. Así es como - si tiene un plan celular que permite puntos de acceso personales. Estoy usando iOS 7.12 1) vaya a CONFIGURACIÓN-> Celular-> Punto de acceso personal 2) deslice el interruptor de Punto de acceso personal a la derecha para que esté verde / encendido (puede cambiar la contraseña si lo prefiere) 3) regrese, retroceda y baje hasta Desarrollador 4) desplácese hacia abajo hasta Network Link Conditioner y tóquelo. deslice HABILITAR hacia la derecha para que esté verde / encendido finalmente elija un perfil. Elegí "Muy mala red". Esto me dio una descarga de ping (2198 ms) (0.05 Mbps) (0.08 Mbps) 5) ¡Conecte su Android al punto de acceso!
Anthony De Souza
1
No puedo dejar de reírme, pero esta es la mejor solución en todo el mundo para simular una red lenta en un dispositivo real. Gracias
KD.
71

Actualización para Android Studio v 1.5 o superior
Como @LouMorda mencionó en un comentario a continuación que la Emulatorpestaña mencionada en la publicación original se ha eliminado en Android Studio v 1.5.

Ahora han colocado esta configuración en Configuración del simulador en AVD Manager.
Para acceder a esta configuración:

  1. Seleccione Tools -> Android -> AVD Manager
  2. Haga clic en el Edit AVDbotón (ícono de lápiz)
  3. Se Network Settingspuede acceder después de hacer clic en el Show Advanced Settingsbotón

Aquí hay una captura de pantalla de cómo puede aparecer:
Configuración de velocidad y latencia de red en Android Studio v 1.5

Publicación original
para cualquiera que use Android Studio IDE:

  1. Ir Run -> Edit Configurations
  2. Seleccione Android Application -> [Your App]
  3. Seleccione Emulator pestaña
  4. Aquí puede cambiar distintos valores para Network Speedy Network Latencypara simular diferentes velocidades y latencias, etc.

Alternativamente, puede ingresar varios argumentos en el Additional command line optionscampo de texto como se menciona en la respuesta de @ inazaruk.

La siguiente captura de pantalla describe cómo se Run Configurationve esta pantalla:

Pantalla de configuración de ejecución en Android Studio beta 0.8.6

Sé que es un poco tarde para responder a esta pregunta, ¡pero espero que esto ayude a otros que enfrentan problemas similares!

Editar
Para cualquiera que use eclipse, vea la respuesta de @ Abhi a continuación.

SOLDADO GUERRERO
fuente
1
Esta pestaña se ha eliminado en Android Studio v1.5
Lou Morda
@ S1LENT WARRIOR ¿Qué es la latencia y cuál es la diferencia entre (por ejemplo) "velocidad: borde, latencia: ninguna" y "velocidad: completa, latencia: borde"?
Johnny Five
1
La velocidad @JohnnyFive se refiere a la velocidad de su red, y la latencia significa el retraso de la red.
S1LENT WARRIOR
45

Sé que es una vieja pregunta pero ...

Algunos teléfonos hoy en día tienen una configuración para utilizar solo 2G. Es perfecto para simular internet lento en un dispositivo real.

ingrese la descripción de la imagen aquí

Pkmmte
fuente
Perfecto ! volver al borde y una carga a 9kbyte / s.
JcV
Genial, esto se adapta perfectamente a mi necesidad actual. En mi habitación, una carga de 200 KB casi siempre falla en 2G :)
200 KB
3
Este tipo es el verdadero MVP.
edwoollard
33

Años pero oye, voy a intervenir con mi método infalible con Genymotion.

  • Descargue la versión de prueba gratuita de Charles: http://www.charlesproxy.com/download/

  • Instalarlo

  • Hacer clicProxy -> Throttle Settings

  • Configure sus velocidades de aceleración HTTP

  • Cierra esa ventana

  • Haga clic Proxy -> Throttlingpara habilitar el acelerador

  • Abre un emulador Genymotion

  • Abra la configuración wifi

  • Mantenga presionada la conexión wifi habilitada

  • Hacer clic Modify Network

  • Hacer clic Show Advanced Options

  • Establecer ProxyenManual

  • Establecer el Proxy hostnamea10.0.3.2

  • Establecer el Porta8888

  • Hacer clic Save

¡Y ahora su red será estrangulada!

VicVu
fuente
¿de dónde sacaste el nombre de host 10.0.3.2? es el defecto de charle?
Abbood
nombre de host debe ser el equipo que ejecuta Charles dirección de red local
matrixY
16

También puede probar la conectividad lenta a Internet en un dispositivo Android real:

Probado con Samsung Galaxy S8 + Android 8.0.0

Vaya a Configuración -> Conexión -> Red móvil -> y en el modo de red puede elegir usar solo conexiones 2G o 3G

rm -rf
fuente
15

Tengo una estrategia para resolver su problema. Puede usar la aplicación de proxy para modificar o monitorear su estado neto. Por ejemplo, Charles .

Debería cambiar la configuración predeterminada de Charles como la siguiente imagen que publiqué.

Abra la configuración del acelerador

Configuración de la configuración del acelerador

Y finalmente, descubrirá que el estado neto se ha transformado en un ritmo más bajo.

antes de

Ajuste después

Benchur Wong
fuente
2
Esta es la única solución adecuada hasta ahora: D
egorikem
8

Manera fácil de probar su aplicación con baja / mala conexión en el emulador:

Vaya a Ejecutar > Ejecutar configuraciones , seleccione su aplicación de Android y vaya a la pestaña Destino . Mira los parámetros de lanzamiento del emulador . Aquí, puede modificar fácilmente la Velocidad de red y la Latencia de red.

pgarriga
fuente
8

Hay una forma simple de probar bajas velocidades en un dispositivo real que parece haberse pasado por alto. Requiere una Mac y una conexión de red ethernet (u otra con cable).

Active el uso compartido de Wifi en la Mac, convierta su computadora en un punto de acceso Wifi, conecte su dispositivo a esto. Use Netlimiter / Charles Proxy o Network Link Conditioner (que puede que ya haya instalado) para controlar las velocidades.

Para obtener más detalles y comprender qué tipo de velocidades debe probar, consulte: http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor -conexiones /

James_OSM
fuente
Usando el panel de preferencias "Compartir", puede compartir casi cualquier conexión con casi cualquier otra. Lo configuré para compartir mi conexión WiFi a través de Bluetooth. (La conexión a través de las opciones de bluetooth no apareció en mi teléfono Android hasta que se configuró.)
Doug Reeder
Para instalar la herramienta de acondicionador de enlace de red: stackoverflow.com/q/9659382
Pang
7

En Android Studio, mientras ejecuta un emulador:

1- Presiona el botón de configuración en la parte inferior de la barra lateral del emulador

2- Ir a celular

3- Establecer tipo de red

Captura de pantalla

Mert Kahraman
fuente
6

Facebook creó algo llamado Control de tráfico aumentado . Un breve resumen de su página de GitHub:

El Control de tráfico aumentado (ATC) es una herramienta para simular las condiciones de la red. Permite controlar la conexión que un dispositivo tiene a internet. Los desarrolladores pueden usar ATC para probar su aplicación en diferentes condiciones de red, emulando fácilmente redes de alta velocidad, móviles e incluso severamente dañadas. Los aspectos de la conexión que se pueden controlar incluyen:

  • banda ancha
  • latencia
  • paquete perdido
  • paquetes corruptos
  • pedidos de paquetes

Para poder dar forma al tráfico de red, ATC debe ejecutarse en un dispositivo que enruta el tráfico y ve la dirección IP real del dispositivo, como su puerta de enlace de red, por ejemplo. Esto también permite que cualquier dispositivo que se enrute a través de ATC pueda dar forma a su tráfico. El tráfico se puede configurar / eliminar mediante una interfaz web que permite que cualquier dispositivo con un navegador web utilice ATC sin la necesidad de una aplicación cliente.

Puede encontrarlo aquí en GitHub: https://github.com/facebook/augmented-traffic-control

También han escrito una publicación de blog al respecto: https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/

Anirudh
fuente
6

Me sorprende que nadie haya mencionado esto. Puede atar a través de Bluetooth y separarlos por más de diez metros (o menos con obstáculos). Tienes una muy mala conexión. Sin microondas, sin ascensor, sin necesidad de software.

Haemin Yoo
fuente
Esta es realmente una buena solución, a menos que tenga una muy buena conexión Bluetooth. Necesito usar un dispositivo viejo para esto. :)
desarrollador de Android
5

O en un dispositivo real puede ir a Configuración -> Redes móviles -> Tipos de red preferidos y elegir el más lento disponible ... Por supuesto, esto es muy limitado, pero para algunos fines de prueba puede ser suficiente.

jpm
fuente
3

ACTUALIZACIÓN en el estudio Android AVD:

  1. abrir el administrador de AVD
  2. crear / editar AVD
  3. haga clic en configuración avanzada
  4. seleccione su configuración de conectividad preferida

Sin microondas ni ascensores :)

detman
fuente
3

para usuarios de Mac OS, puede usar el Acondicionador de enlaces de red que se puede descargar de Apple. configúrelo como un AP en mac y cualquier división podría conectarlo.

puede usar las herramientas de código abierto de Facebook ATC http://facebook.github.io/augmented-traffic-control/

Lucas Liu
fuente
2

¿Desea probar sin conexión de red o solo una conexión de red lenta? Si es lo primero, puede ir Settings > Wireless & networks > Airplane modey activar el modo Avión. Eso le permitirá probar la falta de disponibilidad de la red en un dispositivo real.

David Conrad
fuente
Gracias, pero estaba tratando de probar la baja conectividad de red. P.ej. para una señal EDGE baja o algo así.
Maggie
Ah Lástima que no pueda apagar 3G y volver a roaming EDGE. Al menos, en mi teléfono no puedes.
David Conrad
2

Vaya a Ejecutar> Ejecutar configuraciones, seleccione su aplicación de Android y vaya a la pestaña Destino. Realice los cambios como se muestra en la figura.

ingrese la descripción de la imagen aquí

Abhi
fuente
2

Estuve luchando con este problema durante medio día, finalmente llegué a esta solución:

  • Las pruebas en un dispositivo real no tienen mucho sentido en general, ya que tienes que pasar por mucho para que funcione. La única forma lógica de lograr pruebas reales es hacer que su teléfono se conecte a una red celular de baja calidad, como EDGE, si su compañía telefónica lo proporciona. Puede intentar hacer esto marcando *#*#4636#*#*en la aplicación del teléfono

  • El emulador original de Android es demasiado lento para las pruebas y no logra más que la solución anterior.

La mejor manera de hacerlo es utilizando Genymotion . Es un emulador de Android con un rendimiento mucho mejor que los AVD originales y la versión para uso personal es gratuita.

Emulador de Genymotion

Después de crear su dispositivo virtual en Genymotion, solo siga este tutorial para configurar un proxy para el dispositivo.

Ejecute un servidor proxy en su máquina host que simule malas condiciones de red, como Crapify o Toxiproxy (solo probé el primero) y ya está listo.

Actualizar:

Me acabo de dar cuenta de que también puedes elegir la misma estrategia con dispositivos reales. Me siento como un idiota por no darme cuenta antes. Simplemente inicie un proxy de Crapify en su computadora, configure el proxy de su teléfono en la dirección local de su computadora y listo, tiene Internet deficiente en su teléfono.

Iman Akbari
fuente
1

según lo sugerido por @VicVu Charles (o cualquier otra herramienta proxy) es una manera más fácil de hacerlo. Pero me gustaría agregar que también puede hacer esto con su dispositivo, no solo con genymotion u otros emuladores. El proceso será el mismo:

Modifique la configuración wifi de su dispositivo / emulador para usar el proxy manual. Y luego configure el nombre de host y el puerto proxy a. establezca el nombre de host como ip de su sistema (obtenga la ip de su pc / mac usando ifconfig / ifconfig) b. establecer el número de puerto de genymotion (verifique la configuración del proxy en charles)

PD: Su dispositivo / emulador DEBE estar usando el mismo wifi ya que la ip que está usando probablemente sea la privada.

Ankit
fuente
1
  1. Abra la terminal en Android Studio y vaya a ../../Android/sdk/tools. El ejecutable 'emulator' debería estar disponible aquí.

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

    Ej: ./emulator -netdelay 60000 -avd Nexus_5_API_21

  3. Ahora construya su aplicación e instálela en el emulador.

  4. Ejecute su escenario en la aplicación.

Asegúrese de tener los cambios de código en la aplicación que establece el tiempo de espera para su solicitud y lo maneja.

cgr
fuente
1

Simplemente vaya al monitor del dispositivo Android desde el estudio de Android, luego DDMS -> Control de emulador. Habrá propiedades de Velocidad y Latencia.

Lester
fuente
1

Encontré que netlimiter4 es la mejor solución para limitar los datos a los emuladores. Proporciona un control granular a través de una interfaz gráfica de usuario decente y le brinda retroalimentación gráfica sobre el rendimiento de datos para cada proceso. Actualmente en una versión beta gratuita. captura de pantalla

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

Hay aplicaciones disponibles en Play Store para acelerar a dispositivos reales, pero requieren root (no puedo proporcionar ningún consejo sobre qué tan bien funcionan, si es que lo hacen, YMMV).

buscar bradybound en Play Store, no puedo publicar más de un enlace ...

Miguel.
fuente
1

has intentado esto? Configuración - Redes - Más - Redes móviles - Modo de red - Seleccione la red preferida (2G, por ejemplo).

Otro método que utilicé se mencionó anteriormente. Conéctese a través del punto de acceso de iPhone. Espero que esto ayude.

Charlie Brown
fuente
1

Estoy usando el proxy mitmproxy HTTPS. https://mitmproxy.org/

Mitmproxy es una aplicación proxy de código abierto que permite interceptar conexiones HTTP y HTTPS entre cualquier cliente HTTP (S). Permite monitorear, capturar y alterar estas conexiones en tiempo real. Solicitud de cambio, respuesta, encabezado, ... Además, puede interceptar diferentes solicitudes.

por ejemplo, response_delay.py :

from mitmproxy import http
from time import sleep

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

Luego, la ejecución de este comentario retrasa todas las respuestas del servidor:

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

En mi aplicación estoy usando la fijación de certificados, por lo que debe agregar el certificado (privado + público)

cat private.key public.key> cert.pem

Puedes encontrar un tutorial simple aquí .

Puede encontrar otros ejemplos de secuencias de comandos aquí .

Manuel Schmitzberger
fuente
0

Publicación muy antigua pero agregaré mis dos centavos. Estoy muy contento con este producto de hardware ( https://apposite-tech.com/products/linktropy-mini/ ) que nos ha permitido simular muchas condiciones del mundo real. Durante mucho tiempo tuvimos problemas para solucionar varios problemas que funcionarían en el emulador o con el modo avión.

Tenemos varios perfiles diferentes configurados, desde conectividad cero hasta varias etapas de conectividad marginal, con diferentes grados de latencia, pérdida de paquetes y errores de bits. Lo mejor de todo es que podemos cambiarlos sobre la marcha sin tener que reiniciar la aplicación en un emulador. El precio ha valido la pena por completo para nuestra tienda, y es muy fácil de usar.

Benjamin Johnson
fuente
0

Necesitaba reducir el nivel bajo de Internet en el dispositivo nativo de AndroidTV y, según lo que he leído, la solución más adecuada era limitar el acceso a Internet directamente en mi enrutador.
Vaya a la configuración del enrutador (localmente es algo así como 192.168.0.1) -> configure el servidor DHCP (si no se está ejecutando) -> elija la dirección IP de un dispositivo y configure la restricción;

Artem N
fuente