2012-01-04 2 views
2

Я пишу приложение, которое скопирует файлы из своего каталога ресурсов в системный каталог Android.Как сохранить файлы в Android/системном каталоге?

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

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

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

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

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

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

ответ

0

Я предполагаю, что есть возвращаемое значение из метода 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\""); 

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

+0

Благодарим вас за консультацию, но что вы предлагаете, должно быть минимальное разрешение для простого написания файла? Кроме того, может ли потенциальное решение изменить права доступа к нормальному состоянию, как только файл будет записан? –

+0

Серьезно не оставляйте разрешения!Если вы выполняете роль root, разрешения в любом случае не имеют значения. – slayton

+0

Но, не мог ли пользователь приложения быть единственным, имеющим доступ к этому? Как кто-нибудь еще сможет это сделать? Считаете ли вы, что сброс разрешений - хорошая идея? –

1
Runtime.getRuntime().exec 

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

getInputStream or getOutputStream or getErrorStream 

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

+0

Это также очень полезное предложение, спасибо. –

Смежные вопросы