Ich möchte eine Diagnose-App von adb
installieren und Daten aus einem Bash-Skript zurück erhalten. Ich weiß, wie man eine Aktivität von adb
startet, aber ich kann keine Möglichkeit finden, Daten zurück zu bekommen, es sei denn vielleicht, wenn ich auf logcat
drucke und die Ausgabe parse, aber das klingt wie ein Hack. Gibt es eine Möglichkeit, Daten von einer Aktivität zu empfangen, die mit adb
gestartet wurde?Senden Sie Daten zurück an das Skript, das die Aktivität über adb gestartet hat shell am start
Antwort
Wenn die Daten, die Sie zurück zu Ihrem Automatisierungs-Script senden möchten könnte in eine Zeichenfolge von weniger als 4k Länge serialisiert werden - mit logcat
ist eine natürliche Wahl. So stellen Sie Ihre Aktivität, die Daten in das Protokoll mit Log.i("TAG", "DATA=" + your_data_string);
und verwenden Sie die folgenden Befehle in Ihrer Automatisierungs Skript drucken die Ausgabe zu erfassen:
# clear the logcat buffer
adb logcat -c
# start your activity
adb shell am start <INTENT>
# this line will block until a string with "TAG" tag and "Info" priority and
# starting with "DATA=" is printed to the main log
adb shell 'logcat -b main -v raw -s TAG:I | (grep -q ^DATA= && kill -2 $((BASHPID-1)))'
# now you can capture the data and process it
DATA=$(adb logcat -d -b main -v raw -s TAG:I | grep ^DATA=)
Es gibt ein kleines In/Out bash Beispiel:
1. Vorbereitung:
tmpfile=$(mktemp /tmp/adb-XXXXXXXXX)
exec 5> >(adb shell >$tmpfile)
exec 6<$tmpfile
rm $tmpfile
Dann könnte man auf &5
schreiben und lesen von &6
:
read -t .1 -u 6 foo;echo $foo
[email protected]:/ $
read -t .1 -u 6 foo;echo $foo
echo date >&5
read -t .1 -u 6 foo;echo $foo
date
read -t .1 -u 6 foo;echo $foo
Sat Dec 17 18:20:35 CET 2016
Nota: Ich rm $tmpfile
Aus Sicherheitsgründen, aber während Deskriptoren geöffnet bleiben, können Sie sie verwenden (Timeout-Option read
Arbeit ganz gut mit while
Loop):
>&5 echo uptime
while read -t .1 -u 6 foo;do echo $foo;done
uptime
up time: 08:16:42, idle time: 01:20:19, sleep time: 06:47:13
Und
ls -l $tmpfile
ls: cannot access /tmp/adb-hbmJrFVX4: No such file or directory
ls -l /proc/self/fd
total 0
lrwx------ 1 user user 64 Dec 17 18:24 0 -> /dev/pts/8
l-wx------ 1 user user 64 Dec 17 18:24 1 -> pipe:[22316547]
lrwx------ 1 user user 64 Dec 17 18:24 2 -> /dev/pts/8
l-wx------ 1 user user 64 Dec 17 18:24 5 -> pipe:[22316558]
lr-x------ 1 user user 64 Dec 17 18:24 6 -> /tmp/adb-hbmJrFVX4 (deleted)
Wenn Sie fertig sind, in der Nähe alles:
>&5 echo exit
while read -t .1 -u 6 foo;do echo $foo;done
exit
exec 5>&-
exec 6<&-
Wie genau ist das für die ursprüngliche Frage relevant? –
Scheint, ich verstehe die Frage nicht gut, aber als * adb für die Diagnose verwenden * meine * USB-Brücke verbunden *, wenn Sie etwas über Bridge debuggen möchten, ist dies eine effiziente [tag: bash] Möglichkeit zum Schreiben interaktiver Schrift durch * adb * . –
Mit dem gleichen Prinzip arbeiten Sie schön mit 'ssh', aber für mysql habe ich' exec 5>> (stdbuf -oL mysql -ANu Benutzername Datenbank> $ tmpfile) ' –
- 1. Android - So senden Sie Daten zurück an die aufrufende Aktivität
- 2. Ist es möglich, die Aktivität über die Adb-Shell zu starten und ihre Antwort zu erhalten?
- 3. Android-Inhaltsanbieter über die Befehlszeile abfragen (AdB-Shell)
- 4. Was macht 'adb shell start/stop'?
- 5. Senden Sie Nachrichten an das Programm über die Befehlszeile
- 6. Übergeben Sie MySQL-Variablen über die Befehlszeile an das Skript
- 7. So senden Sie Daten von einer Aktivität an die Schnittstelle
- 8. Shell-Skript beim Start der Instanz ausführen
- 9. Call & führen Sie das Shell-Skript innerhalb Skript
- 10. Daten zurück zu einer vorherigen Aktivität senden
- 11. Wie überprüft man, ob launchd das Skript gestartet hat?
- 12. shell/batch scripting, um Befehle an adb shell zu leiten
- 13. JSON über AJAX an PHP-Skript senden
- 14. das Netzwerk C# senden Daten über
- 15. Senden von AT-Befehlen über ADB Android
- 16. So erhalten Sie Extras von derzeit laufenden Aktivitäten über ADB
- 17. Wie nehmen Sie kaufmännische Und-Zeichen in URLs für adb-Shell am Start?
- 18. An das Fach senden Schließen
- 19. Senden von Daten vom Dienst an Aktivität
- 20. Ausführen von Python Socket-Skript über ADB
- 21. Empfängerdaten an Aktivität senden
- 22. Wie die Testergebnisse abzurufen, wenn Befehl "adb shell am Instrument"
- 23. Senden Sie Daten an php (form method = post) und dann senden Sie es zurück an Javascript
- 24. Wie senden Sie Crawler-Daten über die Befehlszeile an PHP?
- 25. So starten Sie das Knurren über die Befehlszeile
- 26. Android adb shell am startservice: Fehler nicht gefunden
- 27. Disown Shell, sobald ein Prozess mit Shell-Skript gestartet
- 28. So senden Sie Daten von einem Fragment an eine Aktivität?
- 29. Wie Post-Daten zurück an das Formular übergeben
- 30. starten Sie eine Aktivität mit Absicht und deaktivieren Sie die Zurück-Taste drücken Sie vom Start der vorherigen Aktivität
Druck auf Logcat und dann für das Ergebnis Parsen ist kein Hack –
@ AlexP. Okay, in diesem Fall können Sie oder jemand mir sagen, wie Logcat zu öffnen und auf ein Ergebnis warten? Wenn ich "logcat -d" sofort nach dem Start starte, ist die Ausgabe noch nicht da und ich rate nicht, wie lange der Prozess dauern wird. –
verwenden Sie einfach "am Anfang -W" –