Android エミュレータの DNS 設定

突然にAndroid エミュレータがインターネットへ接続できなくなってしまった。調べたところまさに同じ状況についてのブログ記事があった。

Androidのエミュレータがネットワークに接続できない場合の対処方法

この記事によると、何らかの要因で DNS にアクセス出来なくなっているようで、手動で明示的に DNS を設定してやれば解決することが分かった。ちなみに自分のところでは net.dns1 だけ値(10.0.2.3)が設定されており、net.nds2 には何も設定されていなかった。上記のブログ記事のように Google の DNS を設定すると、確かにインターネット接続が可能になった。

ただ、これまではこんなことをしなくてもそのまま接続できていたのが、急に繋がらなくなったのが気になった。そこで本家ドキュメントを探してみると、Android エミュレータについての情報を見つけた。

Using the Android Emulator

このページの中盤あたりにある “Configuring the Emulator’s DNS Settings” によると、エミュレータはその実行環境で設定されている DNS を使うようになっている。問題のエミュレータは Windows7 上で動いているのだが、この Windows7 が名前解決に使っているプライマリの DNS サーバは、このところの計画停電に対応するため電源を落としていた。どうもこのことが名前解決できなくなった原因のようだ。

もちろん Windows7 環境では複数の DNS サーバを参照するように設定してあるので、プライマリの DNS サーバが無くてもまったく問題はない。当然 Android エミュレータも、親環境と同じセカンダリ以降の DNS を参照すればよいはず。しかしどうもこのあたりに問題があるようで、プライマリの DNS にアクセスできないと、Android エミュレータは名前解決できなくなってしまうようだ。前述のドキュメントによると Windows 環境では DNS 情報を GetNetworkParams() API によって獲得するとある。この API が複数 DNS に対応していないことは考えにくいので、恐らく Android エミュレータが複数 DNS 情報の扱いが出来ていないと思われる。