[Android] Android Virtual Device の /etc/hosts を書き換えて、Vagrant Virtual Machine へ接続する
AVD から VM に名前解決して接続する設定。
Android Studio 3.1.2
Build #AI-173.4720617, built on April 14, 2018
JRE: 1.8.0_152-release-1024-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.13.4
Contents
前提
Vagrantfile に以下のような public_network
の設定が追加されているものとします。
config.vm.network :public_network, ip: "10.0.1.100", bridge: "en1: Wi-Fi (AirPort)"
ADB (Android Debug Bridge) にパスを通しておきます。
% adb version
Android Debug Bridge version 1.0.39
Version 0.0.1-4500957
Installed as /Users/foo/Library/Android/sdk/platform-tools/adb
あなたの利用しているホスト OS(Mac) に以下のような /etc/hosts
が設定されている、期待するものとします。
192.168.33.10 foo.local
10.0.1.100 bar.public
hosts ファイルを push / pull するパターン
Android Studio を起動し、AVD Manager から必要なデバイスを作成します。
作成したデバイス名を確認します。
% emulator -list-avds
Nexus_5X_API_23
バーチャルデバイスを書き込み可能なモードで起動します
% $HOME/Library/Android/sdk/tools/emulator -avd Nexus_5X_API_23 -writable-system
バーチャルデバイスの emulator 名を確認します。
% adb devices
List of devices attached
emulator-5554 device
バーチャルデバイス上の hosts ファイルを取得します。
% adb -s emulator-5554 pull /system/etc/hosts ~/Desktop/
/system/etc/hosts: 1 file pulled. 0.0 MB/s (56 bytes in 0.004s)
取得した ~/Desktop/hosts
ファイルに設定を追記します。
この場合は、ローカルの VM を指定した例。
192.168.33.10 foo.local
追記した ~/Desktop/hosts
ファイルをバーチャルデバイスに戻します。
% adb remount
remount succeeded
% adb -s emulator-5554 push ~/Desktop/hosts /system/etc/hosts
/Users/foo/Desktop/hosts: 1 file pushed. 0.0 MB/s (85 bytes in 0.046s)
hosts 情報を書き込むパターン
前述の手順では、バーチャルデバイスの hosts ファイルを pull
, push
していました。
直接 echo
してしまっても良いのではと考えたら、先人が居られました。
バーチャルデバイス上の hosts ファイルを取得せず、直接書き込みます。
pull
, push
をせず、shell
をする。
% $HOME/Library/Android/sdk/tools/emulator -avd Nexus_5X_API_23 -writable-system
% adb remount
% adb shell "echo 10.0.1.100 bar.public >> /system/etc/hosts"
% adb shell cat /system/etc/hosts
補遺
本稿と直接関係しないが、実機で Chrome Dev Tools を利用する場合。