Scrcpy vorgestellt – Steuere dein Android-Smartphone von deinem PC aus.

Smartphones sind ein wesentlicher Bestandteil des modernen Lebens. Für manche Menschen ist das Telefon noch wichtiger als ein normaler Computer. Viele Leute sitzen den ganzen Tag am Computer, aber sie müssen immer noch ihr Smartphone zu bestimmten Zwecken überprüfen. Ein neues Tool namens „scrcpy“ ermöglicht es euch, euren Smartphone-Bildschirm auf eurem Computer mit nur einem USB-Anschluss und ADB anzuzeigen. Es ist kein Root erforderlich. Der Entwickler sagt, dass scrcpy unter Windows, Mac und Linux funktioniert, indem es einen Server auf dem Gerät ausführt. scrcpy kommuniziert mit dem Server über einen Socket mittels eines adb-Tunnels. Dein Bildschirm wird als h.264-Video gestreamt, das dann dekodiert und von scrcpy angezeigt wird. Tastatur- und Maus-Eingaben werden an den Server gesendet und an das Gerät weitergeleitet. scrcpy konzentriert sich auf Leichtigkeit, Leistung, Qualität, niedrige Latenzzeiten, schnelle Inbetriebnahme und störungsfreie Bedienung.

Hier wird erläutert, wie man das System einrichtet.

  • Hol dir die neueste Zip-Datei von Github und entpacke sie.
  • Richte den ADB-Zugang auf deinem Computer ein.
  • Öffne eine Eingabeaufforderung oder ein Terminal innerhalb des zuvor extrahierten Ordners und tippe scrcpy ein. Das ist es!

Die Interaktion mit dem Smartphone ist so einfach, wie man es sich erträumt hat. Klicke einfach, um zu tappen und zu klicke und ziehe, um zu swipen. Die Ausrichtung der App sollte auch auf den Bildschirm übertragen werden.

Willst Du mehr zur Funktionsweise erfahren, empfehle ich Dir die Lektüre der nachfolgenden Abschnitte.

Wie funktioniert scrcpy?

Die Anwendung führt einen Server auf dem Gerät aus. Der Client und der Server kommunizieren über einen Socket mittels eines adb-Tunnels. Der Server streamt ein H.264-Video des Gerätebildschirms. Der Client dekodiert die Videobilder und zeigt sie an. Der Client erfasst Eingabe-Ereignisse (Tastatur und Maus), sendet sie an den Server, der sie wiederum an das Gerät sendet. Die Dokumentation enthält weitere Details. Hier werde ich einige technische Aspekte der Anwendung erläutern, die wahrscheinlich und insbesondere für Entwickler interessant sein könnten.

Latenzzeiten minimieren

Keine Pufferung

Die Kodierung, Übertragung und Dekodierung des Videostroms erfordert Zeit. Um die Latenz zu minimieren, müssen wir jede zusätzliche Verzögerung vermeiden. Zum Beispiel, lasst uns den Bildschirm mit Screenrecord streamen und mit VLC abspielen:

adb exec-out screenrecord --out-format=h264 - | vlc - --demux h264

Zunächst funktioniert es, aber schnell steigt die Latenzzeit und Frames werden gebrochen. Der Grund dafür ist, dass VLC ein PTS mit Frames verknüpft und den Stream puffert, um Frames zu einem bestimmten Zeitpunkt wiederzugeben.Zunächst funktioniert es, aber schnell steigt die Latenzzeit und Frames werden unterbrochen. Der Grund dafür ist, dass VLC ein PTS mit Frames verknüpft und den Stream puffert, um Frames zu einem bestimmten Zeitpunkt wiederzugeben. Infolgedessen druckt es solche Fehler manchmal auf stderr:

ES_OUT_SET_(GROUP_)PCR  is called too late (pts_delay increased to 300 ms)

Frames überspringen

