【问题标题】:Simulate low network connectivity for Android [closed]模拟 Android 的低网络连接 [关闭]
【发布时间】:2011-08-11 12:57:00
【问题描述】:

我想测试我的应用程序是否存在网络连接不足的情况。除了站在电梯里,最好的方法是什么?我试过用铝箔纸包裹手机,但效果不大。

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

【问题讨论】:

标签: android connectivity


【解决方案1】:

这听起来可能有点疯狂,但微波炉可以起到微波屏蔽的作用。因此,将您的设备放入微波炉中(请勿在设备在里面时打开微波炉!)会导致您的信号强度显着下降。这绝对比站在电梯里要好......

【讨论】:

  • 哇,现在,如果你能建议我一种让自己也适合烤箱的方法。烤箱设计用于屏蔽 2.4 GHz。它可能不适用于较低的频率。 IDK!
  • 在我的微波炉中不起作用(即连接仍然不错)!啊:|
  • 如果您连接了 USB 线,信号可能会以这种方式潜入。如果它在微波炉内,根本没有连接电线,它应该不会收到信号。用铝箔纸应该也能达到这个效果,不会把手机熔化,因为你不会不小心把手机关机。
  • 如果您需要立即断开连接并且不需要进一步的用户交互(这是我的特殊用例),微波炉仍然是一个不错的选择。
  • 感谢上帝 chrome 已经实现了一些东西来帮助我们实现这一目标
【解决方案2】:

您可以为此使用模拟器。看看这个页面: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           ∞          ∞
    

【讨论】:

  • 非常感谢,但正如我所说,我想在真实设备上进行测试。有什么办法可以在 htc 或三星手机上做到这一点?
  • 我的猜测是,唯一的方法是拥有一个可以控制网络速度的 wi-fi 路由器/AP。这更像是网络管理员的事情。但这在理论上应该是可能的。
  • 我用过电梯 :) 但是谢谢大家
  • 为了模拟 HTTP 上的延迟,使用 ResponseCache.setDefault(new CacheResponse(){...}) 并在那里调用 Thread.sleep(200)。这具有以编程方式控制(即仅在一个活动中)并且不影响其他流程的优势。但是,为了进行更实际的测试,您应该在路由器上设置限制或使用tc 命令(来自busybox)。
  • 为什么这被接受为答案?该问题明确指出“不在模拟器中”
【解决方案3】:

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

【讨论】:

  • 这也是我们得到的解决方案。很遗憾,这是可用的最明智的选择。应该在答案中指出,iPhone 需要 3G/蜂窝连接才能工作。还应注意 iPhone 实用程序中所需的上传/下载速度需要反转以相对于系留设备。
  • 太棒了!愚蠢的是,这是最好的选择,尤其是模拟器可以做到这一点。
  • iPhone模拟器可以绑定WiFi吗?
  • 谢谢。很困惑如何设置。这就是 - 如果您使用允许个人热点的蜂窝计划。我正在使用 iOS 7.12 1) 转到 SETTINGS->Cellular->Personal Hotspot 2) 向右滑动 Personal Hotspot 开关,使其变为绿色/开启(如果您愿意,可以更改密码) 3) 返回,返回并向下滚动到 Developer 4)向下滚动到网络链接调节器并点击它。向右滑动启用,使其呈绿色/亮起,最后选择一个配置文件。我选择了“非常糟糕的网络”。这给了我 ping (2198ms) 下载 (0.05Mbps) 上传 (0.08Mbps) 5) 将您的 Android 连接到热点!
  • 我忍不住笑了,但这是在真实设备上模拟慢速网络的最佳解决方案。谢谢
【解决方案4】:

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

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

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

下面是它的屏幕截图:

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

  1. 转到Run -> Edit Configurations
  2. 选择Android Application -> [Your App]
  3. 选择Emulator标签
  4. 您可以在此处更改Network Speed(网速)和Network Latency(延迟)的不同值,以模拟不同的速度和延迟等

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

下面的屏幕截图描述了Run Configuration 屏幕的外观:

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

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

【讨论】:

  • 此标签已在 Android Studio v1.5 中移除
  • @S1LENT WARRIOR 什么是延迟以及(例如)“speed:edge,latency:none”和“speed:full,latency:edge”之间的区别是什么?
  • @JohnnyFive 速度是指你的网络速度,延迟是指网络延迟。
【解决方案5】:

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

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

【讨论】:

  • 完美!回到边缘并以 9kbyte/s 的速度上传。
  • 太好了,这完全符合我目前的需要。在我的房间里,200KB 的上传几乎总是在 2G 上失败:)
  • 这家伙是真正的MVP。
  • 这里有一个很小但很关键的区别。当您将手机的网络从 3g 降级到 2g 时,您仍然拥有稳定的 2g 连接。在现实世界中,2g 连接不会稳定,并且会出现丢包。要模拟丢包的 2g,您可以使用@Kirill Kulakov 建议的解决方案,因为 IOS 允许您配置丢包百分比。仅供未来读者参考:)
【解决方案6】:

几岁了,但是嘿,我会用我的 Genymotion 万无一失的方法插话。

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

  • 安装它

  • 点击Proxy -> Throttle Settings

  • 设置您的 HTTP 限制速度

  • 关闭那个窗口

  • 点击Proxy -> Throttling开启油门

  • 打开一个 Genymotion 模拟器

  • 打开wifi设置

  • 长按启用的wifi连接

  • 点击Modify Network

  • 点击Show Advanced Options

  • Proxy设置为Manual

  • Proxy hostname设置为10.0.3.2

  • Port设置为8888

  • 点击Save

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

