Simular baixa conectividade de rede para Android [fechado]

228

Gostaria de testar meu aplicativo para casos de baixa conectividade de rede. Exceto em pé no elevador, qual é a melhor maneira de fazer isso? Tentei envolver meu telefone em uma folha de alumínio, mas não ajudou muito.

Preciso testá-lo em um dispositivo real, não em um emulador.

Maggie
fonte
1
A pesquisa também gaiolas de Faraday . Eles são fáceis de construir.
JWW

Respostas:

119

Você pode usar o emulador para isso. Dê uma olhada nesta página: Emulador do Android . Preste atenção nos próximos dois argumentos:

  1. -netdelay <delay>

    Defina a emulação de latência de rede como. O valor padrão é nenhum. Consulte a tabela em Emulação de atraso de rede para obter os valores suportados.

  2. -netspeed <speed>

    Defina a emulação de velocidade da rede como. O valor padrão está cheio. Consulte a tabela emulação de velocidade de rede para obter os valores suportados.

    Velocidades de referência no aumento de 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                     
inazaruk
fonte
15
muito obrigado, mas como eu disse, gostaria de testar em um dispositivo real. de alguma maneira eu posso fazer isso em um telefone htc ou samsung?
Maggie
2
Meu palpite é que o único caminho a seguir é ter um roteador / ponto de acesso wi-fi que possa controlar a velocidade da rede. Isso é mais uma coisa de administrador de rede. Mas isso deveria ser teoricamente possível.
inazaruk
78
Eu usei o elevador :), mas obrigado a todos #
Maggie
3
Para simular latência por HTTP, use ResponseCache.setDefault (new CacheResponse () {...}) e faça uma chamada Thread.sleep (200). Isso tem a vantagem de ser controlado programaticamente (ou seja, apenas em uma atividade) e não afetar outros processos. No entanto, para um teste mais realista, você deve definir o limite no seu roteador ou usar o tccomando (do busybox).
yingted 14/03/12
112
Por que isso foi aceito como resposta? A questão claramente "não em um emulador"
Kyle Ivey
272

Isso pode parecer um pouco louco, mas um forno de microondas serve como um escudo de microondas. Portanto, colocar o dispositivo dentro de um forno de microondas (NÃO ligue o forno de microondas enquanto o dispositivo estiver dentro!) Fará com que a intensidade do sinal caia significativamente. Definitivamente bate em pé dentro de um elevador ...

Shams Shafiq
fonte
3
Uau, agora, se você puder me sugerir uma maneira de me colocar no forno também. E os fornos são projetados para proteger 2,4 GHz. Pode não funcionar para frequências mais baixas. SEI LÁ!
WindRider 30/01/19
2
não funcionou no meu microondas (ou seja, a conexão ainda era decente)! Agh: |
yura
1
Se você tiver um cabo USB conectado, o sinal poderá se infiltrar dessa maneira. Se estiver dentro do micro-ondas sem nenhum cabo conectado, ele não deverá receber sinal. Você deve conseguir esse efeito também com papel de alumínio, que não derreterá o telefone, pois não poderá desligar o telefone acidentalmente.
John Moore
O forno de microondas ainda é uma boa opção se você precisar desencadear uma desconexão imediata e não precisar de mais interação com o usuário, que foi meu caso de uso específico.
Robert Yang
108

Como a opção de desenvolvedor de iPhones se aplica ao compartilhamento de Wi-Fi, você pode obter um iPhone que tem iOS 6e acima (e foi definido use for developmentscom xcode), configurá-lo para emular o perfil de rede desejado, conectar seu dispositivo Android ao ponto de acesso

insira a descrição da imagem aqui

