LoginSignup
17
25

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
    
  2. パスを追加
    AndroidStudio一式をデフォルトでインストールした場合、以下のパスになっていると思います。

    .bash_profile
    export PATH="$PATH:$HOME/Library/Android/sdk/platform-tools"
    export PATH="$PATH:$HOME/Library/Android/sdk/emulator"
    
  3. 再読込み

    $ source ~/.bash_profile
    

エミュレーターを設定する

  1. 対象エミュレーターを選定

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

    $ emulator -avd Pixel_2_API_28 -writable-system
    emulator: WARNING: System image is writable
    emulator: INFO: boot completed
    
  3. rootを取得
    前述の「書込み可能状態でエミュレーターを起動」を行うとコマンドの結果がフォアグラウンドになるので、以降のコマンドはもう1つコンソールを立ち上げて実行します。(バックグランド実行でも良いですね。)

    $ adb root
    restarting adbd as root
    
  4. /systemを書込み可能にして再マウント

    $ adb remount
    remount succeeded
    
  5. hostsに書込む
    AndroidシミュレーターからmacOSのローカルホストへ接続するにはIPアドレスに10.0.2.2を指定します。127.0.0.1ではありません。ご注意ください:construction:

    $ adb shell "echo 10.0.2.2 devnokiyo.example.com >> /system/etc/hosts"
    

    なお、上記の例では追記しか出来ないので、一度AndroidエミュレーターのhostsファイルをmacOSで編集してから、Androidエミュレーターへ配置する方法も有用だと思います。

    1. Androidシミュレーターのhostsを取得

      $ adb pull /system/etc/hosts .
      
    2. hostsを編集

    3. hostsをAndroidシミュレーターへ配置

      $ adb push .hosts /system/etc/hosts
      

    この時点でChromeを起動または再起動すると反映されていることが確認できます:clap::clap::clap:
    02.png

  6. 非rootに変更

    $ adb unroot
    restarting adbd as non root
    
  7. 再起動

    $ 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