【讨论】:

  • 您从哪里获得 10.0.3.2 主机名?那是查尔斯的默认值吗?
  • hostname 应该是运行 Charles 的计算机本地网络地址
【解决方案7】:

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

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

最后,你会发现网络状态已经变慢了。

【讨论】:

  • 这是迄今为止唯一合适的解决方案:D
【解决方案8】:

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

通过三星 Galaxy S8 + Android 8.0.0 测试

进入设置 -> 连接 -> 移动网络 -> 在networkmode下您可以选择仅使用 2G3G 连接

【讨论】:

    【解决方案9】:

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

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

    2- 转到蜂窝网络

    3- 设置网络类型

    【讨论】:

      【解决方案10】:

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

      在 Mac 上打开 Wifi 共享,将您的计算机变成 Wifi 热点,将您的设备连接到此。使用 Netlimiter/Charles Proxy 或 Network Link Conditioner(您可能已经安装)来控制速度。

      欲了解更多详情并了解您应该在结帐时测试哪种速度:http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor-connections/

      【讨论】:

      • 使用“共享”首选项窗格,您可以与大多数其他人共享大多数任何连接。我将其设置为通过蓝牙共享我的 WiFi 连接。 (通过蓝牙连接选项直到设置完成后才出现在我的 Android 手机上。)
      • 安装网络链接调节器工具:stackoverflow.com/q/9659382
      【解决方案11】:

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

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

      【讨论】:

        【解决方案12】:

        我很惊讶没有人提到这一点。您可以通过蓝牙进行连接,并将它们分开十多米(或更少有障碍物)。你有一个真正的坏连接。无需微波炉,无需电梯,无需软件。

        【讨论】:

        • 这其实是一个很好的解决方案,除非你有一个非常好的蓝牙连接。为此需要使用旧设备。 :)
        【解决方案13】:

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

        【讨论】:

          【解决方案14】:

          Facebook 构建了一个名为 Augmented Traffic Control 的东西。来自他们的 GitHub 页面的简短摘要:

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

          • 带宽
          • 延迟
          • 丢包
          • 损坏的数据包
          • 数据包排序

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

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

          他们还为此写了一篇博文:https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/

          【讨论】:

            【解决方案15】:

            Android Studio AVD 更新:

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

            没有微波炉或电梯:)

            【讨论】:

              【解决方案16】:

              对于 Mac OS 用户,您可以使用可从 Apple 下载的 Network Link Conditioner。在mac上设置为AP,任何设备都可以连接。

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

              【讨论】:

                【解决方案17】:

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

                【讨论】:

                  【解决方案18】:

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

                  • 总体而言,在真实设备上进行测试没有多大意义,因为您必须经历很多事情才能使其正常工作。实现真正测试的唯一合乎逻辑的方法是让您的手机连接到低质量的蜂窝网络,如 EDGE,如果您的电话公司提供的话。您可以尝试通过在手机应用中拨打*#*#4636#*#* 来完成此操作

                  • 原来的 Android 模拟器太慢了,无法测试,而且没有比上面的解决方案更多。

                  最好的方法是使用Genymotion。是一款性能比原版AVD好很多的安卓模拟器,个人使用的版本是免费的。

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

                  在您的主机上运行一个模拟不良网络条件的代理服务器,例如 CrapifyToxiproxy(我只测试了前者),然后您就可以开始了。

                  更新:

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

                  【讨论】:

                    【解决方案19】:

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

                    【讨论】:

                    • 谢谢,但我正在尝试测试低网络连接性。例如。用于低 EDGE 信号或类似的东西。
                    • 啊。太糟糕了,您无法关闭 3G 并退回到 EDGE 漫游。至少,在我的手机上你不能。
                    【解决方案20】:

                    正如@VicVu Charles(或任何其他代理工具)所建议的那样,这是一种更简单的方法。但我想补充一点,您也可以使用您的设备执行此操作,而不仅仅是 genymotion 或其他模拟器。过程将是相同的:

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

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

                    【讨论】:

                      【解决方案21】:
                      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. 在应用程序中运行您的方案。

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

                      【讨论】:

                        【解决方案22】:

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

                        【讨论】:

                          【解决方案23】:

                          我发现 netlimiter4 是限制模拟器数据的最佳解决方案。 它通过体面的 gui 提供精细控制,并为您提供有关每个进程的数据吞吐量的图形反馈。目前处于免费测试阶段。 screenshot

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

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

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

                          【讨论】:

                            【解决方案24】:

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

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

                            【讨论】:

                              【解决方案25】:

                              我正在使用 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
                              

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

                              cat private.key public.key > cert.pem

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

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

                              【讨论】:

                                【解决方案26】:

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

                                【讨论】:

                                  【解决方案27】:

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

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

                                  【讨论】:

                                    猜你喜欢
                                    • 2010-11-08
                                    • 1970-01-01
                                    • 2023-04-06
                                    • 1970-01-01
                                    • 2010-09-07
                                    • 1970-01-01
                                    • 2011-06-18
                                    • 2010-09-20
                                    • 2013-02-20
                                    相关资源
                                    最近更新 更多