Russian Qt Forum
Апрель 19, 2024, 04:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запуск нескольких команд с помощью QProcess  (Прочитано 7983 раз)
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 процесса. А вот как это сделать, я не могу придумать. Помогите, плис.

Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #1 : Февраль 18, 2016, 23:34 »

su && date -s YYYYMMDD.hhmmss Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Goshman
Гость
« Ответ #2 : Февраль 19, 2016, 18:16 »

su && date -s YYYYMMDD.hhmmss Улыбающийся
Не работает, к сожалению. Даже в терминалке. Видимо у андроида shell урезанный.
Придется в делать скрипт, параметры даты в него передавать и его же запускать. А не хотелось бы скрипты плодить под разные команды...

Может еще способы есть как без скриптов обойтись?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #3 : Февраль 19, 2016, 18:35 »

а у приложения вообще есть рут доступ и доступ к шеллу? в иос подобное невозможно без взлома устройства например.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Goshman
Гость
« Ответ #4 : Февраль 19, 2016, 19:23 »

а у приложения вообще есть рут доступ и доступ к шеллу? в иос подобное невозможно без взлома устройства например.
Ну сам планшет рутованый. Из терминала su доступна и работает. Значит можно утверждать, что и приложение имеет доступ к su.
Или я не прав?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #5 : Февраль 20, 2016, 19:08 »

нужно узнать с какими правами запускается приложение
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #6 : Февраль 20, 2016, 21:34 »

а вы наберите эту команду в терминале. Если выполнится - значит что то у вас с правами. Если не выполнится - не поддерживает.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Февраль 22, 2016, 00:17 »

Вообще GNU su поддерживает ключ -c для выполнения команд от рута, не знаю как с этим в Андроид. Проблемы тут две - как программно вводить пароль, и то что это неправильный способ, т.к. правильный - использовать Android API.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 579


Просмотр профиля
« Ответ #8 : Февраль 22, 2016, 20:34 »

Можно любую программу запустить на исполнение, поместив ее в файл скрипта или в виде текста содержимого скрипта, но... как уже писали программно нельзя ввести пароль.
Можно использовать доступ через sudo или ssh, однако в любом случае заранее необходимо будет зарегистрировать доступ к su.

А так правильный способ -
- использовать Android API.
Записан
Goshman
Гость
« Ответ #9 : Февраль 23, 2016, 18:55 »

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

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


Страница сгенерирована за 0.051 секунд. Запросов: 22.