Kirill Kulakov
fonte
10
Esta foi a solução que chegamos também. É uma pena que esta seja a opção mais sensata disponível. Deve-se observar na resposta que o iPhone requer uma conexão 3G / celular para que o compartilhamento funcione. Observe também que as velocidades de upload / download necessárias no utilitário do iPhone precisam ser invertidas para que estejam relacionadas ao dispositivo conectado.
precisa
Brilhante! Bobo que essa é a melhor opção, principalmente porque o emulador pode fazê-lo.
karl
O emulador de iPhone pode amarrar o WiFi?
Kirill Kulakov
Obrigado. Estava confuso como configurá-lo. É assim - se você estiver em um plano de celular que permita pontos de acesso pessoais. Estou usando o iOS 7.12 1) vá para CONFIGURAÇÕES-> Celular-> Ponto de acesso pessoal 2) deslize o botão Ponto de acesso pessoal para a direita para que fique verde / ativado (pode alterar a senha, se preferir) 3) volte, volte e role para baixo até Desenvolvedor 4) role para baixo até Condicionador de link de rede e toque nele. deslize ATIVAR para a direita para que fique verde / escolha finalmente um perfil. Eu escolhi "Rede muito ruim". Isso me deu ping (2198ms) download (0,05Mbps) upload (0,08Mbps) 5) Conecte seu Android ao ponto de acesso!
Anthony De Souza
1
Não consigo parar de rir, mas esta é a melhor solução para simular uma rede lenta em um dispositivo real. Obrigado
KD.
71

Atualização para o Android Studio v 1.5 ou superior
Como o @LouMorda mencionado em um comentário abaixo, a Emulatorguia mencionada na postagem original foi removida no Android Studio v 1.5.

Agora eles colocaram essas configurações nas Configurações do simulador em AVD Manager.
Para acessar essas configurações:

  1. Selecione Tools -> Android -> AVD Manager
  2. Clique no Edit AVDbotão (ícone de lápis)
  3. O Network Settingspode ser acessado depois de clicar no Show Advanced Settingsbotão

Aqui está uma captura de tela de como pode aparecer:
Configurações de velocidade e latência de rede no Android Studio v 1.5

Post original
Para quem usa o Android Studio IDE:

  1. Vamos para Run -> Edit Configurations
  2. Selecione Android Application -> [Your App]
  3. EmulatorGuia Selecionar
  4. Aqui você pode alterar valores diferentes para Network Speede Network Latencypara simular diferentes velocidades e latências etc.

Como alternativa, você pode inserir vários argumentos no Additional command line optionscampo de texto, conforme mencionado na resposta do @ inazaruk.

A captura de tela abaixo descreve como essa Run Configurationtela se parece:

Executar tela de configurações no Android Studio beta 0.8.6

Sei que é um pouco tarde para responder a essa pergunta, mas espero que isso ajude outras pessoas que enfrentam problemas semelhantes!

Editar
Para quem usa o eclipse, consulte a resposta de @ Abhi abaixo.

S1LENT WARRIOR
fonte
1
Esta guia foi removida no Android Studio v1.5
Lou Morda
@ S1LENT WARRIOR O que é latência e qual é a diferença entre (por exemplo) "velocidade: margem, latência: nenhuma" e "velocidade: total, latência: margem"?
Johnny Cinco
1
A velocidade do @JohnnyFive refere-se à velocidade da sua rede e latência significa o atraso da rede.
S1LENT WARRIOR 31/08/19
45

Eu sei que é uma pergunta antiga, mas ...

Atualmente, alguns telefones têm uma configuração para utilizar apenas 2G. É perfeito para simular internet lenta em um dispositivo real.

insira a descrição da imagem aqui

Pkmmte
fonte
perfeito! back to edge e um upload a 9kbyte / s.
JCV
Ótimo, isso se adapta perfeitamente à minha necessidade atual. No meu quarto, um upload de 200KB quase sempre falha em 2G :)
Deleplace
3
Esse cara é o verdadeiro MVP.
Edwoollard
33

