Android: запись в каталог / sys / - PullRequest
       18

Android: запись в каталог / sys /

1 голос
/ 10 августа 2010

Я разрабатываю приложение, которое не предназначено для выпуска в качестве стандартного приложения.Он будет работать на одном устройстве с root-доступом.

Мне требуется возможность записи в файл в каталоге / sys /.Данный файл принадлежит пользователю root и имеет права доступа -rw-rw-rw-.

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

Возможно ли это?Как это может быть достигнуто?Неважно, нужно ли рутировать телефон (я использую dev).


Я просто изучил использование FileWriter для записи в файл, что вызвало следующееошибка на .flush():

java.io.IOException: Invalid argument
at org.apache.harmony.luni.platform.OSFileSystem.writeImpl(Native Method)

Я также пытался выполнить команду оболочки из Java, как с "su", так и без него.Который возвратил «запрос отклонен» и «Отказано в доступе» соответственно.

Process process = Runtime.getRuntime().exec("echo 'hello' > /sys/file");

Наконец, я попытался использовать NDK и JNI в случае C, каким-то волшебным образом удалось записать этот файл.При попытке fflush к этому файлу я получаю EOF (что означает, что произошла ошибка).


Все предложения приветствуются!

Ответы [ 3 ]

7 голосов
/ 24 сентября 2010

Метод Runtime.getRuntime (). Exec (String) просто обрабатывает входную строку как имя файла исполняемого файла.Он не примет вашу команду эха.Вместо этого вы должны использовать Runtime.getRuntime (). Exec (String []), например:String [] cmd = {"/ system / bin / sh", "-c", "echo xxx> / sys / somefile",};Runtime.getRuntime () Exec (CMD).В качестве альтернативы, чтобы записать что-то в файл sys, вы должны использовать класс java.io.PrintWriter.Пожалуйста, обратитесь к http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/os/Debug.java и найдите 'startNativeTracing ()' для примера.Конечно, все вышеперечисленное может работать, только если файл sys доступен для записи для вашего приложения.

1 голос
/ 24 августа 2010

Я думаю, вам придется поделиться реальным кодом и рассказать нам, что вы действительно пытаетесь сделать. «Неверный аргумент» соответствует write (2) с ошибкой EINVAL, что происходит, когда вы пытаетесь записать что-то неподходящее. не вещь разрешений; тип вещь. этот файл не обычный файл?

0 голосов
/ 10 августа 2010

Вам необходимо изменить манифест, чтобы ваша программа запрашивала доступ пользователя root.

http://developer.android.com/reference/android/Manifest.permission.html

public static final String FACTORY_TEST начиная с: Уровень API 1

Выполнитькак тестовое приложение производителя, работающее от имени пользователя root.Доступно только когда устройство работает в режиме тестирования производителя.Постоянное значение: "android.permission.FACTORY_TEST"

...