Androidのエミュレーターから自身のPC(localhost)へ接続

Androidでサーバーと通信するアプリを作ることはよくあると思います。

そのような場合、開発段階ではサーバー側のシステムもローカルPC上に作り、エミュレーターからそこへHTTP接続するというような、1台のPCの中でAndroidアプリもサーバー側も動作を確認したいケースは多いと思います。

 

 

そんな時、サーバーへ接続する為のアドレスはどのようになるのでしょうか?

http://localhost/ではうまくいかない

このようなケースでまず思い付くのは http://localhost/ を使うという事だと思いますが、これでは狙い通りに動きません。ホスト名ではなくIPアドレスで http://127.0.0.1/ としても結果は変わりません。

http://10.0.2.2/を使おう

Android Studioのユーザーガイドによると、エミュレーターのネットワークアドレスは以下のように定義されています。

参考:https://developer.android.com/studio/run/emulator-networking.html

 

 

Network Address Description
10.0.2.1 Router/gateway address 
10.0.2.2

Special alias to your host loopback interface

(i.e., 127.0.0.1 on your development machine)

10.0.2.3

First DNS server

10.0.2.4

10.0.2.5

10.0.2.6

Optional second, third and fourth DNS server (if any)

10.0.2.15

The emulated device network/ethernet interface

127.0.0.1

The emulated device loopback interface

 

これを見ると 127.0.0.1(localhost) はエミュレーター自身を指していて、通常127.0.0.1で使うような開発マシンは「10.0.2.2」ですよと書かれています。

 

というわけで、自身のPCへ接続したい場合は http://10.0.2.2/ を使ってアクセスしましょう。