
Hallo! Haben Sie den Wunsch verspürt, Text auf ein Gerät in der Nähe zu kopieren? Ich möchte, dass es so einfach ist wie das Kopieren und Einfügen in den Emulator - das Tippen mit den Händen ist langweilig und nicht immer bequem.
Und was ist mit dem Hotkey: Klicken Sie darauf, und der Text aus der PC-Zwischenablage beginnt auf dem Bildschirm Ihres Telefons / Tablets zu tippen - es klingt gut, oder?
In diesem Artikel werden wir über die Verwendung von adb als Textkopierwerkzeug sprechen und wie dies bequem durchgeführt werden kann.
Wenn Sie ein erfahrener ADB-Benutzer sind und ein eigenes Skript dieser Art haben, empfehle ich Ihnen, zur Implementierung selbst zu gehen und Ihre Gedanken dazu in den Kommentaren mitzuteilen.
Was und warum
Wir werden ein kleines Skript erstellen, mit dem Sie den Inhalt der Zwischenablage schnell auf einem realen Gerät eingeben können:

Dies ist nützlich, wenn:
- Überprüfen Sie die Arbeit mit Links oder geben Sie eine neue IP ein, um den Proxy auf dem Gerät erneut zu konfigurieren:
http:
- Überprüfen Sie die Eingabe von Sonderzeichen oder geben Sie knifflige Testdaten ein:
v3rY$ecUrEP@s$w0rD
- Musste nur eine lange Schlange eingeben:
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:
BUexKeGHiERJ4YYbd2_Tk8XlDMVEurbKjWOWvrY
Natürlich müssen Sie dies höchstwahrscheinlich nicht regelmäßig tun. Aber von Zeit zu Zeit hatte ich Fälle, in denen es notwendig war, manuell etwas einzugeben, das für das Gerät nicht sehr praktisch war.
Am Ende waren es meistens Testdaten oder API-Einstellungen, und obwohl das Skript keine 5 Minuten sparte, machte es die Arbeit viel besser.
Und wie?
Dies kann mit ADB (Android Debug Bridge) erfolgen . Wahrscheinlich sind alle Entwickler und die meisten QS damit vertraut, zumindest aufgrund der Möglichkeit, Protokolle in Android Studio oder direkt über adb logcat
. Wenn Sie adb noch nicht verwendet haben, finden Sie hier eine Beispielinstallation unter macOS .
Wir interessieren uns für den Befehl adb shell input
, der Eingaben wie tap
oder swipe
.
Sie können damit auch Text übertragen - er wird im Eingabefeld gedruckt, das jetzt im Fokus steht:
adb shell input text <text>
Wenn Sie Leerzeichen eingeben, müssen Sie diese durch %s
und Sonderzeichen ersetzen, die maskiert werden sollen. Sonst funktioniert nichts.
Es ist zu bedenken, dass adb nur mit dem lateinischen Alphabet, den Zahlen und Sonderzeichen der ASCII-Platte funktioniert und die Eingabe etwas eingeschränkt ist:
- Funktioniert nicht mit Zeichen wie
±§
- Funktioniert nicht mit Zeilenumbruch (Sie können den Zeilenumbruch jedoch separat durch einen anderen ADB mit dem Befehl
adb shell input keyevent 66
(enter) oder wie hier beschrieben verursachen.) - Funktioniert nicht mit Kyrillisch
Es gibt eine interessante Problemumgehung für die Eingabe solcher Zeichen. Vielleicht ist es möglich, die Zwischenablage daran zu befestigen, und dann wird jeder Text gedruckt. Richtig, das Gerät muss .apk mit einer Tastatur vorinstallieren.
Wichtig: In der oben und unten beschriebenen Form implizieren adb-Befehle, dass ein Gerät angeschlossen ist. Wenn es mehrere gibt, können Sie Folgendes tun:
1) Rufen Sie den Befehl auf einem bestimmten Gerät auf. -S -s
Sie können die Gerätenummer mit dem Befehl adb devices
. Verwenden Sie dann die Nummer, wenn Sie den Befehl aufrufen:
$ adb devices List of devices attached 023db62er9dd7d2b device $ adb -s 023db62er9dd7d2b shell input text qwe
2) Rufen Sie den Befehl auf einem einzelnen Gerät auf, das über USB verbunden ist - Option -d
:
adb -d shell input text qwe
3) Rufen Sie den Befehl auf dem einzigen aktiven Emulator auf - die Option -e
:
adb -e shell input text qwe
Weitere Details finden Sie hier .
Wenn Sie mit mehreren Geräten arbeiten und diese Fälle Sie betreffen, korrigieren Sie den Befehl adb entsprechend.
Implementierung
Wir werden uns die Lösung für macOS genauer ansehen, aber für andere Systeme gibt es auch einen Weg:
Linux-Lösung
Zu einer Zeit haben die Jungs von KODE ( Dima Suzdalev und Dima Gaiduk ) eine großartige Linux-Lösung entwickelt und sie mit mir geteilt.
Es funktioniert über den X11- Puffer (wenn Sie Wayland haben , lesen Sie unten) - Sie wählen den Text für die Wette aus und klicken dann auf den Hotkey, der das Skript aufruft.
Es ist einfach, einen solchen Hotkey hinzuzufügen:
1) Setzen Sie xclip
2) Fügen Sie eine Skriptdatei hinzu
3) Schreiben Sie den Pfad zum Skript in die Shortcuts-Einstellungen für die Tastatur
Vielen Dank und großen Respekt.
Wichtig: Die obige Lösung funktioniert für X11 (Xorg). Für Wayland ist diese Lösung nicht relevant. Ich konnte immer noch keinen Weg finden, um Inhalte aus dem Puffer in Wayland zu erhalten. Nach meinen Suchanfragen gibt es noch keine solche Möglichkeit. Richtig, wenn nicht richtig.
Wenn Sie nicht wissen, in welcher Umgebung Sie sich befinden, klicken Sie hier. Höchstwahrscheinlich haben Sie X11 und alles wird funktionieren.
Lösung für macOS
Für MacOS Linux passte die Lösung nicht, daher habe ich versucht, ein ähnliches Skript zu adb shell input text <text>
, das den Aufruf des adb shell input text <text>
vereinfacht.
Ich muss sofort sagen - die Arbeit mit sed ist mir nicht klar. Ich habe versucht, mich zu einem Team zusammenzuschließen und die verschiedenen Ersatzspieler ein wenig zu ergänzen, was dazu beitragen würde, Sonderzeichen korrekt zu entkommen.
Wenn Sie herausfinden, wie Sie dieses Skript verbessern können, wird es sehr cool!
Es sieht so aus:
source ~/.bash_profile adb shell input text $(pbpaste | sed -e 's/[_<>|&$;()\"]/\\&/g' -e 's/ /\%s/g' -e 's/!+/!/g')
( source ~/.bash_profile
hinzugefügt, wenn adb in der regulären Konsole funktioniert, aber über Automator (dazu später mehr) wird adb nicht erkannt. Dazu müssen Sie zuerst den Pfad zu adb ~/.bash_profile
- beispielsweise registriert in ~/.bash_profile
.)
Funktioniert wie ein normaler adb shell input text <text>
, aber
- Die Quelle des Textes ist
pbpaste
, pbpaste
die macOS-Zwischenablage. - sed verarbeitet Text aus der Zwischenablage.
- Die Zeichen
_<>&$;()\"
maskiert: - &
-> \&
- Leerzeichen werden durch ein Sonderzeichen ersetzt:
` ->
% s` - Mit einem Ausrufezeichen ist alles kompliziert - wenn mir jemand einen solchen Ersatz erklärt
!
auf !
hilft dem Team, nicht zu fallen - es wird cool.
Windows-Lösung
Leider ( oder nicht ) unter Windows habe ich dies nicht versucht. Die naheliegendste Option, die mir in den Sinn kommt, ist die Anpassung der Lösung und die Installation von Cygwin . Auf diese Weise haben Sie ein praktisches Linux-Terminal zur Hand, was sicherlich nützlich ist.
Sie benötigen das sed
Paket und seine Abhängigkeiten sowie das cygutils-extra
Paket (bietet einen Befehl zum getclip
des Inhalts der Zwischenablage - getclip
ersetzt pbpaste
)
Das Ergebnis wird der Lösung für macOS sehr ähnlich sein:
adb shell input text $(getclip | sed -e 's/[_<>|&$;()\"]/\\&/g' -e 's/ /\%s/g' -e 's/!+/!/g')
Windows 10 bietet auch die Möglichkeit, ein Linux-Terminal sofort einsatzbereit zu machen . Ich habe diese Option nicht ausprobiert, aber sie sollte wie eine Lösung mit Cygwin aussehen.

