- 締切済み
hostsファイルを置き換える android
androidアプリで、hostsファイルを置き換える、ものを作ろうと思っています。 家でローカルサーバーへアクセスするのに、いちいちhosts editorを使わなければならないからです。 家のSSIDに接続したら、アプリディレクトリに準備してあるhostsファイルと置き換える、というだけのものです。「というだけのもの」と言いながらかなりレベルの高いものだと痛感しました。 なのでハードコードしたものでとりあえず、 アプリを起動したら SSIDを検知して hostsを「家用のもの」と「外用のもの」とを置き換える までのものを作ろうと思っています。 root化されている前提での質問です。 以下は部分的な抜粋コードです。 WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE); WifiInfo info = manager.getConnectionInfo(); String[] apInfo = new String[4]; String s1 = new String(info.getSSID().trim()); String s2 = "\"exampleSSID\""; if(s1.equals(s2)){ try { _process = Runtime.getRuntime().exec("su"); srcChannel = new FileInputStream("/system/etc/hosts").getChannel(); destChannel = new FileOutputStream("hosts").getChannel(); srcChannel.transferTo(0, srcChannel.size(), destChannel); //↑このあたりでとりあえずhostsファイルを取ってくるコードをやってみているのだけれど、できません。 _process.destroy(); } catch (IOException e) { e.printStackTrace(); } finally { if (srcChannel != null) { try { srcChannel.close(); } catch (IOException e) { } } if (destChannel != null) { try { destChannel.close(); } catch (IOException e) { } } }else{ //ここに外用の置き換えコードを書いたらいいんじゃないかなあと考えています。 } どうしたらよいでしょうか。ヒントでもご教授いただけたらと思います。
- みんなの回答 (2)
- 専門家の回答
補足
確かに、 _process = Runtime.getRuntime().exec("su"); があるためにsuperUserの許可を与えるかどうかのウィザードが別のアプリによって展開されます。 許可をすれば問題なくスルーします。ということはroot権限は得ていることだと認識していますが、齟齬がありますでしょうか。 問題はそのあとで/system/etc/hostsにどうやってアクセスするかです。 chmodで権限を一度剥奪してから置き換え、権限を戻す、といったことをやるのかな、と思うのですが、その辺の記述がわかっていないのです。