Anos, mas, ei, eu vou concordar com meu método infalível com Genymotion.

  • Faça o download da avaliação gratuita do Charles: http://www.charlesproxy.com/download/

  • Instale-o

  • CliqueProxy -> Throttle Settings

  • Configure suas velocidades de aceleração HTTP

  • Feche essa janela

  • Clique Proxy -> Throttlingpara ativar o acelerador

  • Abra um emulador Genymotion

  • Abra as configurações de wifi

  • Pressione e segure a conexão wifi ativada

  • Clique Modify Network

  • Clique Show Advanced Options

  • Defina ProxycomoManual

  • Defina Proxy hostnamecomo10.0.3.2

  • Defina Portcomo8888

  • Clique Save

E agora sua rede será acelerada!

VicVu
fonte
de onde você obteve o nome do host 10.0.3.2? é o padrão de charle?
Abbood 24/07/19
nome do host deve ser o computador executando o endereço de rede local de Charles
MaTriXy
16

Você também pode testar a conectividade lenta da Internet em um dispositivo Android real:

Testado com Samsung Galaxy S8 + Android 8.0.0

Vá para Configurações -> Conexão -> Rede Móvel -> e sob networkmode você pode escolher apenas para usar 2G ou 3G conexões

rm -rf
fonte
15

Eu tenho uma estratégia para resolver seu problema. Você pode usar o aplicativo proxy para modificar ou monitorar seu status líquido. por exemplo, Charles .

Você deve alterar a configuração padrão do Charles como na imagem a seguir.

Abra a configuração do acelerador

Definindo sua configuração do acelerador

E, finalmente, você descobrirá que o status da rede foi modelado em ritmo mais baixo.

Antes

Definir Depois

Benchur Wong
fonte
2
Esta é a única solução até agora adequada: D
egorikem
8

Maneira fácil de testar seu aplicativo com conexão baixa / ruim no emulador:

Vá em Executar > Executar configurações , selecione seu Aplicativo Android e vá para a guia Destino . Parâmetros de inicialização do Look Emulator . Aqui, você pode modificar facilmente a velocidade e a latência da rede.

pgarriga
fonte
8

Existe uma maneira simples de testar baixas velocidades em um dispositivo real que parece ter sido esquecido. Requer um Mac e uma conexão de rede Ethernet (ou outra com fio).

Ative o compartilhamento Wifi no Mac, transformando seu computador em um hotspot Wifi, conecte seu dispositivo a isso. Use o Netlimiter / Charles Proxy ou o Network Link Conditioner (que você já pode ter instalado) para controlar as velocidades.

Para obter mais detalhes e entender que tipo de velocidade você deve testar, confira: http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor -conexões /

James_OSM
fonte
Usando o painel de preferências "Compartilhamento", você pode compartilhar quase todas as conexões com outras. Eu o configurei para compartilhar minha conexão WiFi por Bluetooth. (The conectar via Bluetooth opções não aparecem no meu celular Android até que esta foi criada.)
Doug Reeder
Para instalar a Ferramenta de Condicionador de Link de Rede: stackoverflow.com/q/9659382
Pang
7

No Android Studio, ao executar um emulador:

1- Clique no botão de configurações na parte inferior da barra lateral do emulador

2- Vá para Celular

3- Defina o tipo de rede

Captura de tela

Mert Kahraman
fonte
6

O Facebook construiu algo chamado Controle de Tráfego Aumentado . Um breve resumo da página do GitHub:

O Controle de Tráfego Aumentado (ATC) é uma ferramenta para simular as condições da rede. Permite controlar a conexão que um dispositivo possui à Internet. Os desenvolvedores podem usar o ATC para testar seu aplicativo em diferentes condições de rede, simulando facilmente redes móveis, de alta velocidade e até gravemente prejudicadas. Aspectos da conexão que pode ser controlada incluem:

  • largura de banda
  • latência
  • perda de pacotes
  • pacotes corrompidos
  • encomenda de pacotes

Para poder modelar o tráfego de rede, o ATC deve estar em execução em um dispositivo que roteia o tráfego e vê o endereço IP real do dispositivo, como o gateway de rede, por exemplo. Isso também permite que qualquer dispositivo que seja roteado pelo ATC possa modelar seu tráfego. O tráfego pode ser modelado / sem forma usando uma interface da web, permitindo que qualquer dispositivo com um navegador da web use o ATC sem a necessidade de um aplicativo cliente.