Skript in Aktion
Vereinfachen Sie die Arbeit
Sie können das Skript jedes Mal auf die Konsole kopieren oder den adb shell input text <something>
mit Ihren Händen adb shell input text <something>
, dies ist jedoch nicht sehr praktisch. Es ist einfacher, einen Alias zu erstellen oder einen Hotkey zuzuweisen.
Informationen zum Alias für die Konsole
Die Schwierigkeit hierbei ist, dass Sie im Alias selbst immer noch alle $
und "
alias adp='adb shell input text'
müssen, damit es funktioniert. Ich habe dies noch nicht getan, da der Hotkey für mich bequemer ist. alias adp='adb shell input text'
, ich habe diesen zuvor verwendet - alias adp='adb shell input text'
hat geholfen, ein Wort wie ein adp example
. Wenn jemand mit einem Skript einen Alias für sich selbst erstellt, schreiben Sie - fügen Sie ihn hier hinzu.
Informationen zum Hotkey, mit dem das Skript ausgeführt wird
Wenn wir über eine Linux-Lösung sprechen, hängt alles von der Distribution ab, ist aber auch nicht schwierig.
Die Windows-Lösung unter Cygwin ist ein einfacher Weg.
Ursprünglich war der Artikel für den internen Gebrauch bestimmt, daher wird die Methode für macOS ausführlicher beschrieben. Sie können sie unten sehen:
Methode für macOS:Es gibt viele Möglichkeiten, dies zu tun, aber Automator
ist standardmäßig installiert - Sie können schnell einen Hotkey damit erstellen.
Führen Sie zunächst Automator
und wählen Sie den Dokumenttyp Service
:

Dann konfigurieren Sie den Dienst:
- Für
service receives
Set no input
- Wählen Sie auf der Registerkarte
Actions
die Aktion Run shell script
ausführen aus

Jetzt können Sie dem neuen Dienst einen Hotkey zuweisen:

Das war's, jetzt sollte das Kopieren auf das Gerät per Hotkey funktionieren.
Der Hotkey-Dienst funktioniert zwar nur in Anwendungen, in denen sich die Registerkarte Services
im Anwendungsmenü befindet:

In der Zeplin-App für macOS gibt es keine solche Registerkarte, daher funktioniert sie dort nicht. Vielleicht können andere Anwendungen zur Verwendung von Skripten diese Einschränkung umgehen, da ich vorerst einen Weg durch Automator gefunden habe.
Es ist auch zu berücksichtigen, dass ein Hotkey dasselbe Google Chrome oder eine andere Anwendung abfangen und seine Aktion anstelle eines Skripts ausführen kann.
Das ist alles
Ich hoffe, dieser Artikel wird nützlich sein und Ihnen helfen, die Lösung solcher Probleme in Ihrer Arbeit zu vereinfachen.