2013-04-09 2 views
2

Я новичок в Android. Я пытаюсь запустить команду оболочки, чтобы переименовать файл в системе. У меня есть root-доступ к нему.Как запустить команду переименования оболочки в приложении для Android (корневой)

Командная оболочка:

$ su 
# mount -o remount,rw /system 
# mv system/file.old system/file.new 

Я попытался это, но не работает:

public void but1(View view) throws IOException{ 
    Process process = Runtime.getRuntime().exec("su"); 
    process = Runtime.getRuntime().exec("mount -o remount,rw /system"); 
    process = Runtime.getRuntime().exec("mv /system/file.old system/file.new"); 
} 
+1

Я уверен, что есть сообщение об ошибке или что-то в этом роде ... Почему бы вам не поделиться этим вопросом? – mthmulders

ответ

4

Вы можете запускать более одной команды, используя тот же самый процесс, путем записи команд в процесс OuputStream. Таким образом, команды будут выполняться в том же контексте, что и команда su. Что-то вроде:

Process process = Runtime.getRuntime().exec("su"); 
DataOutputStream out = new DataOutputStream(process.getOutputStream()); 
out.writeBytes("mount -o remount,rw /system\n"); 
out.writeBytes("mv /system/file.old system/file.new\n"); 
out.writeBytes("exit\n"); 
out.flush(); 
process.waitFor(); 
+0

@cyanide Нет, 'getOutputStream()' возвращает выходной поток, подключенный к нормальному вводу подпроцесса. Вывод в поток поступает в стандартный ввод процесса, представленного этим объектом Process. См. [Javadoc] (http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#getOutputStream()) – dan

+0

wow это работа спасибо большое – Mahendra

+0

@ user2244000 Добро пожаловать. Вы можете принять ответ, что это было полезно :). – dan

0

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

Вместо этого попробуйте два EXEC-х:

...exec("su -c mount -o remount,rw /system"); 
...exec("su -c mv /system/file.old system/file.new"); 

Кроме того, имейте в виду, что я видел некоторые системы, где mount -o remount,rw /system потерпит неудачу, однако mount -o remount,rw /dev/<proper path here> /system удастся. «Правильный путь здесь» отличается от одного производителя к другому, но его можно запрограммировать.

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