/ etc / hosts манипулирование файлами программно в android - PullRequest
0 голосов
/ 13 декабря 2010

Хотя раньше я писал небольшие приложения для android, сейчас я пытаюсь написать приложение для root и у меня возникают проблемы с правами доступа к файлам.

По сути, моя цель - манипулировать файлом / etc / hosts с помощьюJava-приложение.В качестве первого действия я получил права root с помощью runtime.exec ("su") и попытался открыть файл hosts стандартными способами, такими как File () или FileOutputStream ().Но безуспешно мое приложение выдало следующее исключение "java.io.FileNotFoundException: / etc / hosts (Permission denied)".Затем я проверил права доступа к файлу через оболочку, и это было похоже на rw-r - r-- для root.Даже если он должен работать с этими разрешениями, я изменил его на 777 из оболочки и вуаля!мое приложение начало открывать файл без проблем.Однако, поскольку Android время от времени заменяет файл hosts версией по умолчанию, он также меняет разрешение для файла и предыдущий метод, каждый раз, когда мне нужно перейти и изменить разрешение от adb, и, конечно, это не то, что я хочу.Итак, шаг за шагом;

- я попробовал метод runtime.exec ("chmod 777 / etc / hosts"), и он не работал без каких-либо исключений или сообщений об ошибках.

-Тогда я пытался использовать метод File.setWritable (), но он не существует в моей системе andoid, хотя, по-видимому, предполагается, что это Android 2.2 согласно javadoc.

- Наконец, я попытался установить рабочий каталог с помощью System.setProperty («user.dir», «/ etc /») и использовать openFileOutput («hosts», MODE_WORLD_WRITABLE), но, конечно, это не сработало, или.Теперь у меня нет идей.Как манипулировать системными файлами в Android?С уважением,

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

Я получил права root с помощью runtime.exec ("su")

Не для вашего кода Java у вас нет. Что su делает, это позволяет вам запускать автономный собственный исполняемый файл от имени пользователя root. не не изменяет uid существующего процесса, такого как dalvik vm, выполняющий ваш код.

Даже если он должен работать с этими разрешениями, я изменил его на 777 из оболочки и вуаля! мое приложение начало открывать файл без проблем.

Да, вы выполнили привилегированную задачу из привилегированного процесса, и тогда ваше непривилегированное Java-приложение могло позаботиться о последующих действиях.

Однако, поскольку android время от времени заменяет файл hosts версией по умолчанию, он также меняет разрешение для файла и предыдущий метод, каждый раз, когда мне нужно перейти и изменить разрешение от adb, и, конечно, это не то, что мне нужно.

Это говорит о том, что изменение файла hosts самостоятельно - плохая идея, так как вы можете в конечном итоге начать войну с Android (хотя Android пытался бы изменить файл, расположенный в файловой системе, предназначенной только для чтения, немного загадочно)

Какой способ манипулировать системными файлами в Android? С уважением,

Краткий ответ: вы не

Длинный ответ: вам нужно время, чтобы понять, как Android хочет их использовать, и вы изменили это поведение самого Android в модифицированной версии. (вы можете начать с поиска источников имени файла)

0 голосов
/ 13 декабря 2010

Если вам действительно нужно отредактировать файл hosts (что является плохой идеей, как указано в других ответах), вы найдете его в / system / etc / hosts и сделаете это через adb pull, отредактировав файл на своем компьютере. , adb remount и adb push. Файлы в разделе / ​​монтируются с блокировкой NAND, которая должна быть отменена пользовательским rom, что означает, что ваше приложение, вероятно, будет работать только с одним специальным rom, который делает это.

...