模拟Android的低网络连接

问题描述 投票:175回答:26

我想测试我的应用程序的低网络连接情况。除了站在电梯里,最好的办法是什么?我试过用铝箔包裹我的手机,但它没有多大帮助。

我需要在真实设备上测试它,而不是在模拟器中测试它。

android connectivity
26个回答
96
投票

您可以使用模拟器。看看这个页面:Android Emulator。注意接下来的两个论点:

  1. -netdelay <delay> 将网络延迟仿真设置为。默认值为none。有关支持的值,请参阅网络延迟仿真中的表。
  2. -netspeed <speed> 将网络速度仿真设置为。默认值已满。有关支持的值,请参阅网络速度仿真中的表格。

6
投票

Facebook建立了一个名为Augmented Traffic Control的东西。 GitHub页面的简短摘要:

增强流量控制(ATC)是一种模拟网络状况的工具。它允许控制设备与互联网的连接。开发人员可以使用ATC在不同的网络条件下测试其应用程序,轻松模拟高速,移动甚至严重受损的网络。可以控制的连接方面包括:

  • 带宽
  • 潜伏
  • 数据包丢失
  • 损坏的数据包
  • 包订购

为了能够塑造网络流量,ATC必须在路由流量的设备上运行并查看设备的真实IP地址,例如网络网关。这也允许通过ATC路由的任何设备能够塑造其流量。可以使用Web界面对流量进行整形/整形,允许具有Web浏览器的任何设备使用ATC而无需客户端应用程序。

你可以在GitHub上找到它:https://github.com/facebook/augmented-traffic-control

他们还撰写了一篇关于它的博客文章:https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/


6
投票

我很惊讶没人提到这一点。您可以通过蓝牙连接,并将它们分开10 +米(或更少的障碍物)。你的连接真的很糟糕。没有微波炉,没有电梯,不需要软件。


6
投票

您还可以在真正的Android设备上测试慢速互联网连接:

测试三星Galaxy S8 + Android 8.0.0

转到设置 - >连接 - >移动网络 - >,在网络模式下,您可以选择仅使用2G或3G连接


4
投票

或者在实际设备上,您可以转到设置 - >移动网络 - >首选网络类型并选择最慢的可用...当然这是非常有限的,但出于某些测试目的,它可能就足够了。


3
投票

更新Android工作室AVD:

  1. 打开AVD经理
  2. 创建/编辑AVD
  3. 单击高级设置
  4. 选择首选的连接设置

没有微波炉或电梯:)


3
投票

对于和Mac OS用户,您可以使用可从Apple下载的网络链接调节器。将它设置为mac上的AP,任何divices都可以连接它。

你可以使用Facebook开源工具ATC http://facebook.github.io/augmented-traffic-control/


3
投票

在Android Studio中,在运行模拟器时:

1-仿真器侧栏底部的命中设置按钮

2-转到Cellular

3-设置网络类型

Screenshot


2
投票

您想测试没有网络连接,还是只测试慢速网络连接?如果是前者,你可以去Settings > Wireless & networks > Airplane mode并打开飞行模式。这将让您测试实际设备上的网络不可用性。


2
投票

单击运行>运行配置,选择您的Android应用程序,然后转到目标选项卡。如图所示进行更改。


2
投票

我在这个问题上挣扎了半天,最后我找到了这个解决方案:

  • 在真实设备上进行测试并不是很有意义,因为你必须经历很多工作才能使它工作。实现真正测试的唯一合理方法是让您的手机连接到低质量的蜂窝网络,如EDGE,如果您的电话公司提供它。你可以尝试通过在手机应用程序中拨打*#*#4636#*#*来做到这一点
  • 最初的Android模拟器对于测试来说太慢了,并且没有达到上述解决方案的效果。

最好的方法是使用Genymotion。它是一个Android模拟器,性能比原始AVD好得多,个人使用的版本是免费的。

Genymotion emulator

在Genymotion中创建虚拟设备后,只需通过this tutorial为设备设置代理。

在主机上运行代理服务器来模拟糟糕的网络状况,例如CrapifyToxiproxy(我只测试过前者),你很高兴。

更新:

我刚刚意识到你也可以选择与真实设备相同的策略。我觉得自己很快就没有意识到这一点。只需在您的计算机上启动Crapify代理,将您的手机代理设置为您计算机的本地地址,瞧,您的手机上的网络很糟糕。


242
投票

这可能听起来有点疯狂,但微波炉可作为微波屏蔽。因此,将您的设备放入微波炉(当您的设备在里面时,请勿打开微波炉!)将导致您的信号强度显着下降。它绝对胜过站在电梯内......


1
投票

正如@VicVu所建议的Charles(或任何其他代理工具)是一种更容易的方法。但我想补充一点,你也可以使用你的设备,而不仅仅是genymotion或其他模拟器。流程将是相同的:

修改设备/模拟器的wifi设置以使用手动代理。然后设置代理主机名和端口a。将主机名设置为系统的ip(使用ifconfig / ifconfig获取pc / mac的ip)b。设置genymotion的端口号(检查charles中的代理设置)

PS:您的设备/模拟器必须使用相同的wifi,因为您使用的IP很可能是私有IP。


1
投票
  1. 在Android Studio中打开终端并转到../../Android/sdk/tools。 'emulator'可执行文件应该可以在这里找到。
  2. 运行./emulator -netdelay“delay_in_millis”-avd“emulator_device_name” 例如:./ emulator -netdelay 60000 -avd Nexus_5_API_21
  3. 现在构建您的应用程序并将其安装在模拟器中。
  4. 在应用中运行您的方案。

