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"));