Как сохранить файлы в каталог Android / system? - PullRequest
2 голосов
/ 04 января 2012

Я пишу приложение, которое будет копировать файлы из его каталога активов в каталог Android / system.

Я чувствую, что приближаюсь к этому, но я не совсем там.Вот стратегия, которую я попробовал:

Во-первых, я попытался изменить права доступа к каталогу / system на:

Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("mount -o rw,remount -t yaffs2 /dev/block/mtdblock4");
Runtime.getRuntime().exec("chmod -R 777 /system");

Во-вторых, я попытался записать файл в /системный каталог.

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

У кого-нибудь есть предложения?

Ответы [ 2 ]

1 голос
/ 04 января 2012
Runtime.getRuntime().exec

вернет Process, из класса процесса, вы можете

getInputStream  or getOutputStream or getErrorStream

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

0 голосов
/ 04 января 2012

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

Но я думаю, что у вас есть несколько ошибок в ваших попытках выполнить этосерия команд:

  • su может влиять только на свой процесс и дочерние процессы.Вы выполняете это без аргументов, поэтому он ничего не делает.Следующий метод exec() начинается с нуля с точными разрешениями вашего процесса, а не с повышенными привилегиями, которые вы можете ожидать.
  • Ваша команда mount(8) не выглядит правильно: вы не говорите, какую точку монтированияманипулировать.(Не забывайте, что устройство может быть смонтировано в нескольких местах.)
  • Ваш вызов chmod(1) также не запускается с привилегиями и устанавливает слишком открытые разрешения.Возможно, вы не заботитесь о безопасности своего устройства, это нормально, но будьте уверены, что именно этого вы и хотите.

Я считаю, что ваша команда mount должна выглядеть примерно так:

Runtime.getRuntime().exec("su -c \"mount -orw,remount /system\"");

И я полагаю, что ваша команда chmod должна выглядеть примерно так:

Runtime.getRuntime().exec("su -c \"chmod 777 /system/fonts\"");

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

...