Uso di ADB per acquisire lo schermo

Sto cercando di ottenere uno screenshot dello schermo del telefono il più velocemente ansible. Attualmente, sto facendo:

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

Tuttavia è troppo lento e richiede fino a 3 secondi. C’è un modo migliore per farlo? Intendo usare questa funzione con un telefono senza radici.

Inoltre quali sono i diversi argomenti che posso usare per screencap?

Grazie.

EDIT (informazioni extra): Intendo usare questo metodo per essere in grado di ottenere un feed dal vivo dello schermo sul mio pc. Il metodo attuale funziona tuttavia è troppo lento. Non riesco ad usare adb shell screenrecord perché non sarò in grado di accedere al file video mentre viene registrato.

Per farlo funzionare @ OSX e Linux

 adb exec-out screencap -p > screen.png 

https://stackoverflow.com/a/37191719/75579 risposta ha smesso di funzionare per me in Android 7 in qualche modo. Quindi devo farlo in modo manuale, quindi voglio condividerlo.


Come installare

  1. Metti questo frammento di codice nel tuo file ~/.bash_profile o ~/.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" } 
  2. Esegui il comando source ~/.bash_profile o source ~/.profile ,


Come usare

Utilizzo senza specificare il nome file:

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

Utilizzo con un nome file:

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

Spero che sia d’aiuto!

** Questo non funzionerà se sono collegati più dispositivi

Puoi leggere il binario dallo stdout invece di salvare il png sulla sdcard e poi tirarlo:

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

Questo dovrebbe risparmiare un po ‘di tempo, ma non molto.

fonte: leggi i dati binari di stdout dalla shell adb?

Usando alcune delle conoscenze di questo e di un paio di altri post, ho trovato che il metodo che ha funzionato meglio per me era:

adb shell 'stty raw; screencap -p'

Ho pubblicato uno script Python molto semplice su GitHub che rispecchia essenzialmente lo schermo di un dispositivo collegato tramite ADB:

https://github.com/baitisj/android_screen_mirror

Per avviare la registrazione dello schermo del tuo dispositivo, esegui il seguente comando:

 adb shell screenrecord /sdcard/example.mp4 

Questo comando inizierà a registrare lo schermo del dispositivo utilizzando le impostazioni predefinite e salva il video risultante in un file nel file /sdcard/example.mp4 sul dispositivo.

Quando hai finito di registrare, premi Ctrl + C nella finestra del prompt dei comandi per interrompere la registrazione dello schermo. È quindi ansible trovare il file di registrazione dello schermo nella posizione specificata. Si noti che la registrazione dello schermo viene salvata nella memoria interna del dispositivo, non nel computer.

Le impostazioni predefinite servono per utilizzare la risoluzione dello schermo standard del dispositivo, codificare il video con un bitrate di 4 Mbps e impostare il tempo massimo di registrazione dello schermo su 180 secondi. Per ulteriori informazioni sulle opzioni della riga di comando che è ansible utilizzare, eseguire il seguente comando:

 adb shell screenrecord --help 

Funziona senza fare il root del dispositivo. Spero che questo ti aiuti.

Mi spiace dirti di screencap solo un semplice comando, accetta solo pochi argomenti, ma nessuno di loro può farti risparmiare tempo, ecco l’output -h help.

 $ 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. 

Oltre al comando screencap , c’è un altro screenshot comando, non so perché lo screenshot stato rimosso da Android 5.0 , ma è disponibile sotto Android 4.4 , puoi controllare la fonte da qui . Non ho fatto il mio confronto, che è più veloce tra questi due comandi, ma puoi dare la tua prova nel tuo ambiente reale e prendere la decisione finale.