mitmproxyでAndroid Studioのエミュレーター上で動作するアプリの通信内容を確認する
フリーのHTTPSプロキシツールであるmitmproxyでAndroid Studioのエミュレーターの通信内容を確認できるようにする。
確認に使用したAndroid Studioのバージョンは以下の通り。
Android Studio Dolphin | 2021.3.1 Patch 1
1. mitmproxyのインストール
MacでHomebrewが入っている場合は以下のコマンドでインストールできる。
brew install mitmproxy
その他の環境でのインストールはこちら。
インストールしたら以下のコマンドで起動する。
mitmproxy
2. プロキシ設定
Android StudioのPreferencesの Tools > Emulator で下の赤枠のチェックボックスのチェックを外す(これをしないとエミュレーターでプロキシ設定のメニューが表示されないため)。
次にエミュレーターを起動させ、[...] をクリックする。
Settings > Proxy を開いて以下の設定を行う。
- Use Android HTTP proxy settings のチェックを外す。
- Manual proxy configuration を選択して以下の内容を指定する。
項目 | 値 |
---|---|
Host name | PCのIPアドレス |
Port number | 8080 |
3. 証明書のインストール
"If you can see this, traffic is not passing through mitmproxy." のようなメッセージが表示される場合は、プロキシ設定を見直す。
赤枠のAndroidの証明書をクリックする。
クリックすると証明書のインストール画面が表示される。
以下の内容で設定を行い、OKをクリックする(これで証明書がインストールされる)。
項目 | 値 |
---|---|
Certificate name | mitmproxy |
Credential Use | VPN and apps(デフォルトでOK) |
4. コードの変更
Android 7以降はデフォルトではユーザー証明書は使用できない。そのため、アプリ側の設定を変更する。
<network-security-config> <debug-overrides> <trust-anchors> <!-- Additionally trust user added CAs --> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config>
app/manifests/AndroidManifest.xml (debug)
のapplicationタグの中に以下のように属性android:networkSecurityConfig="@xml/network_security_config"
を追加する。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.cookpad.android.storetv"> <application android:networkSecurityConfig="@xml/network_security_config"> <!-- 省略 --> </application> </manifest>
上記の方法だとアプリごとに設定を変更する必要があるが、それを避ける方法もある(ここでは説明しない)。
5. ビルドして確認
ビルドしてエミュレーター上でアプリが立ち上がると、mitmproxyを起動しているターミナルで通信が確認できるようになっている。