9
6

More than 3 years have passed since last update.

Android Emulatorでnet::ERR_CONNECTION_REFUSEDが出た時の対処法

Last updated at Posted at 2020-02-16

WebViewでlocalhostを参照する実装をAndroid Emulatorで見る際、net::ERR_CONNECTION_REFUSEDというエラーが表示された。
スクリーンショット 2020-02-16 18.45.52_.png

接続先はhttp://localhost:3000/を指定していたのだが、Android Emulatorは仮想環境上で実行されているため、ホストマシンで直接実行しているローカルサーバーには接続できない模様。

エミュレータの各インスタンスは、仮想ルーターおよびファイアウォール サービスの背後で実行されます。この仮想ルーターおよびファイアウォール サービスによって、各インスタンスは開発マシンのネットワーク インターフェースと設定、そしてインターネットから分離されます。エミュレートしたデバイスでは、開発マシンやネットワーク上のその他のエミュレータ インスタンスは認識されず、イーサネット経由でルーター / ファイアウォールに接続されていることだけが認識されます。

各インスタンスの仮想ルーターは、10.0.2/24 ネットワーク アドレス空間を管理します。ルーターによって管理されるすべてのアドレスは、10.0.2.xx の形式を持ちます(xx は数字)。この空間内のアドレスは、エミュレータ / ルーターによって次のように事前に割り当てられます。

Android Emulator のネットワークを設定する  |  Android デベロッパー  |  Android Developers

Android Emulatorからホストマシンのローカルループバックアドレス(127.0.0.1)を参照するためには、ネットワークアドレス10.0.2.2を使用する必要がある。

ネットワーク アドレス 説明
10.0.2.1 ルーター / ゲートウェイ アドレス
10.0.2.2 ホスト ループバック インターフェースへの特殊エイリアス(開発マシンの 127.0.0.1 など)
10.0.2.3 1 番目の DNS サーバー
10.0.2.4 / 10.0.2.5 / 10.0.2.6 オプションの 2 番目、3 番目、4 番目の DNS サーバー(存在する場合)
10.0.2.15 エミュレートしたデバイスのネットワーク / イーサネット インターフェース
127.0.0.1 エミュレートしたデバイスのループバック インターフェース

WebViewの接続先をhttp://10.0.2.2:3000/に指定することで、localhostへアクセスすることができた。
スクリーンショット 2020-02-16 18.32.11_.png

これまでAndroid Emulator上でlocalhostを参照する機会がなかったため、大変勉強になった。

9
6
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
9
6