Wenn aus irgendeinem Grund das Rendering verzögert wird, werden dekodierte Frames gelöscht, so dass scrcpy immer den letzten dekodierten Frame anzeigt. Man beachte, dass dieses Verhalten durch ein Konfigurationsflag geändert werden kann:

mesonconf x -Dskip_frames=false

Ausführen einer Java-Main auf Android

Das Erfassen des Gerätebildschirms erfordert einige Berechtigungen, die der Shell gewährt werden. Es ist möglich, Java-Code als Shell auf Android auszuführen, indem man app_process aus der adb-Shell heraus aufruft.

Hallo, Welt!

Hier ist eine einfache Java-Anwendung:

public class HelloWorld {
public static void main(String… args) {
System.out.println("Hello, world!");
}
}

Lasst es uns kompilieren und auflösen:

javac -source 1.7 -ziel 1.7 HelloWorld.java
"$ANDROID_HOME"/build-tools/27.0.2/dx \
--dex --output classes.dex HelloWorld.class

Dann pushen wir classes.dex auf ein Android-Gerät:

adb push classes.dex /data/local/tmp/tmp/

Und führen es aus:

$ adb shell CLASSPATH=/data/local/tmp/classes.dex app_process / HelloWorld
Hallo, Welt!

Zugriff auf das Android-Framework

Die Anwendung kann zur Laufzeit auf das Android-Framework zugreifen. Lasst uns zum Beispiel android.os.SystemClock verwenden:

import android.os.SystemClock;

public class HelloWorld {
public static void main(String… args) {
System.out.print("Hello,");
SystemClock.sleep(1000);
System.out.println(" world!");
}
}

Wir verlinken unsere Klasse mit android.jar:

javac -source 1.7 -ziel 1.7 \
-cp "$ANDROID_HOME"/platforms/android-27/android.jar
HelloWorld.java

Dann führen wir es wie bisher aus. Zu beachten ist, dass scrcpy auch auf versteckte Methoden aus dem Framework zugreifen muss. In diesem Fall ist die Verlinkung gegen android.jar nicht ausreichend, also wird die Reflexion verwendet.

Wie ein APK

Die Ausführung funktioniert auch, wenn classes.dex in ein zip/jar eingebettet ist:

jar cvf hello.jar classes.dex
adb push hello.jar /data/local/tmp/tmp/
adb shell CLASSPATH=/data/local/tmp/hello.jar app_process / HelloWorld

Kennst du ein Beispiel für eine zip mit classes.dex? Eine APK! Daher funktioniert es für jedes installierte APK, die eine Klasse mit einer Hauptmethode enthält:

$ adb install myapp.apk

$ adb shell pm Pfad mein.app.package
Paket:/data/app/my.app.package-1/base.apk
$ adb shell CLASSPATH=/data/app/my.app.package-1/base.apk \
app_process / HelloWorld

In Scrcpy

Um das Build-System zu vereinfachen, entschied sich der Entwickler, den Server als APK mit gradle zu bauen, auch wenn es sich nicht um eine echte Android-Anwendung handelt: gradle bietet Aufgaben für die Ausführung von Tests, die Überprüfung des Styles, etc. an. Auf diese Weise aufgerufen, ist der Server berechtigt, den Gerätebildschirm zu erfassen.

Werbeanzeigen

Seiten: 1 2

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Create a website or blog at WordPress.com

Nach oben ↑

Sascha Vilz

Langenfeld, Kreis Mettmann, NRW, Deutschland, Europa, und die Welt

Caschys Blog

Smart Home, Software, Hardware, Mobile Computing & Co

nadjasgeeky.wordpress.com/

Welcome to all the geekful things.

Kreativ Blog - DIY & Gadgets

DIY Blog aus Österreich für kreative Projekte und smarte Produkte

USCarlos

Coffee, Tech, Family, and Fun

Was (keine) Freude Macht

Weniger ist mehr

Apple4youngsters

All about Technic

Apple Support Service

News, Support, Tipps und Tricks

Smartphone Guru

Welcome to my Blog about Android, Tech and the Digitized World!

%d Bloggern gefällt das: