Запуск команд оболочки из приложения [Rooted] - PullRequest
4 голосов
/ 23 июля 2011

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

Ответы [ 2 ]

5 голосов
/ 25 июля 2011

Сначала убедитесь, что необходимая вам команда оболочки действительно доступна в Android.Я столкнулся с проблемами, предполагая, что вы можете сделать что-то вроде перенаправления вывода с помощью > .

Этот метод также работает на некорневых телефонах, как я полагаю, v2.2, но вы должны проверитьСсылка на API, чтобы быть уверенным.

try {
        Process chmod = Runtime.getRuntime().exec("/system/bin/chmod 777 " +fileName);

        BufferedReader reader = new BufferedReader(
                new InputStreamReader(nfiq.getInputStream()));
        int read;
        char[] buffer = new char[4096];
        StringBuffer output = new StringBuffer();
        while ((read = reader.read(buffer)) > 0) {
            output.append(buffer, 0, read);
        }
        reader.close();
        chmod.waitFor();
        outputString =  output.toString();
    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }

Хотя это, вероятно, не на 100% необходимо, было бы хорошей идеей, чтобы процесс ждал завершения exec с process.waitFor (), так как вы сказали, что вы заботитесьо выходе.

2 голосов
/ 23 июля 2011

Необходимо сначала убедиться, что у вас установлен busybox, так как он устанавливает список наиболее часто используемых команд оболочки, а затем использовать следующий код для запуска команды.

Runtime.getRuntime().exec("ls");
...