💨

ProxymanでAndroidのemulatorのhttps trafficをキャプチャした

2024/02/28に公開

iOSでのProxyman設定はとっても楽なんですが、Androidはちょっとだけ複雑だったので備忘録。

基本的な流れはAutomatic Script for Android Emulatorの通り。

1. Google APIs version, not the Google Play Store version のemulatorを用意

2. Override HTTP Proxy and Install the Certificate

scriptが用意されているのでそれを実行

$ bash /Applications/Proxyman.app/Contents/Frameworks/ProxymanCore.framework/Resources/install_certificate_android_emulator.sh all 192.168.0.1 9090 ~/.proxyman/proxyman-ca.pem

この時IP(上記の192.168.0.1)は現在のIPに変更する。
(ProxymanでCertificate Menu -> Install Certificate on iOS -> Physical Device -> Copy the IP string)

scriptを実行したら私は下記のerrorが出ました

❌ [ERROR] Could not root your Android Emulator!!!
Please make sure you're using Android Emulators with Google APIs (Android Emulator with Play Store is not supported)

scriptの中身を見ると、adb devicesで取得できる全てのdeviceに対して実行していることがわかりました。私の場合は実機でerrorが起こっていた。今回は目的のemulatorにてキャプチャできれば良いので、emulator idを指定できるようにした。

  1. 引数にemulatorIdを追加
mode=$1
ip=$2
port=$3
proxymanCert=$4

mode=$1
ip=$2
port=$3
proxymanCert=$4
emulatorId=$5
  1. emulatorIdが指定されている時、そのemulatorIdだけで実行するようにfor文の条件を変更(3箇所)
for device in `adb devices | awk '{print $1}'`; do

for device in $(adb devices | grep "$emulatorId" | awk '{print $1}'); do

これでemulator idを指定してもう一度script実行
(emulator idはadb devicesコマンドで取得できます)

$ bash /Applications/Proxyman.app/Contents/Frameworks/ProxymanCore.framework/Resources/install_certificate_android_emulator.sh all 192.168.0.1 9090 ~/.proxyman/proxyman-ca.pem emulatorId

成功!

Status: SUCCESS!
Please restart your app from Android Studio to take effect
Root Certificate is installed and trusted in Setting app -> Security -> Encryption & Credentials -> Trusted Certificate -> User Tab

3. Root Certificateをtrustする

成功時のmessageに出てきた通り
Setting app -> Security -> Encryption & Credentials -> Trusted Certificate -> User Tab

4. 記事の通りnetwork_security_config.xmlAndroidManifest.xmlを更新

この時network_security_config.xmlでdomainを指定する

5. Done!

runしたらキャプチャできるようになっているはず。

そんな面倒なことしなくて良いよとかあったらコメントにて教えてください!🥺

Discussion