模拟Android的低网络连接性


228

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

我需要在真实的设备上而不是在模拟器上对其进行测试。


1
还研究法拉第笼。它们易于构建。
jww

Answers:


119

您可以为此使用模拟器。看一下此页面:Android Emulator。请注意以下两个参数:

  1. -netdelay <delay>

    将网络延迟仿真设置为。默认值为无。有关支持的值,请参见网络延迟仿真中的表。

  2. -netspeed <speed>

    将网络速度仿真设置为。默认值已满。有关支持的值,请参见网络速度仿真中的表。

    提高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
非常感谢,但是正如我所说,我想在真实设备上进行测试。我可以在htc或三星手机上执行此操作吗?
Maggie

2
我的猜测是,唯一的方法就是拥有可以控制网络速度的wi-fi路由器/ AP。这更多的是网络管理员的事情。但这在理论上应该是可能的。
inazaruk 2011年

78
我用过电梯:)但所有人都感叹
玛姬

3
为了模拟HTTP上的延迟,请使用ResponseCache.setDefault(new CacheResponse(){...})并在其中放置Thread.sleep(200)调用。这样的优点是可以通过程序控制(即仅在一项活动中)并且不影响其他过程。但是,为了进行更实际的测试,您应该在路由器上设置限制或使用tc命令(来自busybox)。
yingted 2012年

112
为什么这被接受为答案?该问题明确指出“不在模拟器中”
Kyle Ivey

272

这听起来有些疯狂,但微波炉可作为微波炉的防护罩。因此,将设备放入微波炉内(请勿在设备放入微波炉的状态下打开微波炉!)会导致信号强度显着下降。绝对比站在电梯里好...


3
哇,现在,如果您能建议我也可以使自己适应烤箱的话。烤箱设计用于屏蔽2.4 GHz。它可能不适用于较低的频率。IDK!
WindRider

2
无法在我的微波炉中工作(即连接仍然不错)!啊:|
yura

1
如果连接了USB线,则信号可能会以这种方式潜行。如果它在微波炉内,根本没有连接电线,则它不会收到信号。您也应该可以使用铝箔来达到这种效果,因为铝箔不会融化手机,因为您不会意外关闭手机。
约翰·摩尔

如果您需要立即断开连接并且不需要进一步的用户交互,那么微波炉仍然是一个不错的选择,这是我的特例。
罗伯特·杨

108

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

在此处输入图片说明


10
这也是我们得出的解决方案。可惜的是,这是最理智的选择。在答案中应该指出,iPhone需要3G /蜂窝连接才能进行网络共享。还应注意,就绑定设备而言,需要反转iPhone实用程序中所需的上载/下载速度。
Kyle Ivey

辉煌!愚蠢的是,这是最好的选择,特别是因为仿真器可以做到。
karl 2014年

iPhone仿真器可以束缚WiFi吗?
Kirill Kulakov 2014年

谢谢。被困惑如何设置它。如果您在允许个人热点的蜂窝计划中,这就是这样做的。我正在使用iOS 7.12 1)转到设置->蜂窝->个人热点2)将“个人热点”开关滑动到右侧,使其呈绿色/亮起(如果您愿意,可以更改密码)3)返回,返回并向下滚动到Developer 4)向下滚动到Network Link Conditioner,然后点击它。向右滑动“启用”,使其变为绿色/最后选择一个配置文件。我选择了“非常糟糕的网络”。这使我ping(2198ms)下载(0.05Mbps)上传(0.08Mbps)5)将您的Android连接到热点!
安东尼·德·索萨

1
我不停地笑,但这是在真实设备上模拟慢速网络的最佳方法。谢谢
KD。

71

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按钮

以下是其外观的屏幕截图:
Android Studio v 1.5中的网络速度和延迟设置

原始文章
对于使用Android Studio IDE的任何人:

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

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

下面的屏幕快照描述了此Run Configuration屏幕的外观:

Android Studio beta 0.8.6中的“运行配置”屏幕

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

编辑
对于使用Eclipse的任何人,请参阅下面的@Abhi答案


1
此选项卡已在Android Studio v1.5中删除
Lou Morda 2016年

@ S1LENT WARRIOR什么是延迟,例如“速度:边缘,延迟:无”和“速度:满,延迟:边缘”之间有什么区别?
约翰尼五

1
@JohnnyFive速度是指您的网络速度,而延迟是指网络延迟。
S1LENT WARRIOR'Aug

45

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

如今,某些手机可以设置为仅使用2G。非常适合在真实设备上模拟慢速互联网。

在此处输入图片说明


完美!回到边缘并以9kbyte / s的速度上传。
JcV

太好了,非常适合我目前的需求。在我的房间里,200KB的上传几乎总是在2G上失败:)
Deleplace

3
这个家伙才是真正的MVP。
edwoollard

33

岁但嘿,我会通过Genymotion的万无一失的方法来介绍一下。

  • 下载Charles免费试用版:http : //www.charlesproxy.com/download/

  • 安装它

  • 请点击Proxy -> Throttle Settings

  • 设置您的HTTP限制速度

  • 关闭那个窗口

  • 单击Proxy -> Throttling以启用油门

  • 打开Genymotion模拟器

  • 开启wifi设定

  • 长按启用的wifi连接

  • 请点击 Modify Network

  • 请点击 Show Advanced Options

  • 设置ProxyManual

  • 设置Proxy hostname10.0.3.2

  • 设置Port8888

  • 请点击 Save

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


