Оболочка adb "screencap -p /sdcard/screen.png" завершается с ошибкой "На устройстве не осталось места", но достаточно места - PullRequest
0 голосов
/ 16 декабря 2018

Кто-нибудь испытывал и решил такую ​​проблему?

Мы используем команду adb shell screencap для захвата скриншотов на устройстве Android:

//catch and download screenshot 
adb shell "screencap -p /sdcard/screen.png"
adb pull "/sdcard/screen.png" "tempPictPathName"
//clean
adb shell "rm /sdcard/screen.png"

Она прекрасно работала довольно долго.По какой-то причине (ничего не изменилось ни в нашем коде, ни на тестируемом устройстве) мы начали получать сообщение об ошибке «Нет свободного места на устройстве» при запуске одной и той же команды как из cmd, так и из кода:

>adb shell "screencap -p /sdcard/screen.png"
Error opening file: /sdcard/screen.png (No space left on device)

Мы проверили, достаточно ли места на устройстве:

$ ls -l /storage/
lrwxrwxrwx root     root              2018-12-16 10:35 sdcard -> /storage/emulated/legacy
$su -c df
Filesystem                               Size    Used     Free   Blksize    
/storage/emulated                      930.4M    0.0K   930.4M      4.0K
    /storage/emulated/0                      8.9G    6.1G     2.9G      4.0K
    /storage/emulated/0/Android/obb          8.9G    6.1G     2.9G      4.0K
    /storage/emulated/legacy                 8.9G    6.1G     2.9G      4.0K
    /storage/emulated/legacy/Android/obb     8.9G    6.1G     2.9G      4.0K

Мы безуспешно пытались изменить местоположение файла .png:

>adb shell "screencap -p /sdcard/Download/screen.png"
Error opening file: /sdcard/Download/screen.png (No space left on device)
>adb shell "screencap -p /storage/sdcard/Download/screen.png"
Error opening file: /storage/sdcard/Download/screen.png (No space left on device)

После перезапуска устройства команда adb shell "screencap -p /sdcard/screen.png"удалось, но только один раз.Когда мы пытаемся сохранить изображение, фотографируя на камеру, проблем не возникает

Что может вызвать ошибку «Нет места»?

1 Ответ

0 голосов
/ 16 декабря 2018

Скорее всего, используемое вами местоположение не существует.

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

/storage/emulated                      
/storage/emulated/0

Таким образом, ваш код должен быть:

//catch and download screenshot 
adb shell "screencap -p /storage/emulated/0/screen.png"
adb pull "/storage/emulated/0/screen.png" "tempPictPathName"
//clean
adb shell "rm /storage/emulated/0/screen.png"

Если это невозможно, вы можете использовать следующие команды:

# open the device shell
adb shell
# find your path in the device
pwd
# list all directories of this location
ls -la
# move into a directory with name dir_name
cd dir_name
# repeat "ls" and "pwd" commands as many times you need for the navigation
# when you find the location you want to put the recoding use again pwd to get the full path
pwd

Другой альтернативой может быть использование переменной $EXTERNAL_STORAGE

adb shell "screencap -p $EXTERNAL_STORAGE/screen.png"
...