Android Emulatorの仮想ネットワーク

投稿日:  更新日:

Androidエミュレーターが実行されると、仮想ネットワークが自動生成されます。

そして、エミュレーターは、仮想ネットワークに接続された一つのコンピュータとして扱われます。

仮想ネットワークは開発マシン(Android Studioが起動しているマシン)にも接続されてるので、エミュレーターから開発マシンへ、ネットワークを介した通信が可能です。

開発マシンへWebサーバーを構築すれば、サーバーと通信を行うアプリ開発が行えます。

開発者の机の上に、バックエンド(サーバ側)とフロントエンド(クライアント側)の開発環境が得られて、とても便利です。

※環境:Android Studio Otter | 2025.2.1
    Android emulator version 36.2.12.0

スポンサーリンク

仮想ネットワーク

仮想ネットワークは図のような構成になっています。

仮想ネットワークの構成

仮想ネットワークの構成についてGoogleのドキュメントに記載がありますが、API毎に異なっている場合があるようです。

特に、wlan(WiFi)とradio(3G通信)は「独自のドメインを持ったり/持たなかったり」します。

仮想DNS(10.0.2.3)、Emulator(10.0.2.15)、Alias(10.0.2.2)は、どのAPIでも確実に存在しています。

※「adb shell」で実行
※ API34の場合(Googleのドキュメントに最も近い構成)
※ 3G通信がeth(10.0.2.15)に割り当てられている

# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3404 TX bytes:3404

dummy0    Link encap:Ethernet  HWaddr 1a:fa:15:dd:08:38
          inet6 addr: fe80::18fa:15ff:fedd:838/64 Scope: Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 TX bytes:8352

eth0      Link encap:Ethernet  HWaddr 52:54:00:12:34:56  Driver virtio_net
          inet addr:10.0.2.15  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fec0::5054:ff:fe12:3456/64 Scope: Site
          inet6 addr: fe80::5054:ff:fe12:3456/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19 errors:0 dropped:0 overruns:0 frame:0
          TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2350 TX bytes:6313

wlan0     Link encap:Ethernet  HWaddr 02:15:b2:00:00:00  Driver mac80211_hwsim
          inet addr:10.0.2.16  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fec0::2d03:d321:266f:5d95/64 Scope: Site
          inet6 addr: fe80::d53e:5a4c:95c1:a454/64 Scope: Link
          inet6 addr: fec0::908f:6e20:efe6:91f2/64 Scope: Site
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1180 errors:0 dropped:0 overruns:0 frame:0
          TX packets:717 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1574228 TX bytes:75204

# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.0.0        *               255.0.0.0       U         0 0          0 eth0
10.0.2.0        *               255.255.255.0   U         0 0          0 wlan0
スポンサーリンク

特殊エイリアス

「10.0.2.2」は開発マシンのループバックの別名です。

ですので、10.0.2.2に対するアクセスは、開発マシンの127.0.0.1に対するアクセスと見なされます。

例えば、開発マシンでWebサーバーを起動し、エミュレーターのChromeブラウザーで10.0.2.2を参照すれば、Webサーバーに構築されたWebページを表示できます。

【開発マシンのChrome】

開発マシンでChrome実行
【エミュレーターのChrome】

エミュレーターでChrome実行
スポンサーリンク

エミュレーターインスタンス

エミュレータを複数起動すると、そのインスタンス毎に仮想ネットワークが構築されます。

エミュレーターインスタンスと仮想ネットワーク

各インスタンスは同じIP(10.0.2.15)を持ちますが、仮想Routerによりネットワークアドレス空間(10.0.2/24)が隔離されるため、通信の衝突は発生しません。

また、デフォルトの状態では、仮想ネットワークを跨いでインスタンスを参照(また通信)できません。

スポンサーリンク

エミュレーター間で通信

ネットワークリダイレクトを用いると、開発マシンを経由してエミュレータインスタンス間で通信が行えます。

ネットワークリダイレクトとは、「開発マシンのポートのトラフィックをエミュレータのポートへ転送する」ことです。

エミュレーター間で通信

リダイレクトはエミュレーターコンソールから設定できます。以下はリダイレクトの例です。

