Android エミュレータ (AVD) で hosts による名前解決をさせるメモ
AVD にぱっと DNS で名前解決できない開発用とかのサーバーへの名前解決をさせるためのメモ。
まず方法としましては以下がぱっと浮かびます:
- ローカルに Proxy サーバーを立ててそこを経由する
- Chrome の Developer Tools の Remote Devices からポートフォワードする
-
/etc/hosts
を設定する。
(1) ですが。まず、頻繁に変えるなら Proxy サーバーを立てて設定しておくと、変更時の反映が楽そうです。
(2) について。Chrome には Developer Tools にポートフォワード機能があり、
AVD 側の localhost
の任意のポートを、
ホスト側からアクセスできる任意のポートにポートフォワードしてつなげることができます。
なので、この例では localhost:9999
は dev.api.org:80
につながるようになります。
ただ仮想ホストへのアクセスの場合は、
Host
ヘッダーを自分で指定する必要があります。
(もしコードに変更を加えられるのであれば、Retrofit2 の Interceptor
でヘッダーを指定するとかできますが、ちょっとめんどうですね)。
(3) の /etc/hosts/
は、ホストと IP の対応を手軽に自分のマシン内で名前解決するのに便利ですね。今回はこれを使います:
まず AVD を書き込み可能にする
${SDK_PATH}/emulator/emulator -writable-system -avd "${AVD_NAME}" &
SDK_PATH
は Android SDK ホームへのパス。
mac だったら ${HOME}/Library/Android/sdk/
とかですね。
AVD_NAME
は起動したい AVD の名前です。
スペースは _
に置き換えます。
(例: Pixel 2 XL API 28
→ Pixel_2_XL_API_28
)
これで AVD が書き込み可能で起動します。
(Play Store が有効だと無理っぽいです)。
ホストの hosts
を AVD に push する
cd ${PLATFORM_TOOLS}
./adb root
./adb remount
./adb pull /system/etc/hosts /tmp
cat /etc/hosts >> /tmp/hosts
./adb push /tmp/hosts /system/etc/hosts
で、今起動中の AVD に対して adb
経由で hosts
を push
します。
(PLATFORM_TOOLS
は ${HOME}/Library/Android/sdk/platform-tools
とかです)
これで hosts
での名前解決できるようになりました。
Author And Source
この問題について(Android エミュレータ (AVD) で hosts による名前解決をさせるメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/mangano-ito/items/08e8352155ac863e6eb9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .