Android開発で3G回線速度を再現する

ネットワークを利用するAndroidアプリを開発していると、回線速度が遅い場合の処理を気にしない訳にはいかなくなります。

開発中はWi-Fiで接続しているから気付かなかった問題が、SIMの入った実機では頻発するなんてこともあります。

通信の内容確認と、速度の制限のために、PCのProxyを経由して通信するようにします。Wi-FiのProxy設定はICS(4.0)から可能です。

設定済みのネットワークであれば、長押しして設定画面を表示します。

image

プロキシ設定を手動にして、ホスト名にPCのIPアドレスを入力します。

image

PC側にはFiddlerを入れます。

Fiddler側の設定はこちらにまとめています。
Androidエミュレータの通信をFiddlerで見る : blog.loadlimit – digital matter –

Android実機からFiddler経由で接続できるようになったら、速度制限を試してみます。

メニューのRulesから、Performance→Simulate Modem speedsにチェックを入れると、「モデムの回線速度」をエミュレートできます。

WS000027

ただ、モデムなので遅くて最近のネットワークとしては使い物になりません。動画ダウンロードに数時間かかるとかザラです。

ここから速度を調整します。

Rules→Customize Rulesを開きます。デフォルトではメモ帳でJSファイルが開きます。

image

request-trickle-delayという行を探します。

		if (m_SimulateModem){
			// Delay sends by 300ms per KB uploaded.
			oSession["request-trickle-delay"] = "300";
			// Delay receives by 150ms per KB downloaded.
			oSession["response-trickle-delay"] = "150";
		}

ここで1KBごとに実行する遅延時間を設定することができます。request-trickle-delayがアップロードの遅延時間、response-trickle-delayがダウンロードの遅延時間です。数字が小さいほど高速になります。

デフォルトの設定ではアップロードが1KBで300msの遅延なので、3.33KB/s、27.3kbpsくらいです。ダウンロードは54.6kbpsくらいです。1024*(1000/150)*8/1000=54.6133..(kbps)ですね。

例えば好意的に見て3Gが1500Kbpsで上下通信できるとすれば、delay値は5.33、小数を切り捨てて「5」としておきます。5msの遅延ではあまり違いがわからないかもしれないので、僕は単純にそれぞれ30と15にしています。

編集が終わったらJSファイルを保存して閉じます。これで遅いネットワークが再現できます。

Fiddlerを使えば、他にもAutoResponder機能で、レスポンスを全部定義してサーバ代わりにしたり、通信自体にブレークポイントを設定してネットワークが応答しなかった場合の処理の確認も可能です。

追記(2013/06/13)

エミュレータの場合はnetspeedオプションをつけることで、速度を指定できます。

emulator.exe -netspeed umts

とすれば、3G回線速度がエミュレーションされます。

その他の速度についてはこちら。

Using the Emulator | Android Developers

ディレイも設定できるので、

emulator.exe -netdelay umts -netspeed umts

という感じで起動すれば良いかと思います。


タグ: , ,

新しく会社作りました!

コメント / トラックバック 1 件

  1. […] Fiddlerでネットワーク帯域のエミュレートをしながらダウンロードを調査してみました。Fiddlerでのネットワーク帯域の制限方法はココが参考になります(→Android開発で3G回線速度を再現する)。近頃のモバイルネットワークは高速ですが、今回は下りが大体512kbpsぐらいに制限して調査してみます。 […]

コメントをどうぞ