Использование ADB для захвата экрана

Я пытаюсь получить скриншот экрана телефона как можно быстрее. В настоящее время я делаю:

adb shell screencap -p /sdcard/screencap.png && adb pull /sdcard/screencap.png         

Однако он слишком медленный и занимает до 3 секунд. Есть ли лучший способ сделать это? Я намереваюсь использовать эту функцию с невращающимся телефоном.

И каковы различные аргументы, которые я могу использовать для screencap?

Спасибо.

EDIT (дополнительная информация): Я намереваюсь использовать этот метод, чтобы иметь возможность получать живой эфир экрана на моем компьютере. Текущий метод работает, однако он слишком медленный. Я не могу использовать adb shell screenrecord, потому что я не смогу получить доступ к видеофайлу во время его записи.

Ответы

Ответ 1

Чтобы он работал @OSX и Linux

adb exec-out screencap -p > screen.png

Ответ 2

fooobar.com/questions/332460/... ответ прекратил работать для меня на Android 7 как-то. Поэтому я должен сделать это вручную, поэтому хочу поделиться им.


Как установить

  • Поместите этот фрагмент кода в ваш файл ~/.bash_profile или ~/.profile:

    snap_screen() {
      if [ $# -eq 0 ]
      then
        name="screenshot.png"
      else
        name="$1.png"
      fi
      adb shell screencap -p /sdcard/$name
      adb pull /sdcard/$name
      adb shell rm /sdcard/$name
      curr_dir=pwd
      echo "save to `pwd`/$name"
    }
    
  • Запустите команду source ~/.bash_profile или source ~/.profile,


Как использовать

Использование без указания имени файла:

$ snap_screen
11272 KB/s (256237 bytes in 0.022s)
Saved to /Users/worker8/desktop/screenshot.png

Использование с именем файла:

$ snap_screen mega_screen_capture
11272 KB/s (256237 bytes in 0.022s)
Saved to /Users/worker8/desktop/mega_screen_capture.png

Надеюсь, что это поможет!

** Это не будет работать, если несколько устройств подключены к

Ответ 3

Вы можете прочитать двоичный файл из stdout вместо сохранения png на SD-карте и затем потянуть его:

adb shell screencap -p | sed 's|\r$||' > screenshot.png

Это должно сэкономить немного времени, но не много.

source: Чтение двоичных данных stdout из оболочки adb?

Ответ 4

Чтобы начать запись экрана ваших устройств, выполните следующую команду:

adb shell screenrecord /sdcard/example.mp4

Эта команда начнет запись экрана ваших устройств с использованием настроек по умолчанию и сохранит результирующее видео в файле /sdcard/example.mp4 на вашем устройстве.

Когда вы сделаете запись, нажмите Ctrl + C в окне командной строки, чтобы остановить запись на экране. Затем вы можете найти файл записи экрана в указанном вами местоположении. Обратите внимание, что запись на экране сохраняется на вашем внутреннем хранилище устройств, а не на вашем компьютере.

Настройки по умолчанию - это стандартное разрешение экрана вашего устройства, кодирование видео с битрейтом 4 Мбит/с и установка максимального времени записи экрана на 180 секунд. Для получения дополнительной информации о параметрах командной строки, которые вы можете использовать, выполните следующую команду:

adb shell screenrecord --help

Это работает без укоренения устройства. Надеюсь, это поможет.

Ответ 5

Используя некоторые знания из этого и нескольких других сообщений, я нашел метод, который работал лучше для меня:

adb shell 'stty raw; screencap -p'

Я опубликовал очень простой Python script в GitHub, который по существу отражает экран устройства, подключенного через ADB:

https://github.com/baitisj/android_screen_mirror

Ответ 6

Извините, что вам просто screencap просто простая команда, принимайте только несколько аргументов, но ни один из них не может сэкономить вам время, вот вывод справки -h.

$ adb shell screencap -h
usage: screencap [-hp] [-d display-id] [FILENAME]
-h: this message
-p: save the file as a png.
-d: specify the display id to capture, default 0.
If FILENAME ends with .png it will be saved as a png.
If FILENAME is not given, the results will be printed to stdout.

Помимо команды screencap, есть еще одна команда screenshot, я не знаю, почему screenshot был удален из Android 5.0, но он доступен ниже Android 4.4, вы можете проверить источник из здесь. Я не делал сравнения между этими двумя командами быстрее, но вы можете попробовать свои силы в реальной среде и принять окончательное решение.