Ich möchte lernen, wie man in die Zwischenablage eines verwurzelten Android-Geräts schreibt (und wenn möglich daraus liest).
Ich hoffe, dies mithilfe von ADB über USB tun zu können, und ich bin nicht daran interessiert, Apps zu installieren, die mir dabei helfen, da dies etwas ist, das ich selten vorhabe.
Anregungen oder Hilfe, die mich in die richtige Richtung leiten, wären sehr dankbar.
adb
system
copy-paste
ErdeMeLon
quelle
quelle
Antworten:
Ja, das können Sie tatsächlich. Es sieht etwas klobig aus, wenn Sie die Zwischenablage untersuchen, aber es funktioniert einwandfrei.
Zuallererst können Sie den aktuellen Inhalt der Zwischenablage mit
service call clipboard 1
einer AdB-Shell (oder, ohne vorher zu schälenadb shell service call clipboard 1
) überprüfen . Es kann nach einem Neustart zunächst leer sein, zum Beispiel:Sie können Text in die Zwischenablage
service call clipboard 2
einfügen, indem Sie 3 Parameter verwenden - zwei Zoll und die Zeichenfolge, die Sie in die Zwischenablage einfügen möchten:Um ehrlich zu sein, bin ich mir nicht sicher, was die ersten beiden Parameter sind. Eine Antwort auf Stack Overflow hat ergeben, dass das erste int "Anzahl der Elemente im Paket" ist (eines in diesem Fall) und dass das zweite die Länge der Zeichenfolge ist. Ich habe jedoch 0 für den zweiten Parameter verwendet, und es funktioniert einwandfrei, und ich kann keine Dokumentation finden, die mit dieser bestimmten Funktion übereinstimmt. Nehmen Sie diese also für das, was sie wert ist.
In jedem Fall wird ein Parcel-Objekt mit drei Feldern erstellt und anschließend in die Zwischenablage übertragen. Die Zwischenablage entpackt dann das Paket und legt den als Inhalt der Zwischenablage übergebenen Zeichenfolgenwert fest. Sie können dies sehen, wenn Sie anschließend den Wert abrufen:
Wenn Sie lange auf ein Texteingabefeld drücken und anschließend auf "Einfügen" klicken, erhalten Sie den Text, der über die
call service clipboard 2
obige Zeile eingegeben wurde (und er sieht ganz normal aus).(Die obigen Beispiele stammen von meinem HTC EVO mit CyanogenMod 7)
quelle
'........U.n.k.n.' 'o.w.n. .p.a.c.k.' 'a.g.e. ..... ')
bei der Herstellungcall service clipboard 2
Ich habe diese Methode verwendet und sie hat in 4.x einwandfrei funktioniert, bei Lollipop ist sie jedoch fehlgeschlagen. Auf der Suche nach einer alternativen Lösung habe ich Folgendes gefunden: https://stackoverflow.com/questions/3391160/paste-text-on-android-emulator
Es ist nicht genau so, wie Sie es wollten, aber für mich selbst ist es das meiste Mal, wenn ich Text in die Zwischenablage kopieren möchte, weil ich ihn in das Passwortfeld einfügen möchte.
Als zusätzlichen Bonus gibt es hier mein Skript ( bearbeitet am 24.04.2015, um Leerzeichen im Text zuzulassen ):
quelle
echo "$TEXT" | adb shell xargs -0 input text
leiten. Dabei sollte jeder Text außer \ 0 (NUL) Zeichen verarbeitet werden. Leider leiten ältere adb-Versionen stdin nicht an einen in der adb-Befehlszeile angegebenen Befehl weiter. Dies ist in neueren adb-Versionen behoben, aber es benötigt Android N, um zu funktionieren .input
Befehl auf dem Android-Gerät benötigt, nicht für die von verwendete Shelladb shell
. Außerdem wird es laut dieser Antwort nur für SDK-Version 22 und niedriger (Lollipop und niedriger, glaube ich) benötigt .Hier ist eine verbesserte Version des Skripts von Galets oben. Wie bei diesem Skript wird nicht in die Zwischenablage geschrieben, sondern es werden Eingaben in das aktuell fokussierte Eingabefeld gesendet, was häufig sowieso gewünscht wird.
Dieses Skript wurde verbessert, um Sonderzeichen zu vermeiden und die Android-Shell nicht damit zu verwechseln. Dadurch sollte es möglich sein, dass eine beliebige Zeichenfolge unverändert gesendet wird. Um zu verhindern, dass der
read
Befehl einen (nachgestellten) Backslash interpretiert, habe ich dort -r hinzugefügt.Dies wurde anhand der folgenden Liste von Sonderzeichen getestet:
Hier ist das Skript:
quelle
Ich habe ein wenig versucht und gegoogelt und es scheint, dass der Call-Service-Clipboard-Ansatz in neueren Androids nicht mehr funktioniert, er ist für mich auf einer 4.4.4-Version von Android fehlgeschlagen. Dh Sie benötigen eine App, um Zugriff auf die Zwischenablage (Lesen und Schreiben) von adb-shell zu erhalten. Ich benutze Clipper von Majido auf Github . Das apk wird ebenfalls gehostet, so dass Sie es nicht selbst kompilieren müssen. Nach der Installation können Sie mit Broadcast-Befehlen kommunizieren (die App teilt Ihnen die genauen Befehle mit). App benötigt kein root.
quelle
Ein weiteres Skript
adb shell input
zum Senden von Zeichen finden Sie hier: https://github.com/gcb/AdbPasteDies ist ein Python-Skript, das von Github geklont oder auch direkt heruntergeladen und ausgeführt werden kann:
quelle