Journal scrcpy, une appli pour afficher et contrôler des devices Android

Posté par  (site web personnel) . Licence CC By‑SA.
38
9
mar.
2018

Bonjour nal,

Je viens te présenter une application que j'ai développée, qui permet d'afficher et de contrôler des devices Android connectés en USB.

scrcpy

Elle se concentre sur :

  • la légèreté (native, affiche uniquement l'écran)
  • les performances (30~60fps)
  • la qualité (1920×1080 ou plus)
  • la faible latence (70~100ms)
  • un démarrage rapide (~1 seconde pour afficher la première image)
  • la non-intrusivité (rien ne reste installé sur le device)

Je l'ai appelée scrcpy.

Il fallait un nom aussi imprononçable que mon précédent projet, gnirehtet (tu te souviens peut-être, je t'avais parlé de sa réécriture en Rust).

Cette fois-ci, c'est une application en C qui utilise SDL et libav/FFmpeg.

Compiler et installer

Pour la compiler et l'installer, tout est expliqué dans le README.

Le plus simple, c'est de prendre la partie serveur déjà compilée (ça t'évitera d'installer Java et le SDK Android).

Ensuite (pour Debian/Ubuntu) :

sudo apt install android-tools-adb ffmpeg libsdl2-2.0.0 \
                 make gcc pkg-config meson \
                 libavcodec-dev libavformat-dev libavutil-dev \
                 libsdl2-dev

# replace by the path where you downloaded scrcpy-server.jar
meson x --buildtype release --strip -Db_lto=true \
    -Dprebuilt_server=/path/to/scrcpy-server.jar
cd x
ninja
sudo ninja install

Quelqu'un a aussi fait un paquet AUR pour Arch.

Exécuter

C'est assez simple :

scrcpy

Il est possible de passer des options, décrites dans l'aide :

scrcpy --help

Une fois l'écran du device affiché, des raccourcis permettent d'effectuer des actions spéciales.

J'espère que cette application pourra t'être utile à l'occasion ;-)

Liens (en anglais)

  • # Ca marche pas et c'est dommage

    Posté par  . Évalué à 2.

    J'ai essaye de lancer ton appli, mais malheureusement rien ne se passe, aucun message d'erreur ni de fichier de log:
    $ scrcpy.exe --help

    $

    Le binaire adb inclus dans l'archive permet pourtant de se connecter au tel en shell.

    Je precise: Je suis sous windows…

  • # peut être le graal?

    Posté par  (site web personnel) . Évalué à 3.

    c'est probablement le graal que je cherche depuis des mois. bon pas très activement mais quand même.
    d'avance merci

    d'avance, parce que pour l'instant j'ai quelques soucis pour tester =)
    le contexte étant que là je suis sur windows et que je ne connais pas vraiment.
    j'ai download le zip qui contient les dll et toussa, branché mon périphérique, le lance scrcpy.exe, et la console n'affiche absolument rien. Curieusement, je peux taper quoi que ce soit après scrcpy.exe et je n'obtiens pas le moindre message d'errreur.

    Si je tente de lancer le serveur .jar, au début pareil aucun message. Si je persiste j'arrive à avoir un message "Impossible de trouver ou charger la clase principale de C:xxxxxxxxxxxxxxxxxxx\scrcpy-server.jar

    concernant adb, pas mieux : le premier run de "adb devices" ne dit absolument rien, le relancer me dit "List of devices attached". (Mais attaché où là je suis bien incapable de le dire.)

    la machine est sous windows 7, 64 bits, java lui est en version 7, et x86.
    un rapport de bug serait t'il utile?

    • [^] # Re: peut être le graal?

      Posté par  (site web personnel) . Évalué à 3.

      Curieusement, je peux taper quoi que ce soit après scrcpy.exe et je n'obtiens pas le moindre message d'errreur.

      cf ce commentaire

      Si je tente de lancer le serveur .jar

      Il ne faut pas faire ça, c'est à lancer sur le device :)

      Concernant adb, pas mieux : le premier run de "adb devices" ne dit absolument rien, le relancer me dit "List of devices attached".

      C'est la source de ton problème : ton device n'est pas reconnu par adb.

      Tu as activé le "debugging USB"? Fais en sorte que ton device soit reconnu.

      Une fois que ce problème sera réglé, ça devrait marcher (même si tu n'auras rien dans la console).

      blog.rom1v.com

    • [^] # Re: peut être le graal?

      Posté par  . Évalué à 2.

      J'avais le même problème, il me manquait le driver qui va bien pour adb. Tu peux commencer par ici pour installer le driver Google: https://developer.android.com/studio/run/win-usb.html

  • # utilisation pour capture d'écran/présentation

    Posté par  (site web personnel, Mastodon) . Évalué à 6.

    Salut,

    ça a l'air intéressant ! Je n'ai pas encore testé, mais ça pourra très certainement me servir pour faire des captures vidéo pour présenter des fonctionnalités, ou pour des démos en conférence. Est-ce qu'il est possible/serait possible d'afficher un indicateur visuel (par exemple un cercle pendant quelques secondes, ou un trait si le doigt/la souris se déplace) à l'endroit où on clique/touche l'écran ? Ça serait super.

    Merci pour le boulot et le partage :)

  • # meson.build

    Posté par  (site web personnel) . Évalué à 1.

    Hello,

    meson x --buildtype release --strip -Db_lto=true -D prebuilt_server=scrcpy-server*.jar
    Error during basic setup:
    
    Neither directory contains a build file meson.build
    

    Une idée de ce qu'il faut faire ?

    Merci, Tcho !

    • [^] # Re: meson.build

      Posté par  (site web personnel) . Évalué à 2.

      Cette commande est à exécuter à la racine du projet.

      Et l'*, ça ne va pas passer ;)

      blog.rom1v.com

      • [^] # Re: meson.build

        Posté par  (site web personnel) . Évalué à 2.

        sudo apt install android-tools-adb ffmpeg libsdl2-2.0.0 make gcc pkg-config meson libavcodec-dev libavformat-dev libavutil-dev libsdl2-dev
        mkdir ~/scrcpy && cd ~/scrcpy
        wget https://github.com/Genymobile/scrcpy/releases/download/v1.0/scrcpy-server-v1.0.jar
        wget https://github.com/Genymobile/scrcpy/archive/master.zip && unzip master.zip
        cd scrcpy-master && meson x --buildtype release --strip -Db_lto=true -Dprebuilt_server=/home/cascador/scrcpy/scrcpy-server-v1.0.jar
        cd x
        ninja
        sudo ninja install
        scrcpy --help
        

        Activer enable debugging en général :
        1. Aller dans Paramètres, Général, A propos du téléphone, Informations sur le logiciel, taper plusieurs fois sur le Numéro de build
        2. Aller dans Paramètres, Général, Options de développement, activer Débogage USB
        3. Brancher le smartphone en USB sur le pc

        scrcpy # sur le pc
        

        On ne peut pas cliquer avec la souris, l'application Signal est toute noire.

        Tcho !

        • [^] # Re: meson.build

          Posté par  (site web personnel) . Évalué à 2.

          On ne peut pas cliquer avec la souris,

          Comment ça?

          l'application Signal est toute noire.

          cf https://linuxfr.org/users/rom1v/journaux/scrcpy-une-appli-pour-afficher-et-controler-des-devices-android#comment-1732031

          blog.rom1v.com

          • [^] # Re: meson.build

            Posté par  (site web personnel) . Évalué à 1.

            T'es au top ;)

            On navigue au clavier, le scrolling avec la molette souris fonctionne mais on ne peut pas cliquer sur une application par exemple. En tout cas, c'est très sympa, merci à toi !

            Tcho !

            • [^] # Re: meson.build

              Posté par  (site web personnel) . Évalué à 2. Dernière modification le 09 mars 2018 à 17:19.

              On navigue au clavier, le scrolling avec la molette souris fonctionne mais on ne peut pas cliquer sur une application par exemple.

              Est-ce que ça ne clique pas au mauvais endroit? C'est possible si tu as 2 écrans avec des dpi différents, dont un hidpi.

              Si c'est le cas, désactive le support hidpi:

              meson x -Dhidpi_support=false
              

              (la qualité vidéo va être moins bonne, mais c'est pour voir si ça vient de là)

              blog.rom1v.com

              • [^] # Re: meson.build

                Posté par  (site web personnel) . Évalué à 1.

                C'est impressionnant le nombre d'étoiles GitHub que tu as ramassé ;)

                Bon sur 3 pc différents (2 fixes et 1 portable), le clic gauche souris ne fonctionne pas. Je suis sur Xubuntu 17.10, le clic droit fonctionne, la molette souris fonctionne mais pas le clic gauche.

                Tcho !

  • # Et sans le SDK android ?

    Posté par  (site web personnel) . Évalué à 2.

    J'ai vu que sur archlinux, il y a package sur AUR - j'ai essayé de l'installer, malheureusement il nécessite tout de même qu'on installe l'Android SDK - est-ce possible de s'en sortir sans facilement en prenant le jar déjà compilé ?

    • [^] # Re: Et sans le SDK android ?

      Posté par  . Évalué à 8.

      J’ai fait un PKGBUILD que je vais publier ce soir sur AUR. En attendant, le voici:

      pkgname=scrcpy-prebuiltserver
      _appname=scrcpy
      pkgver=1.0
      pkgrel=1
      pkgdesc="Display and control of Android devices connected on USB"
      arch=(x86_64)
      url=https://github.com/Genymobile/scrcpy
      license=(Apache)
      depends=(ffmpeg sdl2 android-tools)
      makedepends=(meson)
      conflicts=(scrcpy)
      source=("${url}/archive/v${pkgver}.tar.gz"
              "${url}/releases/download/v${pkgver}/scrcpy-server-v${pkgver}.jar")
      sha256sums=('fda84b2fc6a60bf808f7b87f7c9a985a446bad69d4de8e63e9ce699871f8026f'
                  'b573b06a6072476b85b6308e3ad189f2665ad5be4f8ca3a6b9ec81d64df20558')
      
      package() {
        cd "scrcpy-${pkgver}"
        meson build --buildtype release --strip -Db_lto=true --prefix /usr \
          -Dprebuilt_server="../../scrcpy-server-v${pkgver}.jar"
        cd build
        ninja
        DESTDIR=${pkgdir} ninja install
      }

      Écrit en Bépo selon l’orthographe de 1990

      • [^] # Re: Et sans le SDK android ?

        Posté par  (site web personnel) . Évalué à 2.

        Merci beaucoup ça marche :-)

        Vraiment génial ce truc, ça fait un moment que je cherchais ça.
        Il supporte même le scroll, même si un peu trop sensible je trouve. Et le clavier aussi fonctionne, par contre je peux pas envoyer d’apostrophe (celui du bépo) il faut que je tape une quote droite (') si je veux que ça passe, j’ai pas l’habitude c’est perturbant.
        Je sais pas si c’est possible de régler ces soucis.
        Et j’ai un vrai bug: l’écran est noir si je lance l’application Silence. C’est la seule qui me fait ça dans ce que j’ai testé.

        Question: pourquoi ça se lance pas directement en 1:1?

        • [^] # Re: Et sans le SDK android ?

          Posté par  (site web personnel) . Évalué à 2. Dernière modification le 09 mars 2018 à 16:09.

          Et le clavier aussi fonctionne, par contre je peux pas envoyer d’apostrophe (celui du bépo) il faut que je tape une quote droite (') si je veux que ça passe

          Dans ce contexte, les caractères non-ASCII, c'est compliqué.

          Et j’ai un vrai bug: l’écran est noir si je lance l’application Silence.

          Dans Silence → Paramètres → Vie privée → Protection de l'écran.

          pourquoi ça se lance pas directement en 1:1?

          Pour que la fenêtre du device ne dépasse pas celle du pc.

          blog.rom1v.com

          • [^] # Re: Et sans le SDK android ?

            Posté par  (site web personnel) . Évalué à 2.

            Dans Silence → Paramètres → Vie privée → Protection de l'écran.

            Merci

            Pour que la fenêtre du device ne dépasse pas celle du pc.

            Dans mon cas la taille utilisé au lancement et la taille en 1:1 sont quasiment identique et aucune ne dépasse de mon écran. Donc c’est un peu perturbant.
            Est-ce qu’il y a une option en CLI pour démarrer en 1:1 directement?

            • [^] # Re: Et sans le SDK android ?

              Posté par  (site web personnel) . Évalué à 2. Dernière modification le 09 mars 2018 à 17:17.

              Dans mon cas la taille utilisé au lancement et la taille en 1:1 sont quasiment identique et aucune ne dépasse de mon écran. Donc c’est un peu perturbant.

              Arf, ça rajoute des bordures pour pas que le device colle les bords de l'écran.

              Est-ce qu’il y a une option en CLI pour démarrer en 1:1 directement?

              Pour l'instant, non.

              Tu peux ouvrir une issue (feature request) en expliquant ce que tu dis ici pour pas oublier ;-)

              blog.rom1v.com

      • [^] # Re: Et sans le SDK android ?

        Posté par  . Évalué à 4.

        Un peu en retard par rapport à ce que je prévoyais mais c’est fait:
        https://aur.archlinux.org/packages/scrcpy-prebuiltserver/

        Écrit en Bépo selon l’orthographe de 1990

  • # Enregistrer les touches et pouvoir les rejouer

    Posté par  . Évalué à 1.

    Franchement, le projet est top.
    Ce qu'il manque, c'est de pouvoir enregistrer les touches (éléments ?) à l'écran et pouvoir les rejouer ensuite :)

    En tous cas, bravo !

    • [^] # Re: Enregistrer les touches et pouvoir les rejouer

      Posté par  (site web personnel) . Évalué à 2. Dernière modification le 09 mars 2018 à 17:15.

      Ce qu'il manque, c'est de pouvoir enregistrer les touches (éléments ?) à l'écran et pouvoir les rejouer ensuite :)

      Ah, j'ai aussi fait ça chez Genymobile en utilisant AOA (même sans adb). Mais c'est intégré dans une appli pas open source.

      blog.rom1v.com

  • # Merci

    Posté par  . Évalué à 2.

    Ça change de ce que j'ai pu essayer avant. C'est léger, marche du premier coup, parfait!
    Merci beaucoup!

  • # On parle de scrcpy

    Posté par  . Évalué à 1.

    Sur XDA.

    Aussi, merci pour ce soft : léger, fait le taf et libre !

    (je connaissais Vysor, en non libre)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.