これは自分のために残しておく記事です。
だから少し分かりにくい説明もあるかもしれません。
やりたいことは次のようなこと
- xamppなどlocalhostの開発環境がある
- Androidエミュレータからそれを表示したい
- でも普通にアクセスしても表示できない
- どうやらhostsファイルの編集が必要みたい
この手順が分かったのでメモしておきます。
このページの目次
まず想定するローカルの開発環境について
ここではローカルで開発してるとします。
僕の場合はこういう環境で開発してました。
- XAMPPを使ってローカル開発
- バーチャルホスト機能を有効化
バーチャルホスト機能を有効化しているため、ローカル環境では hogehoge.com のようなバーチャルなドメイン名でアクセスできます。
問題はAndroidでそのサイトを確認したかった時です。たとえエミュレータが開発PCで動いていても異なるhosts環境だからアクセスできません。
それが困りました。
どうやらhostsファイルの編集が必要らしい
ググっていくとhostsファイルの設定が必要みたい
▼ hostsファイルとは
まず、読み方は「ホスツファイル」です。これはそのままです。ファイルとついていることから、何かのファイルであることは何となく予想できますね。一言でいうと、「ホスト名とIPアドレスの対応を書いておくファイル」です。「このホスト名が入力されたら、このIPアドレスになるよ」というような内容が書かれています。
引用元 : https://glodia.jp/blog/10365/#hosts%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%81%AF%EF%BC%9F
▼ hostsファイルの例(Windows)
1 2 3 4 |
102.54.94.97 rhino.acme.com 38.25.63.10 x.acme.com 127.0.0.1 localhost ::1 localhost |
このようにIPとホスト名の対応関係の定義
そしてhostsファイルはAndroid・iPhoneのようなスマホ端末にもしっかり存在してます。もちろんAndroidエミュレータにもhostsファイルがあります。
このhostsファイルの設定が必要だったんです。
具体的な設定方法は次から説明していきます。
Androidエミュレータでhostsファイル編集の方法手順
1.APIレベル28以下でエミュレータを作成する
残念ながらAPIレベル29以上では無理みたいです。
だからAPIレベル28以下のエミュを作ってください。
作成はAndroidStudio内で行ってOKです。
▼ そしたらemulatorコマンドで起動
1 2 3 4 5 6 7 8 9 10 |
> cd C:\Users\【ユーザー名】\AppData\Local\Android\Sdk\emulator > emulator -list-avds Nexus_6_API_29 Pixel_3a_API_27 Pixel_3a_API_30_x86 Pixel_4_API_30 Pixel_XL_API_29 Pixel_XL_API_30 > emulator -writable-system -avd Pixel_3a_API_27 |
このように emulator -list-avds で対象のAVD識別名を調べ、 -writable-system オプションを付けてエミュレータ起動してみてください。
この時点ではただエミュ起動しただけ
2.hostsファイルをadbコマンドから編集する
つづいて別コンソールを起動します。
そして次のコマンドでhosts取得です
1 |
> adb pull /system/etc/hosts C:\hoge |
これで C:\hoge にエミュのhostsが保存されます。
そこに追加したいホスト名を追加してください
▼ hostsの編集例(hogehoge.comを追加)
1 2 3 |
127.0.0.1 localhost ::1 ip6-localhost 10.0.2.2 hogehoge.com |
Androidエミュレータでは 10.0.2.2 が開発元マシンのlocalhostを表すという特例ルールがあります。(詳しくはここを参照 : https://developer.android.com/studio/run/emulator-networking)
▼ 編集したhostsをエミュにアップロード
1 2 3 4 5 |
> adb root > adb remount > adb push C:\hoge\hosts /etc/hosts 1 file pushed, 0 skipped. > adb reboot |
▼ 念のためhosts書き換え内容を確認
1 2 3 4 5 6 |
> adb shell generic_x86:/ # cat /etc/hosts 127.0.0.1 localhost ::1 ip6-localhost 10.0.2.2 hogehoge.com generic_x86:/ # exit |
最後に adb reboot を忘れずに
そしてエミュレータからxampp開発してるサイト(仮にhogehoge.comとする)を開いてみると無事アクセスできました!(^_^)v
hostsファイルの編集が必要なのは面倒だけど、エミュレータからローカル開発してるサイト・Webアプリにアクセスすることは可能です。
ただし実機端末ではroot化が必要
あまりにも面倒なのでエミュだけで十分です……