エンジニアの黒田です。
Androidをroot化するメリット・デメリットは至るところで紹介されています。
開発者としては「hostsを書き換えたい」という理由が多いのではないでしょうか。
root化することは非常にリスクを伴いますし、なにかあってからではサポートが受けられません。
そこで今回はroot化せずにhostsを書き換える方法ご紹介したいと思います。
と、言っておいてなんですが、実はAndroidのhostsは書き換えていません。
簡単に説明するとAndroidをproxyサーバー経由でネットワーク接続し、proxyサーバー側のhostsを書き換えるという手法をとりました。
1. apacheのProxyサーバー機能を有効にする
今回は自分のmacをproxyサーバーにしました。
既にmac内でapacheを立てていましたので、httpd.confに下記を追加
<IfModule mod_proxy.c>
ProxyRequests On
ProxyVia On
Listen 8080
<Proxy *>
Order deny,allow
Deny from all
Allow from 192.168
</Proxy>
</IfModule>
apacheを再起動すればproxyサーバーが有効になります。
2. macのネットワーク共有を有効にする
macの「インターネット共有」を「入」にします。
3. AndroidをmacのWiFiネットワークに接続
まずは先ほど有効にしたmacのWiFiネットワークがあることを確認します。
Android3.1からWi-Fiアクセスポイントごとにproxyサーバの設定ができるようになりました。
該当するネットワークを長押しすると下記のような選択画面が出てきます。
「ネットワーク設定を変更」を選択します。
「拡張オプションを表示」にチェックを入れます。
「プロキシ設定」で「手動で選択」を選び、macのIPアドレスとポート8080を入力します。
これでAndroidがネットワーク接続する際はmacのproxyサーバーを経由することになります。
その際、Andoridからはproxyサーバー側のhostsを参照します。
4. AndroidからDNSに登録されていないhostを参照
試しに、macのローカル環境で構築したサービスに接続してみます。
mac側のhostsに下記を入力します。
127.0.0.1 hosts-test.excite.co.jp
Androidから「http://hosts-test.excite.co.jp」にアクセスするとちゃんと表示されました。
若干面倒ですが、root化する手間を考えるとはるかに安全で簡単だと思います。
ローカルで開発中のWebページを実機で確認したい場合などには使えるのないでしょうか。