2014-09-27 3 views
0

Я столкнулся с странным поведением на Android 4.4. ниже команда отлично работает на платформе Android Jelly Bean коренится устройства:Команда cp не работает на Android 4.4

Process process = Runtime.getRuntime().exec("su"); 
DataOutputStream dos = new DataOutputStream(process.getOutputStream()); 

// path is a folder saved on sdcard 
dos.writeBytes("cp -a " + path + " " + "/data/data" + " \n"); 
dos.flush(); 
process.waitFor() return 0 mean Ok 

Однако на Android 4.4 укоренены устройства, вышеперечисленные команды не работают. process.waitFor() return 1 означает, что где-то есть ошибка.

Я замечаю, что при запуске на Android-устройстве, основанном на железе Bean, разрешение для файлов: rwxr-x. На Android 4.4 укоренены, они: rwxrwx--

Я искал эту проблему, но пока не нашел никакого результата. Спасибо. :)

UPDATE: Я могу скопировать данные из папки данных/данных с помощью команды cp в папку sdcard.

+0

Почему бы просто не использовать 'su -c cp ....' в вашем 'exec'? – ElefantPhace

+0

Фактически, он выполняет не только команду cp, но и команду с командой. – Paul

+0

Оберните его с помощью блока catch catch – ElefantPhace

ответ

0

Мне удалось заставить его работать, изменив команду.

cp -a " + path + " " + "/data/data" + " \n" 

в

cp -r " + path + " " + "/data/data" + " \n" 

Разница между -a и -r есть -a останется все разрешения копирования файлов, которые я не знаю, почему он не работает на Android 4.4. -r также скопирует все файлы и папки, но изменяет разрешение файла, простое решение (я думаю) - это chmod-разрешение вручную после копирования.

1

su Перед запуска на Android 4.4 и выше для копирования/записи файлов в корневом устройстве, сделайте резервную копию этого файла:

/system/etc/permissions/platform.xml

Затем посмотреть, если следующее разрешение и группы были определены в platform.xml :

<permission name="android.permission.WRITE_EXTERNAL_STORAGE" > 
    <group gid="sdcard_r" /> 
    <group gid="sdcard_rw" /> 
    <group gid="media_rw" /> 
</permission> 

Если нет, редактировать platform.xml и добавить их, сохранить, а затем перезагрузите устройство и попробуйте вашу команду su снова.

Если все остальное не работает, попробуйте установить двоичный файл BusyBox на корневое устройство и запустить через него команду su.

+0

Извините за задержку, мне удалось заставить ее работать, изменив опцию cp от -a до -r, затем я chmod все папки вручную. – Paul

+0

@ Dat: проблем нет.Рад, что вы решили это сами. Можете ли вы ответить на свой вопрос, затем подождите 24 часа и примите свой ответ. Таким образом, ваш пост будет перемещен из очереди без ответа. Примечание. Вы должны подождать 24 часа, прежде чем сможете принять свой собственный ответ. – ChuongPham