Você pode encontrá-lo aqui no GitHub: https://github.com/facebook/augmented-traffic-control

Eles também escreveram uma postagem no blog: https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-control-a-tool-to-simulate-network-conditions/

Anirudh
fonte
6

Estou surpreso que ninguém tenha mencionado isso. Você pode amarrar via Bluetooth e separá-los por mais de dez metros (ou menos com obstáculos). Você tem uma conexão muito ruim. Sem microondas, sem elevador, sem necessidade de software.

Haemin Yoo
fonte
Esta é realmente uma boa solução, a menos que você tenha uma conexão Bluetooth muito boa. Precisa usar um dispositivo antigo para isso. :)
desenvolvedor Android
5

Ou em um dispositivo real, você pode acessar Configurações -> Redes móveis -> Tipos de rede preferidos e escolher o mais lento disponível ... É claro que isso é muito limitado, mas para alguns fins de teste pode ser suficiente.

jpm
fonte
3

ATUALIZAÇÃO no estúdio Android AVD:

  1. abrir gerente AVD
  2. criar / editar AVD
  3. clique em configurações avançadas
  4. selecione sua configuração de conectividade preferida

Não microondas ou elevadores :)

detman
fonte
3

Para usuários do Mac OS, você pode usar o Network Link Conditioner, que pode ser baixado da Apple. configurá-lo como um AP no mac e quaisquer divices poderiam conectá-lo.

você pode usar as ferramentas de código aberto do Facebook ATC http://facebook.github.io/augmented-traffic-control/

Lucas Liu
fonte
2

Deseja testar se não há conexão de rede ou apenas uma conexão de rede lenta? No primeiro, você pode acessar Settings > Wireless & networks > Airplane modee ativar o modo Avião. Isso permitirá testar a indisponibilidade da rede em um dispositivo real.

David Conrad
fonte
Obrigado, mas estava tentando testar a baixa conectividade de rede. Por exemplo. para um sinal EDGE baixo ou algo assim.
21711 Maggie
Ah Pena que você não pode desativar o 3G e voltar ao roaming EDGE. Pelo menos no meu telefone você não pode.
David Conrad
2

Vá em Executar> Executar configurações, selecione seu Aplicativo Android e vá para a guia Destino. Faça as alterações conforme mostrado na figura.

insira a descrição da imagem aqui

Abhi
fonte
2

Eu estava lutando com esse problema por meio dia, finalmente cheguei a esta solução:

  • Testar em um dispositivo real não faz muito sentido em geral, pois você precisa fazer muito para fazê-lo funcionar. A única maneira lógica de realizar testes reais é fazer com que o telefone se conecte a uma rede celular de baixa qualidade, como a EDGE, se a companhia telefônica fornecer. Você pode tentar fazer isso discando *#*#4636#*#*no aplicativo de telefone

  • O emulador original do Android é muito lento para testes e não alcança mais do que a solução acima.

A melhor maneira de fazer isso é usar o Genymotion . É um emulador Android com desempenho muito melhor que os AVDs originais e a versão para uso pessoal é gratuita.

Emulador Genymotion

Depois de criar seu dispositivo virtual no Genymotion, basta seguir este tutorial para definir um proxy para o dispositivo.

Execute um servidor proxy em sua máquina host que simule más condições de rede, como Crapify ou Toxiproxy (eu testei apenas o primeiro) e você estará .

Atualizar:

Acabei de perceber que você também pode escolher a mesma estratégia com dispositivos reais. Eu me sinto um idiota por não perceber isso antes. Basta iniciar um proxy Crapify no seu computador, definir o proxy do telefone para o endereço local do seu computador e pronto, você tem uma Internet ruim no seu telefone.

Iman Akbari
fonte
1

como sugerido por @VicVu Charles (ou qualquer outra ferramenta de proxy) é um caminho mais fácil. Mas eu gostaria de acrescentar que você também pode fazer isso com seu dispositivo, não apenas com genymotion ou outros emuladores. O processo será o mesmo:

