Android アプリ開発において、特定のホスト名を IP アドレスに紐付けたい場合があります。この記事では、Android エミュレータの hosts ファイルを編集する方法について解説します。
前提条件
- Android Studio がインストールされていること
- Android エミュレータが作成されていること
- ADB (Android Debug Bridge) がインストールされていること
手順
1. 利用可能なエミュレータの確認
まず、利用可能な Android エミュレータ (AVD) の一覧を確認します。
emulator -list-avds
実行結果(例):
Pixel_9_Pro
2. 書き込み可能なシステムでエミュレータを起動
システムパーティションに書き込みができるようにエミュレータを起動します。
emulator -avd Pixel_9_Pro -writable-system &
-writable-system
オプションを使用することで、システムパーティションへの書き込みが可能になります。
&
は、プロセスをバックグラウンドで実行するためのものです。
3. hosts ファイルの書き込み権限を取得
Android 10 以上の場合
Android 10 以上では、セキュリティ強化のため、システムパーティションの書き込み権限を取得するプロセスが複雑になっています。
# ADB ルート権限を取得
adb root
# ステータスが device になるまで待つ
adb devices
# 再度ルート権限を確保
adb root
# エミュレータを再起動
adb reboot
# 再起動完了し device と表示されるまで待つ
adb devices
# システムパーティションを書き込み可能にリマウント
adb remount
# "remount succeeded" と表示されれば完了
Android 9 以下の場合
Android 9 以下では、比較的シンプルなコマンドで書き込み権限を取得できます。
# ADB ルート権限を取得
adb root
# システムパーティションを書き込み可能にリマウント
adb remount
# "remount succeeded" と表示されれば完了
4. hosts ファイルの編集
hosts ファイルを編集するには、以下の2つの方法があります。
方法1: ホスト PC で hosts ファイルを編集
# エミュレータから hosts ファイルを取得
adb pull /system/etc/hosts
# ローカルで hosts ファイルを編集
# お好みのエディタで hosts ファイルを開き、必要なホスト設定を追加
# 例: 192.168.1.100 myserver.local
# 編集した hosts ファイルをエミュレータに戻す
adb push hosts /system/etc/hosts
# エミュレータの hosts ファイルを確認
adb shell cat /etc/hosts
方法2: エミュレータ内で直接編集する
# エミュレータのシェルに入る
adb shell
# hosts ファイルの場所に移動
cd /system/etc
# hosts ファイルの内容を確認
cat hosts
# 直接編集する場合
vi hosts
# または
echo "192.168.1.100 myserver.local" >> hosts
注意事項
-
エミュレータ内での編集よりも、ホスト PC での編集の方が操作しやすい場合が多いです。
-
変更が反映されない場合は、権限の問題が考えられます。
adb remount
が正しく実行されているか確認してください。 -
設定変更後、一部のアプリケーションでは再起動が必要な場合があります。
-
エミュレータの特殊な IP アドレスと競合しないように注意してください。
-
10.0.2.2
- ホストマシンの localhost にアクセスするための IP -
10.0.2.3
- ホストマシンのプライマリ DNS サーバー
-
-
-writable-system
オプションは Android 10 以降のエミュレータで特に重要です。
まとめ
Android エミュレータの hosts ファイルを編集することで、特定のホスト名を IP アドレスに紐付けることができます。これは開発環境でのテストや、特定のサーバーへの接続をシミュレートする際に役立ちます。
特に Android 10 以上では、セキュリティ強化のため手順が複雑になっていますが、この記事で紹介した手順に従うことで、問題なく hosts ファイルを編集できます。