Androidエミュレータの通信内容をCharlesで確認する

2018/07/21

Charlesは通信のモニタリングツールの定番です。

SSLに対応していたり通信内容の書き換えができたりと一通りの機能を備えつつ、この手のツールにありがちな複雑さが比較的抑え気味なのが人気の秘密でしょうか。

有償で個人ライセンスは50USD。安くはないですが、それなりの頻度で使うならライセンス買って損はないかと。

そんなCharlesでAndroidの通信内容をキャプチャしたい、という場面に遭遇しました。CharlesをインストールしたPCとAndroid端末が同一NW上にいるなら実機の通信をキャプチャできるんですが、残念ながら別NWな環境だったので代わりにエミュレータでキャプチャすることに。

ざっと調べてみたところネットの情報がまちまち。Charlesやエミュレータのバージョンによってちょっとずつ違うみたいです。

なので現時点だとどうなるか実際に試してみました。OSはWindows 10、エミュレータはAPI 23 (Android 6.0)です。

Charlesの準備

Charlesをインストールして起動します。

起動したらProxy -> Windows Proxyのチェックを外しておきます。

続いてSSLプロキシ設定。

  • Proxy > SSL Proxying Settings
  • SSL Proxyingタブを選択
  • Enable SSL Proxying にチェックを入れる
  • Addボタンを押してダイアログを開く
  • Hostに*を入力してOKを押す
  • OKを押してSSL Proxying Settingsを閉じる

SSLプロキシ設定を忘れるとSSLの通信内容が見られません。

最後にHelp -> Local IP Addressを開いてWindowsマシンのIPアドレスを控えておけばCharlesの準備は完了。

エミュレータ側の準備

エミュレータを起動したら日本語利用向けに設定変更しておきます。英語のままでも問題ないですけど。

  • 言語を日本語に
  • タイムゾーンの自動設定を解除し「日本標準時」を選択
エミュレータ

エミュレータ

次にエミュレータの設定画面からProxyを設定します。

  • エミュレータの設定画面を開く (右下三点リーダー選択)
  • Settingsを選び、Proxyタブを選択
  • Proxyの設定を行う
    • Use Android Studio HTTP Proxy settings のチェックを外す
    • Manual Proxy Configurationを選択
    • Host name にWindowsマシンのIPアドレスを入力
    • Port numberに8888を入力
    • APPLYを選択
Settings - Proxyタブ

Settings - Proxyタブ

最後にブラウザで http://charlesproxy.com/getssl/ にアクセスしてcharlesの証明書をインストールします。いろいろダイアログとか出てきますが、画面の指示に従って進めば大丈夫。

証明書インストールダイアログ

証明書インストールダイアログ

これでエミュレータの通信内容をCharlesで見られるようになりました。

SettingsのProxy設定はエミュレータ全体で共通のようなので、charlesを使い終わったら忘れずに解除しておきましょう。

補足

なぜAndroid 6.0?

CharlesのWebサイト

As of Android N, you need to add configuration to your app in order to have it trust the SSL certificates generated by Charles SSL Proxying.

という記載があります。Android Nからはアプリに手を入れないとSSL通信の中身はチェックできなくなったようです。

なので、Android 6.0のエミュレータを使っています。

IPアドレスじゃなくホスト名で表示したい

今回の手順だとCharles上ではホスト名ではなくIPアドレスで表示されます。ちょっと不便。

エミュレータの設定画面でProxyを設定するのではなく、エミュレータ側でProxyを設定するとホスト名で表示されるようです。

  • 設定を開く
  • 無線とネットワークの「もっと見る」 ⇒ モバイルネットワーク ⇒ アクセスポイント名 ⇒ T-Mobile US と辿っていく
  • 「プロキシ」にWindowsマシンのIPアドレス、「ポート」にポート番号(8888)を入力
  • 右上三点リーダ(?)を選択
  • 保存を選択

Proxyのオンオフがちょっと面倒になるので、通信先が限られているならエミュレータの設定画面で設定するほうが便利かな、と思います。

参考URL




関連(するかもしれない)記事


おススメ