Перейти к содержанию
Fire Monkey от А до Я
  • 0

Скопировать файл из root директории


eraserrus

Вопрос

Ребята, подскажите пожалуйста, мне нужно скопировать файл средствами delphi xe7 из директории android /data/data/com.blaaa/ на sd card. Использование TFile.copy приводит к сообщению Permission denied, хотя устройство рутировано и файловым браузером я до этого файла легко добираюсь. Подскажите как мне скопировать файл? И если не сложно с комментированным примером-кодом. Заранее благодарен за помощь.

Изменено пользователем eraserrus
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

Обычно, не достаточно просто получить рут, права нужно ещё запросить, на Java это делается примерно так:

Process c = Runtime.getRuntime().exec("su");

и только после подтверждения запроса можно выполнять операции.

 

Есть, ещё один нюанс, некоторые файлы имеют права доступа "RW-R--R--", скорее всего, чтобы их изменить, придётся менять сначала права доступа.

Ссылка на комментарий
  • 0

тут описано как работать с рут в делфи, там среди текста ссылка на zip с нужными файлами. 

Спасибо здесь есть, что почитать, запрос на рут права программе я получил, но при копировании с помощь. TFile.copy все равно выскакивает ошибка Permission denied, думаю что дальше необходимо уже линуксовскими командами пользоваться для копирования. Буду пробовать-позднее отпишусь, но если есть какие то еще идеи по TFile.copy, то пишите пожалуйста.

Ссылка на комментарий
  • 0

Разрешение стоят?

READ_EXTERNAL_STORAGE

WRITE_EXTERNAL_STORAGE

Я не понимаю, где они должны стоять? С помощью es browser я права на всю папку изменил, но результат тот же Permission denied.

Ссылка на комментарий
  • 0
  • Модераторы

 

Разрешение стоят?

READ_EXTERNAL_STORAGE

WRITE_EXTERNAL_STORAGE

Я не понимаю, где они должны стоять? С помощью es browser я права на всю папку изменил, но результат тот же Permission denied.

 

в приложении они должны быть

 

в IDE->Options->Uses Permissions

Ссылка на комментарий
  • 0

Да эти параметры включены. Я разобрался с копированием, необходимо копировать из рут директории линуксовскими командами.

1.) Сначала запросить права рута:

HaveRoot();

2) Затем линуксовской командой копирования "cp" скопировать файл или директорию:

RunAndroidCmd(‘su’ + sLineBreak + ‘cp /data/data/com.blaaa/filename /mnt/sdcard’, true);

Таким образом файл копируется на sdcard, но программа зависает и через 20 сек. я ее закрываю. Как сделать, что бы этого не происходило?

Ссылка на комментарий
  • 0
В 16.09.2016 в 15:06, eraserrus сказал:

RunAndroidCmd(‘su’ + sLineBreak + ‘cp /data/data/com.blaaa/filename /mnt/sdcard’, true);

Таким образом файл копируется на sdcard, но программа зависает и через 20 сек. я ее закрываю. Как сделать, что бы этого не происходило?

Может консолька возвратила строку и программа не знает, что делать дальше? Тогда так:

RunAndroidCmd(‘su’ + sLineBreak + ‘cp /data/data/com.blaaa/filename /mnt/sdcard > /dev/null’, true);

c перенаправлением вывода в никуда. Но в цикле " >/dev/null " лучше не использовать из-за возможного перегрева. ) (10к раз в секунду не вызывайте).

Ссылка на комментарий
  • 0
В ‎08‎.‎10‎.‎2016 в 22:05, web_warp сказал:

Может консолька возвратила строку и программа не знает, что делать дальше? Тогда так:


RunAndroidCmd(‘su’ + sLineBreak + ‘cp /data/data/com.blaaa/filename /mnt/sdcard > /dev/null’, true);

c перенаправлением вывода в никуда. Но в цикле " >/dev/null " лучше не использовать из-за возможного перегрева. ) (10к раз в секунду не вызывайте).

К сожалению программа так же виснет, но в некоторых случаях после таймаута сама закрывается, а не спрашивает подождать.

Ссылка на комментарий
  • 0
В 20.02.2021 в 09:13, OnePeople сказал:

У всех, кто запросил разрешение на это;)

HaveRoot();
RunAndroidCmd('su root' + sLineBreak + 'cp /sdcard/back.jpg /data/data ', true);

Зависает но копирует. Что я делаю не так?

Ссылка на комментарий
  • 0
4 часа назад, Дмитрий Куксов сказал:

HaveRoot();
RunAndroidCmd('su root' + sLineBreak + 'cp /sdcard/back.jpg /data/data ', true);

Зависает но копирует. Что я делаю не так?

RunAndroidCmd('su -c cp -r -p /sdcard/right.jpg /data/data/',true);
Вот копирует без проблем

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...