Russian Qt Forum

Qt => Qt Embedded => Тема начата: Goshman от Февраль 18, 2016, 20:12



Название: Запуск нескольких команд с помощью QProcess
Отправлено: Goshman от Февраль 18, 2016, 20:12
Добрый день!

Из приложения под Android необходимо изменить системную дату и время.

В терминалке все просто
Код:
su
date -s YYYYMMDD.hhmmss

А вот в программе следующий код не работает:
Код:
QProcess::execute("/system/bin/sh", QStringList() << "/system/xbin/su");
QProcess::execute("/system/bin/sh", QStringList() << "/system/bin/date" << "-s" << str);
* В str отформатированные в виде YYYYMMDD.hhmmss дата и время
Вернее не меняет время. И скорее всего из-за того, что оба процесса сами по себе с разными pid. Т.е. второй процесс уже не имеет прав суперпользователя.

Надо обе команды выполнять в рамках 1 процесса. А вот как это сделать, я не могу придумать. Помогите, плис.



Название: Re: Запуск нескольких команд с помощью QProcess
Отправлено: kambala от Февраль 18, 2016, 23:34
su && date -s YYYYMMDD.hhmmss :)


Название: Re: Запуск нескольких команд с помощью QProcess
Отправлено: Goshman от Февраль 19, 2016, 18:16
su && date -s YYYYMMDD.hhmmss :)
Не работает, к сожалению. Даже в терминалке. Видимо у андроида shell урезанный.
Придется в делать скрипт, параметры даты в него передавать и его же запускать. А не хотелось бы скрипты плодить под разные команды...

Может еще способы есть как без скриптов обойтись?


Название: Re: Запуск нескольких команд с помощью QProcess
Отправлено: kambala от Февраль 19, 2016, 18:35
а у приложения вообще есть рут доступ и доступ к шеллу? в иос подобное невозможно без взлома устройства например.


Название: Re: Запуск нескольких команд с помощью QProcess
Отправлено: Goshman от Февраль 19, 2016, 19:23
а у приложения вообще есть рут доступ и доступ к шеллу? в иос подобное невозможно без взлома устройства например.
Ну сам планшет рутованый. Из терминала su доступна и работает. Значит можно утверждать, что и приложение имеет доступ к su.
Или я не прав?


Название: Re: Запуск нескольких команд с помощью QProcess
Отправлено: kambala от Февраль 20, 2016, 19:08
нужно узнать с какими правами запускается приложение


Название: Re: Запуск нескольких команд с помощью QProcess
Отправлено: Bepec от Февраль 20, 2016, 21:34
а вы наберите эту команду в терминале. Если выполнится - значит что то у вас с правами. Если не выполнится - не поддерживает.


Название: Re: Запуск нескольких команд с помощью QProcess
Отправлено: Alex Custov от Февраль 22, 2016, 00:17
Вообще GNU su поддерживает ключ -c для выполнения команд от рута, не знаю как с этим в Андроид. Проблемы тут две - как программно вводить пароль, и то что это неправильный способ, т.к. правильный - использовать Android API.


Название: Re: Запуск нескольких команд с помощью QProcess
Отправлено: ssoft от Февраль 22, 2016, 20:34
Можно любую программу запустить на исполнение, поместив ее в файл скрипта или в виде текста содержимого скрипта, но... как уже писали программно нельзя ввести пароль.
Можно использовать доступ через sudo или ssh, однако в любом случае заранее необходимо будет зарегистрировать доступ к su.

А так правильный способ -
- использовать Android API.


Название: Re: Запуск нескольких команд с помощью QProcess
Отправлено: Goshman от Февраль 23, 2016, 18:55
Вообще GNU su поддерживает ключ -c для выполнения команд от рута, не знаю как с этим в Андроид. Проблемы тут две - как программно вводить пароль, и то что это неправильный способ, т.к. правильный - использовать Android API.
Спасибо, именно -с мне и не хватало для полного счастья.
В итоге рабочий код
Код:
QProcess::execute("su", QStringList() << "-c" << "date" << "-s" << str);

Что касается API. Видимо для смены времени андроиду рут все равно нужен.
По крайней мере у меня не получилось в эмуляторе поменять время с помощью setCurrentTimeMillis(long millis) с разрешением SET_TIME.