> telnet localhost 5554      ... エミュレーターコンソールへ接続
認証処理の案内が表示される!
OK
auth **********              ... 案内に従い認証
OK
redir add tcp:5000:6000      ... リダイレクトの設定
OK
redir list                   ... リダイレクトの確認
ipv4 tcp:5000  => 6000
OK
quit                         ... エミュレーターコンソールの終了

※5554はエミュレータインスタンスAのポート番号
※フォーマット:redir add <protocol>:<host-port>:<guest-port>

例のリダイレクトは、(1)開発マシンのPort:5000のトラフィックが、インスタンスAのPort:6000へ転送されます。

この状態で、(2)インスタンスBが10.0.2.2のPort:5000と通信を行うと、インスタンスAとBの通信が成立します。

(1)は「仮想ネットワークA」、(2)は「仮想ネットワークB」で行われる動作です。

スポンサーリンク

関連記事:

Android Emulator(Android Vertual Device)はD-Pad(Directional Pad)をエミュレートできます。 エミュレータにD-Padを装備する方法を紹介します。 ...
Android Emulator(Android Vertual Device)はデフォルトで画面上にNavigation Barを表示しません。 エミュレータの画面上にNavigation Barを表示する方法を紹介します。 ...
Android Emulator(AVD:Android Vertual Device)は、Play Storeアプリを実装したデバイスの構築が可能です。 このデバイスを用いれば、Google Playストアへ公開されているアプリをインストールしたり、アップデートしたり、エミュレータ上で出来るようになります。一般に販売されているAndroid端末と変わりません。 変わらないが故に、セキュリティに対して同等なリスクを持つことになります。 ですので、「デバイスの構築とエミュレータの起動は必要最小限にする」、「完全に信頼できるアプリのみインストールする」など、取り扱いに注意が必要です。 今回はAndroid EmulatorでPlay Storeアプリを使う方法をまとめます。 システムイメージのインストール デバイスの構築を行う前に、Play Storeアプリを実装したシステムイメージが必要です。 SDK Managerでインストールを行います。 図に示したイメージがPaly Storeアプリを実装しています。チェックを付ければ、インストール対象に登録されます。※図はAPI24の場合、インス ...
Android Emulator(AVD:Android Vertual Device)はTalkBackが使用できません。 これは、デフォルトでTalkBackがインストールされていないためです。 エミュレータにTalkBackをインストールし、使えるようにする方法を紹介します。 ※環境:Android Studio Koala | 2024.1.1 Patch 1     Emulator version 35.1.4-11672324     Android version 14.0 - API 34 ...
Androidエミュレータがブート時に用いるシステムイメージは、デフォルトで読み出し専用イメージです。 Androidシステムの起動後に、システムに深く関連するディレクトリやファイル(例えば、/etc/hosts)の書き込み(または書き換え)は出来ません。読み出しは出来ます。 書き込みを行いたい場合は、書き込み可能イメージを作成して、そのイメージをブートで用います。 書き込み可能イメージは、エミュレータの起動オプション「-writable-system」の指定で作成可能です。 Android StudioのDevice Managerからエミュレータを起動できますが、Android Studioは起動オプションを指定出来ません。昔は出来ていたと思うのですが... ですので、ここではAndroid Studioは使わずに、ターミナル等のコマンドラインからエミュレータを起動しています。 ※環境:Android Studio Otter | 2025.2.1     Android emulator version 36.2.12.0     Google APIs Inten x86 At ...
Androidエミュレータがブート時に用いるシステムイメージは、デフォルトで読み出し専用イメージです。 Androidシステムの起動後に、システムに深く関連するディレクトリやファイル(例えば、/etc/hosts)の書き込み(または書き換え)は出来ません。読み出しは出来ます。 書き込みを行いたい場合は、書き込み可能イメージを作成して、そのイメージをブートで用います。 書き込み可能イメージは、エミュレータの起動オプション「-writable-system」の指定で作成可能です。 Android StudioのDevice Managerからエミュレータを起動できますが、Android Studioは起動オプションを指定出来ません。昔は出来ていたと思うのですが... ですので、ここではAndroid Studioは使わずに、ターミナル等のコマンドラインからエミュレータを起動しています。 ※環境:Android Studio Otter | 2025.2.1     Android emulator version 36.2.12.0     Google APIs Inten x86 At ...
スポンサーリンク