Wie führe ich "adb shell" - Befehle in ein terminal-emulator, der lokal auf einem Android-Gerät?
Aus einer shell auf meinem PC, ich kann laufen adb shell cmd package list packages
, und erhalten eine Liste aller installierten Pakete. Ich würde gerne diese und ähnliche Befehle lokal auf meinem Android-Handy (Nexus 6P) in einem terminal-emulator (derzeit mit Termux).
Wenn ich öffnen Sie die gleiche shell mit /system/bin/sh
, und dann versuchen, führen Sie /system/bin/cmd package list packages
, passiert nichts (keine Fehler, einfach nichts Ausgänge und lädt die Eingabeaufforderung).
Wenn ich /system/bin/cmd -l
die Liste der Optionen wird angezeigt, wie erwartet. $PATH
und $LD_LIBRARY_PATH
sind die gleichen, die in beiden Umgebungen. Ein wichtiger Unterschied ist, dass echo $USER
gibt "shell" aus adb shell
, aber zurück zu meinem lokalen Benutzernamen aus /system/bin/sh
gestartet Termux.
Gibt es eine Möglichkeit, zu replizieren, das Verhalten der Befehle ausführen, von adb shell
in einem terminal-emulator, der lokal auf Android?
Bearbeiten:
Mein Gerät ist verwurzelt, und ich bin OK mit root nur Lösungen.
Danke für den link. Ich denke aber, dass link tatsächlich versucht, zu tun das entgegengesetzte von, was ich will: emulieren das Verhalten von termux von adb. Eigentlich möchte ich, um zu emulieren das Verhalten der Befehle ausführen, von
adb shell
in einer shell ausgeführt wird, lokal auf dem Gerät. Meine Verwirrung ist, dass ich bin läuft die gleiche binary unter Verwendung der gleichen shell-binary auf dem gleichen Gerät und immer einen anderen Ausgang (technisch keine Ausgabe beim ausführen lokal).InformationsquelleAutor rjdang | 2017-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist Termux. Durch design, Termux läuft nur (oder meistens?) das Linux-Kommandozeilen-Programme, die Sie installieren innerhalb Termux die Verwendung von apt oder das neuere "Heimat" - Paket-management-Schnittstelle, z.B. apt installieren bsdtar. Was Sie benötigen, um ausführen die adb-shell-Befehlen ist ein terminal-emulator, der wirklich Zugriff auf das zugrunde liegende Android-Dateisystem, nicht nur die Termux das ist praktisch eine chroot-speichern für die Tatsache, dass es ist bewusst, es ist nicht ausgeführte Befehle aus dem root-Dateisystem /.
Als ein einfacher test, führen Sie den folgenden Befehl ein:
Sollte es wieder so etwas wie
/system/bin/ls
. Aber wenn es gibt so etwas wie/data/data/com.termux/files/usr/bin/applets/ls
dann müssen Sie ändern Sie Ihre terminal-emulator, um etwas anderes. Ich vermute, dass Termux konzipiert wurde, berücksichtigen, die weitere restriktive shell-Ausführung Richtlinien von Google umgesetzt, nachdem KitKat oder Android 4.X.Android-distribution, die ich verwende, LineageOS 14.1, kommt mit einem built-in-shell-emulator, der mir erlaubt, Befehle ausführen, finden Sie in /system/bin/ls.
InformationsquelleAutor Need to Eat Breakfast
Ich nicht verwurzelt Nougat Gerät handlich, aber etwas wie die folgenden sein, eine ausreichend enge Annäherung an
adb shell
(vorausgesetzt, Sie verwenden SuperSU):Ich (sehr kurz) getestet, die es aus Termux auf einem gerooteten Marshmallow-Gerät.
Erarbeiten:
-i
flag wird verwendet, um beginnen mit einer leeren UmgebungUSER=shell
ist nicht speziell erforderlich, aber für einige Grundsu
sich weigert zu laufen, mit einer völlig leeren Umgebung$(PATH=/system/xbin:/system/bin:/su/bin:/sbin:/magisk/.core/bin which su)
Punkte, um den vollständigen Pfad der su binary auf Ihrem Gerät, und Sie können auch hardcoded werden, wenn Sie es vorziehenshell
weist diesu
binäre melden Sie sich als shell-user (die gleichen wieadb shell
)--context u:r:shell:s0
setzt die entsprechenden SELinux-Kontext--shell /system/bin/sh
weist SuperSU zu nutzen, die system-shell anstatt eigenesush
shellEine andere option wäre, tatsächlich ausführen adb vom Gerät verbindet sich über TCP. Wenn Sie einige Funktionen, die nur über adb (z.B. in meinem Fall war es
adb forward
) dann kann dies Ihre einzige option. Leider ist das nicht besonders angenehm.War ich nicht in der Lage zu finden, Erfolg mit allen öffentlich verfügbaren adb-binaries, so Baue ich es mir selbst mit ein paar kleinen änderungen. Sie können die Quellen, die ich verwendet, und die änderungen, die ich an https://github.com/shakalaca/fastboot-adb-android und https://github.com/brbsix/fastboot-adb-android, beziehungsweise.
Sobald Sie adb installiert haben, hier ist eine gekürzte Liste der Befehle, die ich verwendet, um eine Verbindung zu dem Gerät:
Herunterfahren:
adb shell
null in Termux mit deinem Befehl. Muss eine änderung in Nougat?Arbeitete für mich auf der Torte.
InformationsquelleAutor Six