Android エミュレータの hosts ファイルを編集

Android エミュレータの hosts ファイルを編集する方法です。
以下のような方法が考えられます。

  • (a) shell で hosts へ行を追加
  • (b) pull と push で hosts を変更

(a) shell で hosts へ行を追加

行を追加するだけなら以下のように shell を使うだけです。

adb remount しておかないと /system/etc/hosts ファイルを更新できずに Read-only file system のようなエラーメッセージが表示される点に注意。 (既に adb remount 済みの場合は不要)

hosts への行追加
> adb remount
remount succeeded

> adb shell "echo 10.0.2.2 server1 >> /system/etc/hosts"

/system/etc/hosts の内容を確認してみます。

hosts の内容確認
> adb shell cat /system/etc/hosts

127.0.0.1                   localhost
10.0.2.2 server1

10.0.2.2 はエミュレータから接続する際のホスト OS の IP アドレスなので、ping してみます。

ping の実行
> adb shell ping server1

PING server1 (10.0.2.2) 56(84) bytes of data.
64 bytes from server1 (10.0.2.2): icmp_seq=1 ttl=255 time=0.000 ms
・・・

remount に関して

adb remount する事で以下のように /system が rw で再マウントされます。

adb remount 前 (ro)
/dev/block/mtdblock0 /system ext4 ro,relatime,data=ordered 0 0
adb remount 後 (rw)
/dev/block/mtdblock0 /system ext4 rw,relatime,data=ordered 0 0

(b) pull と push で hosts を変更

次は hosts ファイルを編集する方法です。

エミュレータには vi 等のエディタが用意されていないようなので、pull で hosts ファイルを取得して、ホスト OS 側で hosts ファイルを編集し、push でエミュレータへ反映します。

まずは adb pull で hosts ファイルを取得します。

hosts を pull
> adb pull /system/etc/hosts

ホスト OS のカレントディレクトリへ pull された hosts ファイルを編集します。

hosts 変更例
127.0.0.1           localhost
10.0.2.2            server1

変更した hosts を push します。
まだ一度も remount していない場合は remount する必要があります。

hosts を push
> adb remount
・・・

> adb push hosts /system/etc/