Androidのエミュレータのhostsの件
目的
タイトルはいったいなんなんだ、さっぱり意味が分かりません。
僕はAndroidのエミュレータからMac OS X上にあるvm上のwebサーバにアクセスしたい。
問題はAndroidのエミュレータってiOSのエミュレータとちがって、ホストOSにあるhostsファイルを参照してくれない。 だから、エミュレータ上にある、/system/etc/hostsを書き換えてやればいい。
と、単純なことなんですが、エミュレータの設定しくじると、 そもそも/systemのディスクサイズが足りなくて、
adb push ./hosts /system/etc/hosts #=> failed to copy './hosts' to '/system/etc/hosts': Out of memory
とか怒られる。
なので、エミュレータの設定をする時に、storageは念のため大きめにする。 僕の場合は、とりあえず2048MBにしたんだけど、/systemはデフォルトパンパンにするようになってるぽく、/systemをちょっと広げてあげないといけない。
設定
Android Stadioでやります。
エミュレータの設定はどこでやるんだか忘れてしまいましたが、 storageを大きめにしましょう。
次にディスク(storage)のパーティション設定です。
Run -> edit configuration -> Emulatorタブ -> Additional command line options
にチェックをいれつつ、フォームに
-partition-size 256
といれてやる。
ちょっと前後しますが、adbにパスを通す。zshrcでも、なんでもいいんで、下記を追記
export PATH=$PATH:/Applications/Android\ Studio.app/sdk/platform-tools
以下からは、エミュレータを立ち上げた時に、毎回行う必要がある作業です。
エミュレータの/system以下を読み書き可能にする。
adb remount # エミュレータの/system以下を読み書き可能にする。
あらかじめ準備したhostsをエミュレータに入れちゃいます。
adb push ./hosts /system/etc/hosts
さてこれで終了です。
設定したhostsが生きてるか、エミュレータのchromeとかで確認してみましょう。
おまけ
ちなみに、下記のようにすると、エミュレータのディスクサイズを確認できます。今回の場合は、以下のような感じ。
$ adb shell # エミュレータのシェル起動
# df
とやると、
# 中略
/system 248M 198M 49M 4096
# 中略
ってかんじで。
あと、以下で、hostsの内容とか確認できるし。
adb pull /system/etc/hosts ./hosts # 現在入ってるhostsを落としてくる