💨
ProxymanでAndroidのemulatorのhttps trafficをキャプチャした
iOSでのProxyman設定はとっても楽なんですが、Androidはちょっとだけ複雑だったので備忘録。
基本的な流れはAutomatic Script for Android Emulatorの通り。
Google APIs version, not the Google Play Store version
のemulatorを用意
1. 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を指定できるようにした。
- 引数にemulatorIdを追加
mode=$1
ip=$2
port=$3
proxymanCert=$4
↓
mode=$1
ip=$2
port=$3
proxymanCert=$4
emulatorId=$5
- 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
network_security_config.xml
とAndroidManifest.xml
を更新
4. 記事の通りこの時network_security_config.xml
でdomainを指定する
5. Done!
runしたらキャプチャできるようになっているはず。
そんな面倒なことしなくて良いよとかあったらコメントにて教えてください!🥺
Discussion