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 Atom System Image
/etc/hostsの書き換え
hostsの書き換えは、以下の手順で行います。
> emulator -writable-system -avd AVD名 & # 書き込み可能イメージで起動 INFO | Android emulator version 36.2.12.0 (build_id 14214601) (CL:N/A) ... WARNING | System image is writable ... ### 起動を待つ > adb root # root権限でエミュレータへ接続 restarting adbd as root > adb remount # ストレージを再マウント remount succeeded > adb pull /system/etc/hosts # hostsをローカルへ読み出し /system/etc/hosts: 1 file pulled, 0 skipped. 0.0 MB/s (56 bytes in 0.012s) > vi ./hosts ### hostsを修正(ここではviを使用、お好みのエディタを使って下さい!) > adb push ./hosts /system/etc/hosts # hostsをエミュレータへ書き込み ./hosts: 1 file pushed, 0 skipped. 0.0 MB/s (56 bytes in 0.003s)
> adb shell "cat /etc/hosts"
127.0.0.1 localhost
::1 ip6-localhost
10.0.2.2 mywebsite.example.com
注意1:Google Play System Image
システムイメージ「Google Play XXX System Image(Google Play対応)」は、「adb root」により、root権限でエミュレータへ接続する設定が出来ません。
システムイメージは「Google APIs XXX System Image」を利用して下さい。
注意2:システムイメージは一時的なコピー
「書き込み可能イメージ」は「読み出し専用イメージ」の一時的なコピーです。
エミュレータ起動オプション「-writable-system」の指定で、初回にコピーされます。
以降は、この起動オプションを指定し続ける限り、書き込み可能イメージでブートします。
そして、起動オプション無しで起動した時点で、一時的なコピーは破棄されてしまいます。書き込みイメージを用いたブートは出来なくなります。
元に戻したければ、「Wipe Data」等でエミュレータのデータを初期化して下さい。
※エミュレータ起動オプションの詳細は「高度なオプション」を参照
関連記事:
