前置き
小ネタになります
macOSにローカルサーバー立ててiOSシミュレーターとAndroidエミュレーターからアクセスする開発環境を構築しています。iOSシミュレーターはmacOSのhostsを認識しているようでしたが、Andoridエミュレーターでは別途hostsを設定する必要がありました。開発環境はmacOSを想定しています。
adb/emulatorのパスを通す
必須ではありませんがコンソールの可読性も上がりますのでパスを通しておきます。
-
.bash_profileを編集
$ vi ~/.bash_profile
1. パスを追加
AndroidStudio一式をデフォルトでインストールした場合、以下のパスになっていると思います。
```bash:.bash_profile
export PATH="$PATH:$HOME/Library/Android/sdk/platform-tools"
export PATH="$PATH:$HOME/Library/Android/sdk/emulator"
-
再読込み
$ source ~/.bash_profile
# エミュレーターを設定する
1. 対象エミュレーターを選定
```bash
$ emulator -list-avds
Pixel_2_API_28
-
書込み可能状態でエミュレーターを起動
$ emulator -avd Pixel_2_API_28 -writable-system
emulator: WARNING: System image is writable
emulator: INFO: boot completed
1. rootを取得
前述の「書込み可能状態でエミュレーターを起動」を行うとコマンドの結果がフォアグラウンドになるので、以降のコマンドはもう1つコンソールを立ち上げて実行します。(バックグランド実行でも良いですね。)
```bash
$ adb root
restarting adbd as root
-
/systemを書込み可能にして再マウント
$ adb remount
remount succeeded
1. hostsに書込む
AndroidシミュレーターからmacOSのローカルホストへ接続するにはIPアドレスに```10.0.2.2```を指定します。```127.0.0.1```ではありません。ご注意ください:construction:
```bash
$ adb shell "echo 10.0.2.2 devnokiyo.example.com >> /system/etc/hosts"
なお、上記の例では追記しか出来ないので、一度AndroidエミュレーターのhostsファイルをmacOSで編集してから、Androidエミュレーターへ配置する方法も有用だと思います。
1. Androidシミュレーターのhostsを取得
```bash
$ adb pull /system/etc/hosts .
1. hostsを編集
1. hostsをAndroidシミュレーターへ配置
```
$ adb push .hosts /system/etc/hosts
この時点でChromeを起動または再起動すると反映されていることが確認できます:clap::clap::clap:
-
非rootに変更
$ adb unroot
restarting adbd as non root
1. 再起動
```bash
$ adb reboot
トラブルシューティング
API28の他、API27でも試してみましたが、筆者の環境では不安定になることがあります。
「書込み可能状態でエミュレーターを起動」を行うとコマンドの結果が、途中から以下のように表示される続けることがあります。
WARNING: AsyncSocketServer.cpp:99: Error when accepting host connectionError message: Bad file descriptor
:
:
完全な解決策がわかっていないのですが、AndroidStudioやAndroidエミュレーターを再起動すると解決します。「解決」というより仕切り直しの意味合いが多いですね。
参考
Android Emulatorのhostsを書き換える方法
Android端末のhostsを書き換える方法
Androidのエミュレーターから自身のPC(localhost)へ接続
終わりに
筆者はiOS、Androidの順で開発を進めており先入観が2つありました。
- AndroidエミュレーターにもmacOSのhostsが適用されているはず
→ されてませんでした。 - hostsにローカルIP(ループバック)
127.0.0.1
を追加する
→10.0.0.22
でした。
ご参考になれば幸いです。