Android: как смонтировать файловую систему в RW из моего APK? (с корнем, конечно)

Я пытаюсь написать приложение, которое копирует что-то в системный раздел во время выполнения. Я уже реализовал возможность запускать команды терминала от имени root, запрашивая разрешения SU. Я могу успешно выполнить множество команд (после предоставления запроса на разрешение с помощью SuperUser). Однако, когда я пытаюсь перемонтировать /system для чтения/записи, ничего не происходит. Я не получаю ошибки или сбоя, и команда, кажется, проходит нормально, но раздел остается доступным только для чтения. Вот команда, которую я запускаю (Droid X): mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system, и она отлично работает, если я запускаю ту же команду из Терминала. И вот мой код для выполнения корневых команд из моего приложения:

String cmd = "mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system";
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes(cmd + "\n");          
os.writeBytes("exit\n");  
os.flush();

И затем у меня есть код, который проверяет потоки stdout и stderr, чтобы увидеть, что произошло. Может ли кто-нибудь дать мне представление, почему это не работает?


person user496854    schedule 30.03.2011    source источник


Ответы (1)


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

person user496854    schedule 01.04.2011
comment
Просто к вашему сведению, если вы ответили на свой вопрос к своему удовлетворению, можно принять ваш собственный ответ. - person powerj1984; 21.09.2011
comment
Маловероятно, что файловая система сразу же будет перемонтирована только для чтения — обычно она остается доступной для записи до тех пор, пока вы ее не перемонтируете или не перезагрузите. Тем не менее, отсутствие липкости при эскалации до суперпользователя часто является проблемой, на которую люди, пытающиеся это сделать, спотыкаются. Вы почти наверняка должны быть суперпользователем как для перемонтирования /system, так и для изменения чего-либо в нем, когда он доступен для записи. - person Chris Stratton; 05.05.2012
comment
Статус файловой системы RW в целом сохраняется, но, поскольку на самом деле он может выполнять любые операции с файлами из APK, он определенно не работает так. Все файловые операции должны выполняться в том же процессе, что и команда RW, иначе она не будет работать. - person user496854; 07.05.2012