确保在应用程序中更改代码,为您的请求设置超时并处理。


1
投票

只需从Android工作室转到Android设备监视器,然后是DDMS - > Emulator Control.There将是Speed和Latency属性。


1
投票

我发现netlimiter4是限制数据到仿真器的最佳解决方案。它通过合适的gui提供粒度控制,并为您提供每个过程的数据吞吐量的图形反馈。目前处于免费测试阶段。 screenshot

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

游戏商店有可用的应用程序来限制实际设备,但它们需要root(我无法提供任何关于它们工作情况的建议,如果有的话 - YMMV。)

在Play商店搜索bradybound,我不能发布多个链接..


1
投票

你试过这个吗?设置 - 网络 - 更多 - 移动网络 - 网络模式 - 选择首选网络(例如2G)。

我使用的另一种方法如上所述。通过iPhone热点连接。希望这可以帮助。


1
投票

我正在使用mitmproxy HTTPS代理。 https://mitmproxy.org/

Mitmproxy是一个开源代理应用程序,允许拦截任何HTTP(S)客户端之间的HTTP和HTTPS连接。它允许实时监控,捕获和更改这些连接。更改请求,响应,标题,...此外,您可以拦截不同的请求。

EG response_delay.pi:

from mitmproxy import http
from time import sleep

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

然后执行此注释会延迟服务器的所有响应:

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

在我的应用程序中,我使用证书固定,因此您需要添加证书(私人+公共)

cat private.key public.key> cert.pem

你可以找到一个简单的教程here

您可以找到其他脚本示例here


0
投票

非常老的帖子,但我会加上我的两分钱。我对这款硬件产品(https://apposite-tech.com/products/linktropy-mini/)非常满意,它使我们能够模拟许多现实世界的条件。很长一段时间,我们遇到了对在仿真器或飞行模式下工作的各种事情进行故障排除的挑战。

我们有几种不同的配置文件,从零连接到边缘连接的各个阶段,具有不同程度的延迟,数据包丢失和位错误。关于它的好处是我们可以动态更改这些,而无需在模拟器中重新启动应用程序。价格对我们的商店来说是完全值得的,并且使用起来很简单。


96
投票

由于iPhone开发人员选项适用于wifi网络共享,你可以获得一个拥有iOS 6及以上的iPhone(并已设置为use for developmentsxcode),将其设置为模拟所需的网络配置文件,将您的Android设备连接到其热点


65
投票

Android Studio v 1.5或更高版本的更新 正如@LouMorda在下面的评论中提到的,原始帖子中提到的Emulator标签已在Android Studio v 1.5中删除。

现在,他们已将这些设置放在AVD Manager的模拟器设置中。 要访问这些设置:

  1. 选择Tools -> Android -> AVD Manager
  2. 单击Edit AVD按钮(铅笔图标)
  3. 单击Network Settings按钮后可以访问Show Advanced Settings

以下是它可能如何显示的屏幕截图: Network Speed and Latency Settings in Android Studio v 1.5

原帖 对于使用Android Studio IDE的任何人:

  1. Run -> Edit Configurations
  2. 选择Android Application -> [Your App]
  3. 选择Emulator选项卡
  4. 在这里你可以改变Network SpeedNetwork Latency的不同值来模拟不同的速度和延迟等

或者,您可以在@ inazaruk的答案中提到的Additional command line options文本字段中输入各种参数。

下面的屏幕截图描述了这个Run Configuration屏幕的样子:

我知道回答这个问题有点晚了,但我希望这有助于其他人面临类似的问题!

编辑 对于使用eclipse的任何人,请参阅下面的@Abhi's answer


38
投票

我知道这是一个老问题,但......

现在有些手机只能使用2G。它非常适合在真实设备上模拟慢速互联网。


33
投票

岁了,但是嘿,我会用Genymotion的万无一失的方法来加入。

  • 下载Charles免费试用版:http://www.charlesproxy.com/download/
  • 安装它
  • ClickProxy -> Throttle Settings
  • 设置HTTP限制速度
  • 关闭那个窗口
  • 单击Proxy -> Throttling以启用油门
  • 打开Genymotion模拟器
  • 打开wifi设置
  • 长按启用的wifi连接
  • 点击Modify Network
  • 点击Show Advanced Options
  • Proxy设为Manual
  • Proxy hostname设置为10.0.3.2
  • Port设置为8888
  • 点击Save

现在您的网络将受到限制!


11
投票

我有一个策略来解决你的问题。您可以使用代理应用程序来修改或监控您的净状态。例如,查尔斯。

您应该像我发布的以下图片一样更改Charles的默认配置。

Open Your Throttle Setting

Setting Your Throttle Setting

最后,您会发现净状态已经降低了。

Before

Setting After


8
投票

在模拟器中使用低/坏连接测试应用程序的简便方法:

单击运行>运行配置,选择您的Android应用程序,然后转到目标选项卡。 Look Emulator启动参数。在这里,您可以轻松修改网络速度和网络延迟。


8
投票

在真实设备上测试低速的简单方法似乎被忽略了。它确实需要Mac和以太网(或其他有线)网络连接。

在Mac上打开Wifi共享,将您的计算机变为Wifi热点,将您的设备连接到此。使用Netlimiter / Charles Proxy或网络链接调节器(您可能已安装)来控制速度。

有关更多详细信息,并了解您应该检查什么样的速度:http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor-connections/

© www.soinside.com 2019 - 2024. All rights reserved.