Чтение или запись файла в / data на рутированном устройстве Android - PullRequest
4 голосов
/ 11 марта 2011

Я пытаюсь программно прочитать / записать файл в каталог / data на рутированном телефоне. Сначала я shell запускаю su , чтобы убедиться, что моя программа получает доступ суперпользователя, что прекрасно работает.

Я могу читать / записывать файлы в / data через shell execs команды внутри моей программы, но я получаю " Отказано в доступе " java.io.IOException при использовании Android Файл или другие API.

Как использовать API для чтения / записи / данных на рутированном телефоне? это очевидно возможно, поскольку такие программы, как Root Explorer, делают это.

Спасибо,

Ответы [ 2 ]

3 голосов
/ 21 января 2013

Короче говоря, нет, это не строго возможно через API, так как вам нужно убедиться, что ваши команды модификации выполняются от имени root, иначе ОС отклонит эти операции.

Вам необходимо передать команды изменения в команду su, чтобы она выполнялась от имени пользователя root.
На своем github Chainfire предоставляет пример реализации класса Shell, который можно использовать для выполнения команд rm или любой другой команды в качестве пользователя root.

Один из способов сделать это программно - скопировать файл, который вы пытаетесь редактировать, во временный каталог, скажем, /sdcard/tmp.txt, и отредактировать этот файл, затем скопировать его обратно в исходное местоположение и перезаписать тот, который там есть. .

Другим способом было бы chmod целевой файл (то есть chmod 777 /data/xxx.txt), чтобы вы могли читать / записывать его содержимое программным путем. Вот почему вы получаете ошибку Permission denied, так как ваша программа не имеет прав доступа к другим файлам. Ключевым моментом здесь является то, что вам нужно убедиться, что сама команда chmod передана в команду su, чтобы команда TH не была отклонена. Я бы посоветовал прочесть руководство по ссылке ниже, так как в нем очень подробно описано, как можно подойти к ситуациям, когда необходимо работать с правами root.

Источник: How-To SU

1 голос
/ 11 марта 2011

С помощью кодирования вы можете добавить строку типа

Runtime.getRuntime().exec("chmod 077" +your_file_you_need_to_give_permission); 
...