LoginSignup
2
1

More than 5 years have passed since last update.

Android エミュレータ (AVD) で hosts による名前解決をさせるメモ

Posted at

AVD にぱっと DNS で名前解決できない開発用とかのサーバーへの名前解決をさせるためのメモ。

まず方法としましては以下がぱっと浮かびます:

  1. ローカルに Proxy サーバーを立ててそこを経由する
  2. Chrome の Developer Tools の Remote Devices からポートフォワードする
  3. /etc/hosts を設定する。

(1) ですが。まず、頻繁に変えるなら Proxy サーバーを立てて設定しておくと、変更時の反映が楽そうです。

(2) について。Chrome には Developer Tools にポートフォワード機能があり、
AVD 側の localhost の任意のポートを、
ホスト側からアクセスできる任意のポートにポートフォワードしてつなげることができます。

Settings.png

なので、この例では localhost:9999dev.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 28Pixel_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 経由で hostspush します。
(PLATFORM_TOOLS${HOME}/Library/Android/sdk/platform-tools とかです)

これで hosts での名前解決できるようになりました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1