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 エミュレータ名 & # 書き込み可能イメージで起動 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 shell avbctl disable-verification # AVBの無効化 Successfully disabled verification. Reboot the device for changes to take effect. > adb disable-verity # dm-verityの無効化 using overlayfs Successfully disabled verity Now reboot your device for settings to take effect > adb reboot # 端末の再起動 ### 再起動を待つ > 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.010s) > vi ./hosts ### hostsを修正(ここではviを使用、お好みのエディタを使って下さい!) > adb push hosts /system/etc/hosts # hostsをエミュレータへ書き込み hosts: 1 file pushed, 0 skipped. 0.0 MB/s (87 bytes in 0.003s)
> adb shell "cat /etc/hosts"
127.0.0.1 localhost
::1 ip6-localhost
10.0.2.2 mywebsite.example.com
確認付きブート
Android端末はブートする間に様々なステージを遷移していきます。
ステージが遷移するとき、各ステージでは実行を引き渡す前に、次のステージの整合性と信頼性を検証し、問題があればエラーを生成します。
これを「確認付きブート」と呼びます。
AVB(Android Verified Boot )とdm-verityは、この整合性と信頼性を検証するツールです。
dm-verity:ルートキットの改ざんと不正使用を検証
Android 4.4(API 19)で追加
AVB :全パーティションの改ざんと不正使用を検証
Android 8.0(API 26)で追加
※ルートキット:root権限で動作するツール群
※生成されたエラーの扱い(例:Bootを拒否、警告出力のみ)はAPIで異なる
/etc/hostsの書き換えはアンドロイドシステムの変更に当たり、整合性と信頼性を損ねる可能性のある行いです。
ですので、AVBとdm-verifyがエラーを生成します。
注意1:Google Play System Image
システムイメージ「Google Play XXX System Image(Play Store対応)」は、「adb root」により、root権限でエミュレータへ接続する設定が出来ません。
システムイメージは「Google APIs XXX System Image」を利用して下さい。
注意2:システムイメージは一時的なコピー
「書き込み可能イメージ」は「読み出し専用イメージ」の一時的なコピーです。
エミュレータ起動オプション「-writable-system」の指定で、初回にコピーされます。
以降は、この起動オプションを指定し続ける限り、書き込み可能イメージでブートします。
そして、起動オプション無しで起動した時点で、一時的なコピーは破棄されてしまいます。書き込みイメージを用いたブートは出来なくなります。
元に戻したければ、「Wipe Data」等でエミュレータのデータを初期化して下さい。
※エミュレータ起動オプションの詳細は「高度なオプション」を参照
関連記事:
