Androidの低ネットワーク接続をシミュレートする[終了]


228

ネットワーク接続が低い場合のアプリケーションをテストしたいと思います。エレベーターに立つことを除いて、これを行うための最良の方法は何ですか?携帯電話をアルミホイルで包んでみましたが、あまり役に立ちませんでした。

エミュレータではなく、実際のデバイスでテストする必要があります。


1
また、ファラデーケージを研究します。簡単に構築できます。
jww 2018年

回答:


119

これにはエミュレータを使用できます。このページをご覧ください:Android Emulator。次の2つの引数に注意してください。

  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またはsamsung電話でこれを行う方法はありますか?
マギー

2
私の推測では、唯一の方法は、ネットワーク速度を制御できるwi-fiルーター/ APを用意することです。これは、ネットワーク管理に関するものです。しかし、これは理論的には可能です。
inazaruk

78
私はエレベーターを使用しました:)しかし、みんなに感謝します
マギー

3
HTTP経由のレイテンシをシミュレートするには、ResponseCache.setDefault(new CacheResponse(){...})を使用して、そこにThread.sleep(200)呼び出しを配置し​​ます。これには、プログラムで制御され(つまり、1つのアクティビティのみ)、他のプロセスには影響しないという利点があります。ただし、より現実的なテストを行うには、ルーターに制限を設定するか、tc(busyboxから)コマンドを使用する必要があります。
2012年

112
なぜこれが答えとして受け入れられたのですか?質問には「エミュレーターではない」と明記されていました
Kyle Ivey

272

これは少しおかしく聞こえるかもしれませんが、電子レンジは電子レンジのシールドとして機能します。したがって、デバイスを電子レンジ内に置くと(デバイスが入っているときに電子レンジの電源を入れないでください!)、信号強度が大幅に低下します。エレベーターの中に立っているのは間違いなく...


3
わあ、オーブンに自分を合わせる方法を提案してもらえたら。また、オーブンは2.4 GHzをシールドするように設計されています。低い周波数では機能しない場合があります。IDK!
WindRider

2
電子レンジでは機能しませんでした(つまり、接続はまだまともでした)。ああ:|
yura

1
USBコードが接続されている場合、信号がそのようにこっそり入る可能性があります。コードがまったく接続されていない状態で電子レンジ内にある場合は、信号を受信しません。あなたは誤って電話をオフにすることができないので電話を溶かさないアルミホイルでもこの​​効果を達成できるはずです。
John Moore

電子レンジは、すぐに切断をトリガーする必要があり、それ以上のユーザーの操作を必要としない場合(これは私の特定のユースケースでした)、依然として良いオプションです。
Robert Yang

108

以来のiPhoneの開発者向けオプションがWiFiテザリングに適用され、あなたが持っているiPhone得ることができますiOS 6し、上記の(とするように設定されているuse for developmentsとしxcode)、目的のネットワークプロファイルをエミュレートするように設定し、あなたの接続のAndroidのホットスポットにデバイスを

ここに画像の説明を入力してください


10
これも私たちが到達した解決策でした。これが利用可能な最も健全なオプションであることは残念です。テザリングが機能するためには、iPhoneが3G /携帯電話接続を必要とすることを回答で注意してください。また、iPhoneユーティリティで必要なアップロード/ダウンロード速度は、テザリングされたデバイスに関して反転する必要があることに注意してください。
Kyle Ivey

鮮やかさ!これは、特にエミュレータで実行できるため、これが最良のオプションであることはばかげています。
karl 2014

iPhoneエミュレーターはWiFiをテザリングできますか?
キリルクラコフ2014

ありがとう。それを設定する方法が混乱しました。これが方法です-パーソナルホットスポットを許可する携帯電話プランの場合。iOS 7.12を使用しています1)[設定]-> [携帯電話]-> [個人用ホットスポット]に移動します2)個人用ホットスポットスイッチを右にスライドさせて緑色/オンにします(必要に応じてパスワードを変更できます)3)戻って戻って[開発者]までスクロールします4)Network Link Conditionerまで下にスクロールしてタップします。ENABLEを右にスライドさせて緑色にし、最後にプロファイルを選択します。「Very Bad Network」を選びました。これは私にping(2198ms)ダウンロード(0.05Mbps)アップロード(0.08Mbps)を与えました5)あなたのAndroidをホットスポットに接続してください!
Anthony De Souza

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 Speedし、Network Latency異なる速度や待ち時間などをシミュレートします

または、Additional command line options@ inazarukの回答に記載されているように、テキストフィールドにさまざまな引数を入力できます。

以下のスクリーンショットは、このRun Configuration画面がどのように表示されるかを示しています。

Android Studio Beta 0.8.6の実行構成画面

私はこの質問に答えるのが少し遅いことを知っていますが、これが同様の問題に直面している他の人に役立つことを願っています!

編集
日食を使用している人は、以下の@Abhiの回答を参照してください。


1
このタブはAndroid Studio v1.5で削除されました
Lou Morda 2016年

@ S1LENT WARRIORレイテンシーとは何ですか?(たとえば) "speed:edge、latency:none"と "speed:full、latency:edge"の違いは何ですか?
ジョニーファイブ

1
@JohnnyFiveの速度はネットワークの速度を表し、レイテンシはネットワークの遅延を意味します。
S1LENT WARRIOR

45

私はそれが古い質問であることを知っていますが...

現在、一部の電話には2Gのみを使用する設定があります。実際のデバイスで遅いインターネットをシミュレートするのに最適です。

ここに画像の説明を入力してください


パーフェクト!エッジツーバックおよび9kbyte / sでのアップロード。
JcV

これは私の現在のニーズに完全に適合しています。私の部屋では、2Gで200KBのアップロードがほとんどの場合失敗します:)
Deleplace 2017

3
この男は本当のMVPです。
edwoollard

33

歳ですがねえ、私はGenymotionを使ったフールプルーフな方法を取り入れます。

  • Charlesの無料トライアルをダウンロード:http : //www.charlesproxy.com/download/

  • インストールする

  • クリックProxy -> Throttle Settings

  • HTTPスロットル速度を設定する

  • そのウィンドウを閉じます

  • クリックProxy -> Throttlingしてスロットルを有効にします

  • Genymotionエミュレーターを開く

  • Wi-Fi設定を開きます

  • 有効なWi-Fi接続を長押しします

  • クリック Modify Network

  • クリック Show Advanced Options

  • 設定するProxyにはManual

  • 設定するProxy hostnameには10.0.3.2

  • 設定するPortには8888

  • クリック Save

そして今、あなたのネットワークは抑制されます!


10.0.3.2のホスト名はどこから取得しましたか?そのチャールのデフォルトですか?
18

ホスト名はCharlesローカルネットワークアドレスを実行しているコンピュータである必要があります
MaTriXy

16

実際のAndroidデバイスで低速のインターネット接続をテストすることもできます。

Samsung Galaxy S8 + Android 8.0.0でテスト済み

[設定] -> [ 接続] -> [ モバイルネットワーク] ->に移動し、networkmodeで2Gまたは3G 接続のみを使用するように選択できます


15

私はあなたの問題を解決する一つの戦略を持っています。プロキシのアプリケーションを使用して、ネットステータスを変更または監視できます。たとえば、チャールズ

Charlesのデフォルト設定を、私が投稿した次の写真のように変更する必要があります。

スロットル設定を開く

スロットルの設定

そして最後に、ネットステータスが低いペースになっていることがわかります。

前

後の設定


2
これは、これまでのところ唯一の適切な解決策である:D
egorikem

8

エミュレーターの接続が低い/悪い状態でアプリケーションをテストする簡単な方法:

ゴー実行 > 実行構成は、あなたの選択のAndroidアプリケーションを、とにそこに行くターゲット ]タブをクリックします。見てエミュレータの起動パラメータを。ここでは、ネットワーク速度とネットワーク遅延を簡単に変更できます。


8

見落とされているように見える実際のデバイスで低速をテストする簡単な方法があります。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 -接続/


「共有」設定パネルを使用すると、ほとんどすべての接続を他のほとんどの接続と共有できます。Bluetooth経由でWiFi接続を共有するように設定しました。(これがセットアップされるまで、Bluetoothオプションを介した接続は私のAndroidフォンに表示されませんでした。)
Doug Reeder

ネットワークリンクコンディショナーツールをインストールするには:stackoverflow.com/q/9659382
Pang

7

Android Studioでエミュレータを実行しているとき:

1-エミュレーターサイドバーの下部にある[設定]ボタンを押します

2-セルラーに移動

3-ネットワークタイプの設定

スクリーンショット


6

FacebookはAugmented Traffic Controlと呼ばれるものを作りました。GitHubページの簡単な要約:

Augmented Traffic Control(ATC)は、ネットワークの状態をシミュレートするツールです。これにより、デバイスのインターネットへの接続を制御できます。開発者はATCを使用して、さまざまなネットワーク条件にわたってアプリケーションをテストでき、高速ネットワーク、モバイルネットワーク、さらには深刻な障害のあるネットワークを簡単にエミュレートできます。制御できる接続の側面は次のとおりです。

  • 帯域幅
  • 待ち時間
  • パケットロス
  • 破損したパケット
  • パケットの順序付け

ネットワークトラフィックを形成できるようにするには、トラフィックをルーティングし、デバイスの実際のIPアドレス(ネットワークゲートウェイなど)を確認するデバイスでATCを実行する必要があります。これにより、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

