主に IT 技術を整理するためにメモ的に書き溜めています。少しだけフリーソフトもあるよ。コメントを残すには、 facebook を使ってください。

Android emulator で localhost にアクセスするには

最終更新日 2012-01-10 02:02:03 (1年以上前の記事です)

最近は Android アプリに加え、 Android のブラウザ対応アプリを作る事も多くなってきた。今まで自分の携帯でテストしてたけど、色々バージョンも増えてきたので、エミュレーターのブラウザを使用してみた。

まずひっかかったのが、どうやってエミュレーター内のブラウザに、自分の localhost コンピューターで走ってる Web にアクセスさせるか。 iPhone のエミュレーターなら自分の localhost の /etc/hosts を書き換えればいいだけなのに、 Android はちょっと癖があるというか、自由度があるというか。

環境は、 android-sdk_r15-macosx

何をしなければいけないかというと、エミュレーター内の /system/etc/hosts を書き換えれば良い。ただ、すんなり行かずいくつかエラーになったりしたので、それも含めてメモしておく。

adb remount

まずエミュレータ上のディスクにアクセスするため、マウント(?)する。 adb コマンドは .../android-sdk_r15-macosx/platform-tools/ にある。

$ adb remount
remount succeeded

ここでたまにエラーになったのが、以下

error: device offline

または

error: device not found

よく分からないが、 adb サーバー(?)をリスタートすると直る事がある。

$ adb kill-server; adb start-server

adb pull

次に、/system/etc/hosts を取り出す。

$ adb pull /system/etc/hosts ./hosts
10 KB/s (92 bytes in 0.008s)

これでカレントディレクトリに hosts ファイルが取り出されたはず。

hosts の編集

次に hosts ファイルを変更するのだけど、 127.0.0.1 を登録しても、エミュレーターは自分自身のホストにアクセスしてしまうのでうまくいかない。なので、エミュレーターがどんな仮想 IP を使って、 localhost コンピューターに接続するのかを確認する。とりあえず、 ifconfig とかできなかったので、 netstat で確認を試みる。

$ adb shell netstat -an
Proto Recv-Q Send-Q Local Address          Foreign Address        State
tcp        0      0 127.0.0.1:5037         0.0.0.0:*              LISTEN
tcp        0      0 0.0.0.0:5555           0.0.0.0:*              LISTEN
tcp        0      0 10.0.2.15:5555         10.0.2.2:54178         ESTABLISHED
udp        0      0 0.0.0.0:38826          0.0.0.0:*

どうやら、 10.0.2.15 がエミュレータ自身で、 10.0.2.2 がローカルホストっぽい。なので、 hosts ファイルを以下のように編集。

127.0.0.1                   localhost
10.0.2.2        test.enjoitech.com

adb push

最後にファイルをエミュレーターに戻しておしまい。

$ adb push ./hosts /system/etc/hosts
13 KB/s (92 bytes in 0.006s)

ここでまたいくつかエラーが発生した。1つ目は、

failed to copy 'hosts' to '/system/etc/hosts': Out of memory

理由はさっぱり分からないが、なにやらパーティションのサイズに関連してるらしい。エミュレーターを起動する際に、パラメータでパーティションサイズを指定して起動するとうまくいった。

$ emulator -avd Milestone -partition-size 128 &

ちなみに Milestone というのは ADV の名前。 emulator コマンドは .../android-sdk_r15-macosx/tools/ にあります。

さらにこのコマンドを打った後、以下のような原因不明な出力とともにエミュレーターがフリーズする事も。

##KBD: Full queue, lose event

これもさっぱり原因はわかりませんが、 ADV を作り直したら何か直りました。

何もエラーがなければ、 remount, pull, edit and push とあっさり行くと思いますが、何やらエラーがあったり Android の事あんまり知らないのもありで、ちょっと苦戦しました。

最終更新日 2012-01-10 02:02:03

コメント このエントリーをはてなブックマークに追加

フリーソフトウエア
EnjoiFLV
EnjoiPacket
EnjoiCrypto
ランキング
rank2, rank3, rank7, rank10, rank11
todo メモ
facebook 対応
ページ処理
RSS feed
検索機能
認証いる?
更新日表示
実はカテゴリ機能
多言語
実はユーザ機能
ソースその内公開
動作環境メモ
php-5.1.6 with PDO
SQLite-3.3
IE6
FireFox-1.5
RSS
非認証

検索
Google