Modifique a configuração wifi do seu dispositivo / emulador para usar o proxy manual. E, em seguida, defina o nome do host e a porta do proxy a. defina o nome do host como ip do seu sistema (obtenha o ip do seu pc / mac usando ifconfig / ifconfig) b. defina o número da porta do genymotion (verifique as configurações de proxy em charles)

PS: Seu dispositivo / emulador DEVE estar usando o mesmo wifi, pois o IP que você está usando provavelmente será o IP privado.

Ankit
fonte
1
  1. Abra o terminal no Android Studio e vá para ../../Android/sdk/tools. O executável 'emulator' deve estar disponível aqui.

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

    Por exemplo: ./emulator -netdelay 60000 -avd Nexus_5_API_21

  3. Agora crie seu aplicativo e instale-o no emulador.

  4. Execute seu cenário no aplicativo.

Verifique se o seu código foi alterado no aplicativo que define o tempo limite da sua solicitação e cuida disso.

cgr
fonte
1

Basta ir ao monitor do dispositivo Android no Android studio e, em seguida, DDMS -> Emulator Control. Haverá propriedades de velocidade e latência.

Lester
fonte
1

Eu achei o netlimiter4 a melhor solução para limitar dados para emuladores. Ele fornece controle granular através de uma interface gráfica decente e fornece feedback gráfico sobre a taxa de transferência de dados para cada processo. Atualmente em uma versão beta gratuita. captura de tela

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

Existem aplicativos disponíveis na Play Store para acelerar nos dispositivos reais, mas eles precisam de root (não posso fornecer conselhos sobre o quão bem eles funcionam, se é que existem - YMMV.)

procurar bradybound na play store, não posso postar mais de um link.

Michael.
fonte
1

você já tentou isso? Configurações - Redes - Mais - Redes móveis - Modo de rede - Selecione a rede preferida (2G, por exemplo).

Outro método que usei foi mencionado acima. Conecte-se via hot spot do iPhone. Espero que isto ajude.

Charlie Brown
fonte
1

Estou usando o proxy mitmproxy HTTPS. https://mitmproxy.org/

O Mitmproxy é um aplicativo proxy de código aberto que permite interceptar conexões HTTP e HTTPS entre qualquer cliente HTTP (S). Permite monitorar, capturar e alterar essas conexões em tempo real. Solicitação de mudança, resposta, cabeçalho, ... Além disso, você pode interceptar solicitações diferentes.

por exemplo response_delay.py :

from mitmproxy import http
from time import sleep

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

A execução desse comentário atrasa todas as respostas do servidor:

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

No meu aplicativo, eu estou usando a fixação de certificados, então você precisa adicionar o certificado (privado + público)

gato private.key public.key> cert.pem

Você pode encontrar um tutorial simples aqui .

Você pode encontrar outros exemplos de script aqui .

Manuel Schmitzberger
fonte
0

Post muito antigo, mas vou adicionar meus dois centavos. Fiquei muito satisfeito com este produto de hardware ( https://apposite-tech.com/products/linktropy-mini/ ) que nos permitiu simular muitas condições do mundo real. Por um longo tempo, tivemos problemas para solucionar várias coisas que funcionariam no emulador ou no modo avião.

Temos vários perfis diferentes configurados, desde conectividade zero até vários estágios de conectividade marginal, com diferentes graus de latência, perda de pacotes e erros de bits. O melhor de tudo é que podemos alterá-los rapidamente sem precisar reiniciar o aplicativo em um emulador. O preço valeu a pena para a nossa loja e é muito simples de usar.

Benjamin Johnson
fonte
0

Eu precisava acelerar a baixa Internet no dispositivo nativo AndroidTV e, com base no que li, a solução mais adequada foi limitar o acesso à Internet diretamente no meu roteador.
Vá para as configurações do roteador (localmente, é como 192.168.0.1) -> configure o servidor DHCP (se não estiver em execução) -> escolha o endereço IP de um dispositivo e defina a restrição;

Artem N
fonte