web-dev-qa-db-fra.com

Utiliser ADB pour capturer l'écran

J'essaie d'obtenir une capture d'écran de l'écran du téléphone le plus rapidement possible… .. Je fais actuellement ce qui suit:

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

Cependant, il est trop lent et prend jusqu'à 3 secondes ... Est-ce qu'il y a une meilleure façon de le faire? J'ai l'intention d'utiliser cette fonction avec un téléphone sans fil.

De plus, quels sont les différents arguments que je peux utiliser pour la capture d'écran?

Merci.

EDIT (informations supplémentaires): Je compte utiliser cette méthode pour pouvoir afficher en direct l’écran sur mon ordinateur. La méthode actuelle fonctionne mais elle est trop lente. Je ne peux pas utiliser adb Shell screenrecord car je ne pourrai pas accéder au fichier vidéo pendant son enregistrement.

33
user2513924

Pour que cela fonctionne @ OSX et Linux

adb exec-out screencap -p > screen.png
82
Diego Plentz

https://stackoverflow.com/a/37191719/75579 answer a cessé de fonctionner pour moi sous Android 7 en quelque sorte. Je dois donc le faire de manière manuelle, alors je veux le partager. 


Comment installer

  1. Placez cet extrait de code dans votre fichier ~/.bash_profile ou ~/.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. Exécuter la commande source ~/.bash_profile ou source ~/.profile


Comment utiliser

Utilisation sans spécifier le nom du fichier:

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

Utilisation avec un nom de fichier:

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

J'espère que ça aide!

** Cela ne fonctionnera pas si plusieurs appareils sont branchés

8
I'm a frog dragon

Vous pouvez lire le fichier binaire à partir de stdout au lieu de sauvegarder le png sur la carte sd puis de le tirer:

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

Cela devrait permettre de gagner un peu de temps, mais pas beaucoup.

source: Lire des données binaires stdout à partir du shell adb?

4
Jared Rummler

Pour commencer à enregistrer l’écran de votre appareil, exécutez la commande suivante:

adb Shell screenrecord /sdcard/example.mp4

Cette commande commencera à enregistrer l’écran de votre appareil avec les paramètres par défaut et enregistrera la vidéo obtenue dans un fichier au format /sdcard/example.mp4 de votre appareil.

Une fois l’enregistrement terminé, appuyez sur Ctrl + C dans la fenêtre Invite de commandes pour arrêter l’enregistrement sur écran. Vous pouvez ensuite trouver le fichier d'enregistrement d'écran à l'emplacement que vous avez spécifié. Notez que l’enregistrement d’écran est sauvegardé dans la mémoire de stockage interne de votre appareil et non dans votre ordinateur.

Les paramètres par défaut consistent à utiliser la résolution d’écran standard de votre appareil, à encoder la vidéo à un débit de 4 Mbps et à définir la durée maximale d’enregistrement sur 180 secondes. Pour plus d'informations sur les options de ligne de commande que vous pouvez utiliser, exécutez la commande suivante:

adb Shell screenrecord --help

Cela fonctionne sans enraciner le périphérique. J'espère que cela t'aides.

2
Prem

En utilisant certaines connaissances de cet article et quelques autres, j'ai trouvé que la méthode qui fonctionnait le mieux pour moi était la suivante:

adb Shell 'stty raw; screencap -p'

J'ai posté un script Python très simple sur GitHub qui reflète essentiellement l'écran d'un périphérique connecté via ADB:

https://github.com/baitisj/Android_screen_mirror

2
baitisj

Désolé de vous dire que screencap est une simple commande, n'accepte que quelques arguments, mais aucun d'eux ne peut vous faire gagner du temps. Voici la sortie d'aide -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.

Outre la commande screencap, il existe une autre commande screenshot, je ne sais pas pourquoi screenshot a été supprimée de Android 5.0, mais elle est disponible sous Android 4.4, vous pouvez vérifier le code source à partir de ici . Je n'ai pas fait ma comparaison, qui est plus rapide entre ces deux commandes, mais vous pouvez essayer dans votre environnement réel et prendre la décision finale.

1
alijandro