Android запустить команду bash в приложении
Привет я разрабатываю приложение, которое требует от меня запуска некоторого кода bash есть ли способ, которым я могу жестко закодировать скрипт в свое приложение, а затем запустить его? Например (это очень упрощенный пример)
#!/system/bin/sh
#
if [ ! -f /sdcard/hello.txt ]
then
echo 'Hello World' >> /sdcard/hello.txt
else
echo 'Goodbye World' >> /sdcard/goodbye.txt
fi
у меня есть следующий метод для запуска одной строки bash команды, но нужно запустить что-то вроде этого, что на нескольких строках. Опять же, приведенный выше код является очень упрощенным примером того, что я на самом деле делаю, должно выполняться через скрипт и не может быть сделано через java. Я также хочу, чтобы он был жестко закодирован, я знаю, что сценарий может храниться на телефоне и запускать его со следующим, но не хочу, чтобы сценарий просто там, скорее, был жестко закодирован в приложении.
public Boolean execCommand(String command)
{
try {
Runtime rt = Runtime.getRuntime();
Process process = rt.exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes(command + "n");
os.flush();
os.writeBytes("exitn");
os.flush();
process.waitFor();
} catch (IOException e) {
return false;
} catch (InterruptedException e) {
return false;
}
return true;
}
Спасибо за любую помощь с моей проблемой
1 ответов
Если я правильно вас понимаю, все, что вам нужно сделать, это изменить метод примера одной строки на что-то, что принимает и отправляет несколько строк, например:
public Boolean execCommands(String... command) {
try {
Runtime rt = Runtime.getRuntime();
Process process = rt.exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
for(int i = 0; i < command.length; i++) {
os.writeBytes(command[i] + "\n");
os.flush();
}
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (IOException e) {
return false;
} catch (InterruptedException e) {
return false;
}
return true;
}
таким образом, вы можете вызвать свои многострочные команды bash следующим образом:
String[] commands = {
"echo 'test' >> /sdcard/test1.txt",
"echo 'test2' >>/sdcard/test1.txt"
};
execCommands(commands);
String commandText = "echo 'foo' >> /sdcard/foo.txt\necho 'bar' >> /sdcard/foo.txt";
execCommands(commandText.split("\n"));