您是从哪里获得10.0.3.2主机名的?是查尔斯的默认电话吗?
–'abbood

主机名应为运行Charles本地网络地址的计算机
MaTriXy

16

您还可以在真正的android设备上测试慢速的Internet连接:

经过Samsung Galaxy S8 + Android 8.0.0测试

进入设置 - > 连接 - > 移动网络 - >并在网络模式,你可以选择只使用2G3G 连接


15

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

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

打开油门设置

设定油门

最后,您会发现网络状态已经降低。

之前

设置后


2
这是迄今为止唯一的适当解决方案:D
egorikem '19

8

在模拟器中通过低/不良连接测试应用程序的简单方法:

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


8

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

在Mac上打开Wifi共享,将您的计算机变成Wifi热点,然后将设备连接至此。使用Netlimiter /查尔斯代理或网络链接调节器(您可能已经安装)来控制速度。

有关更多详细信息,并了解您应在结帐时测试哪种速度:http : //opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor -连接/


使用“共享”首选项窗格,您可以共享几乎任何其他连接。我将其设置为通过蓝牙共享我的WiFi连接。(通过蓝牙选项进行连接直到设置完成后才出现在我的Android手机上。)
Doug Reeder

要安装网络链接调节器工具:stackoverflow.com/q/9659382
Pang

7

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

1-点击模拟器侧栏底部的设置按钮

2-转到蜂窝

3-设置网络类型

屏幕截图


6

Facebook建立了一种称为“ 增强流量控制”的东西。他们的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

我很惊讶没有人提到这一点。您可以通过蓝牙进行绑定,并将它们隔开十多米(或更少的障碍物)。您的连接确实不好。没有微波炉,没有电梯,不需要软件。


除非您有很好的蓝牙连接,否则这实际上是一个很好的解决方案。为此需要使用旧设备。:)
android开发人员

5

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


3

在Android Studio AVD上的更新:

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

没有微波炉或电梯:)



2

您是否要测试是否没有网络连接,或者只是测试速度较慢的网络连接?如果是前者,则可以转到Settings > Wireless & networks > Airplane mode并打开飞行模式。这样一来,您就可以在实际设备上测试网络的不可用性。


谢谢,但是我正在尝试测试网络连接是否断开。例如。对于低EDGE信号或类似信号。
玛姬

啊。太糟糕了,您无法关闭3G并回到EDGE漫游状态。至少,在我的手机上不能。
David Conrad

2

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

在此处输入图片说明


2

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

  • 从整体上讲,在真实设备上进行测试没有多大意义,因为您必须经过很多工作才能使其正常工作。进行真实测试的唯一合乎逻辑的方法是,如果您的电话公司提供电话,则使电话连接到EDGE等低质量的蜂窝网络。您可以尝试通过拨打*#*#4636#*#*电话应用程序来执行此操作

  • 原始的Android模拟器进行测试的速度太慢,并且只能实现上述解决方案。

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

Genymotion模拟器

在Genymotion中创建虚拟设备后,只需完成本教程即可为该设备设置代理。

在您的主机上运行代理服务器,以模拟不良的网络状况,例如CrapifyToxiproxy(我只测试了前者),一切顺利。

更新:

我只是意识到您也可以在实际设备中选择完全相同的策略。我觉得自己是个白痴,没有早日意识到这一点。只需在计算机上启动Crapify代理,将电话代理设置为计算机的本地地址,瞧,您的电话上网情况就很糟。


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。“模拟器”可执行文件应在此处提供。

  2. 运行./emulator -netdelay“ delay_in_millis” -avd“ emulator_device_name”

    例如:./emulator -netdelay 60000 -avd Nexus_5_API_21

  3. 现在构建您的应用程序并将其安装在模拟器中。

  4. 在应用程序中运行方案。

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


1

只需从Android studio转到Android设备监视器,然后转到DDMS-> Emulator Control。将有Speed和Latency属性。


1

我发现netlimiter4是将数据限制到模拟器的最佳解决方案。它通过一个不错的gui提供了精细的控制,并为您提供了每个过程的数据吞吐量的图形反馈。目前处于免费测试阶段。 屏幕截图

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

Play商店中有可用的应用程序可用于实际设备,但它们需要root用户(如果有的话,我无法提供有关其运行情况的任何建议-YMMV。)

在Play商店上搜索“ bradybound”,我不能发布多个链接。


1

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

上面提到了我使用的另一种方法。通过iPhone热点连接。希望这可以帮助。


1

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

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

例如response_delay.py

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

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

猫private.key public.key> cert.pem

您可以在此处找到一个简单的教程。

您可以在此处找到其他脚本示例。


0

很老的职位,但我要加两分钱。我对这个硬件产品(https://apposite-tech.com/products/linktropy-mini/)感到非常满意,这使我们能够模拟许多现实情况。长期以来,我们一直面临着对各种在模拟器或飞机模式下可以正常工作的故障进行故障排除的挑战。

从零连接到边缘连接的各个阶段,我们有几种不同的配置文件设置,它们具有不同程度的延迟,数据包丢失和误码。很棒的是,我们可以即时更改这些内容,而不必在模拟器中重新启动应用程序。对于我们的商店来说,价格已经完全值得了,而且使用起来非常简单。


0

我需要在AndroidTV本机设备上限制低速互联网,根据我所阅读的内容,最合适的解决方案是直接在路由器中限制互联网访问。
转到路由器设置(本地为192.168.0.1)->设置DHCP服务器(如果未运行)->选择设备的IP地址并设置限制;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.