17
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidエミュレーターのhostsを書換えてローカルサーバーへ接続する

Posted at

前置き

小ネタになります:pushpin:
macOSにローカルサーバー立ててiOSシミュレーターとAndroidエミュレーターからアクセスする開発環境を構築しています。iOSシミュレーターはmacOSのhostsを認識しているようでしたが、Andoridエミュレーターでは別途hostsを設定する必要がありました。開発環境はmacOSを想定しています。

adb/emulatorのパスを通す

必須ではありませんがコンソールの可読性も上がりますのでパスを通しておきます。

  1. .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"
  1. 再読込み

$ source ~/.bash_profile


# エミュレーターを設定する
1. 対象エミュレーターを選定

    ```bash
$ emulator -list-avds
Pixel_2_API_28
  1. 書込み可能状態でエミュレーターを起動

$ 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
  1. /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:

02.png

  1. 非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でした。

ご参考になれば幸いです。

17
25
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
17
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?