誰もこれに言及しなかったのには驚きです。Bluetooth経由でテザリングし、10メートル以上(障害物がある場合はそれ以下)離すことができます。あなたは本当に悪い接続を持っています。電子レンジ、エレベーター、ソフトウェアは必要ありません。


非常に良好なBluetooth接続がない限り、これは実際には優れたソリューションです。これには古いデバイスを使用する必要があります。:)
android開発者

5

または、実際のデバイスで[設定]-> [モバイルネットワーク]-> [優先ネットワークタイプ]に移動して、使用可能な最も遅いものを選択します...もちろん、これは非常に制限されていますが、テスト目的では十分な場合があります。


3

Android Studio AVDでの更新:

  1. AVDマネージャーを開く
  2. AVDの作成/編集
  3. 詳細設定をクリックします
  4. ご希望の接続設定を選択してください

電子レンジやエレベーターはありません:)



2

ネットワーク接続がないか、遅いネットワーク接続だけをテストしますか?前者の場合は、Settings > Wireless & networks > Airplane mode機内モードに切り替えてオンにすることができます。これにより、実際のデバイスでネットワークが利用できないことをテストできます。


ありがとう、しかし私は低いネットワーク接続をテストしようとしていました。例えば。EDGE信号が低い場合などです。
マギー

ああ。3GをオフにしてEDGEローミングに戻ることはできません。少なくとも、私の電話ではできません。
デビッドコンラッド

2

[実行]> [実行構成]に移動し、Androidアプリケーションを選択して、[ターゲット]タブに移動します。図のように変更してください。

ここに画像の説明を入力してください


2

私はこの問題に半日も苦労していたが、ようやくこの解決策にたどり着いた。

  • 実際のデバイスでテストすることは、それを機能させるために多くのことを経験する必要があるため、全体的にあまり意味がありません。実際のテストを実現する唯一の論理的な方法は、電話会社がEDGEなどの低品質の携帯電話ネットワークに接続することです。*#*#4636#*#*電話アプリでダイヤルすることでこれを試すことができます

  • 元のAndroidエミュレーターはテストには遅すぎて、上記のソリューション以上のものを実現できません。

これを行う最良の方法は、Genymotionを使用することです。これは、元のAVDよりもはるかに優れたパフォーマンスを持つAndroidエミュレーターであり、個人用のバージョンは無料です。

Genymotionエミュレータ

Genymotionで仮想デバイスを作成したら、このチュートリアルを実行して、デバイスのプロキシを設定します。

CrapifyToxiproxy(前者のみをテストしました)などの悪いネットワーク状態をシミュレートするホストマシンでプロキシサーバーを実行し、問題ありません。

更新:

実際のデバイスでも同じ戦略を選択できることに気づきました。すぐに気付かないバカみたいだ。お使いのコンピューターでCrapifyプロキシを開始し、電話プロキシをコンピューターのローカルアドレスに設定するだけで、お使いの電話でインターネットが不安定になります。


1

@VicVu Charles(またはその他のプロキシツール)が提案するように、より簡単な方法です。ただし、genymotionや他のエミュレーターだけでなく、デバイスでもこれを実行できることを付け加えておきます。プロセスは同じです:

デバイス/エミュレータのwifi設定を変更して、手動プロキシを使用します。次に、プロキシのホスト名とポートを設定します。ホスト名をシステムのIPとして設定します(ifconfig / ifconfigを使用してPC / MacのIPを取得します)。genymotionのポート番号を設定します(charlesのプロキシ設定を確認してください)

PS:使用しているIPはおそらくプライベートIPであるため、デバイス/エミュレータは同じwifiを使用している必要があります。


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ストアで利用できるアプリがありますが、それらにはルートが必要です(どのように機能するかについてのアドバイスは提供できません-とにかくYMMVです)。

プレイストアで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

非常に古い投稿ですが、2セント追加します。私はこのハードウェア製品に非常に満足しています(https://apposite-tech.com/products/linktropy-mini/)に非常に、実際の多くの状況をシミュレートすることができました。長い間、エミュレータや機内モードで機能するさまざまな問題のトラブルシューティングに苦労していました。

ゼロ接続から限界接続のさまざまな段階まで、レイテンシ、パケット損失、およびビットエラーの程度が異なるいくつかの異なるプロファイルセットアップがあります。それの素晴らしいところは、エミュレータでアプリを再起動する必要なく、オンザフライでこれらを変更できることです。価格は私たちの店にとってそれだけの価値があり、それを使用するのは非常に簡単です。


0

私はAndroidTVネイティブデバイスでインターネットの速度を低下させる必要があり、読んだ内容に基づいて、最も適切な解決策はルーターでインターネットアクセスを直接制限することでした。
ルーターの設定に移動します(ローカルでは192.168.0.1のようになっています)-> DHCPサーバーを設定します(実行されていない場合)->デバイスのIPアドレスを選択し、制限を設定します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.