
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{
//ここに外用の置き換えコードを書いたらいいんじゃないかなあと考えています。
}
どうしたらよいでしょうか。ヒントでもご教授いただけたらと思います。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> 許可をすれば問題なくスルーします。
この文脈で「スルー」というのがどういうことを指すのかが分かりません。
> ということはroot権限は得ていることだと認識していますが、齟齬がありますでしょうか。
繰り返します。root権限を得るのは、suによって新たに作られるプロセス(だけ)です。
UNIX系OSの常識としては、exec("su")を呼んでいる質問者さんのアプリはroot権限を得られていないはずです。
No.1
- 回答日時:
どうしたら望みのものを作れるかは分かりませんが、どうしてうまくいかないかは見当がつきます。
> _process = Runtime.getRuntime().exec("su");
Androidにおけるsuコマンドが他のUNIX系OSにおけるsuコマンドと同じように動作するものであれば、suによってroot権限を得られるのはsu経由で作成される新規のプロセスです。exec("su")を呼んでいる元のアプリにはroot権限は与えられません。
このため/system/etc/hostsにアクセスできないのは当然です。
この回答への補足
確かに、
_process = Runtime.getRuntime().exec("su");
があるためにsuperUserの許可を与えるかどうかのウィザードが別のアプリによって展開されます。
許可をすれば問題なくスルーします。ということはroot権限は得ていることだと認識していますが、齟齬がありますでしょうか。
問題はそのあとで/system/etc/hostsにどうやってアクセスするかです。
chmodで権限を一度剥奪してから置き換え、権限を戻す、といったことをやるのかな、と思うのですが、その辺の記述がわかっていないのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
Javaの質問です
-
windowsでキー入力を拾うバッチ
-
OLE又はDDEを使うVISUAL BESIC...
-
ファイル名の先頭が数字だと駄...
-
JavaScriptでコマンドプ...
-
JARファイルをEclipseを使って...
-
batからexeを実行し戻り値を受...
-
c/c++ ビルドしたにもかかわら...
-
JAVAでつくったプログラムはコ...
-
exeファイルで実行できない
-
WScript.Echo と msgbox
-
Javaのexeファイルをコードに戻...
-
exewrapで変換したexeファイル...
-
a.outはどこへ?
-
VB6で、C言語の(argv,argc)み...
-
eclipseで作ったプログラムを他...
-
64bit環境で32bitのodbc参照
-
なぜプロセスはファイルにアク...
-
jarファイルとjava.exeの関連付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
JavaScriptでコマンドプ...
-
OLE又はDDEを使うVISUAL BESIC...
-
c/c++ ビルドしたにもかかわら...
-
VBAでEXEファイルを動かす方法...
-
コマンドプロンプトで外のexeや...
-
VC++から引数付きexeファイルの...
-
コンポーネント`MSCOMM32.cox'...
-
VBAで他のプログラムが起動して...
-
JARファイルをEclipseを使って...
-
ローカルのHTMLからexeファイル...
-
JAVA .jarファイルに再圧縮する...
-
以下のように複数のファイルを...
-
実行ファイルと実行モジュール...
-
64bit環境で32bitのodbc参照
-
LINK : fatal error LNK1104に...
-
VB6.0で作ったプロジェクトが起...
-
jarの開き方を教えてください。
-
ネットワーク越しのEXEファ...
-
eclipseで作ったプログラムを他...
おすすめ情報