[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Packprogramme: Archive entpacken] [:sudo: Root-Rechte] [:Terminal: Ein Terminal öffnen] [:Editor:Einen Editor verwenden] }}} [[Inhaltsverzeichnis()]] [[Bild(./android-logo.jpg, 64, left)]] '''adb''' ('''A'''ndroid '''D'''ebug '''B'''ridge, aus dem [https://developer.android.com/studio/ Android-SDK] {en}) ist eine Software-Schnittstelle, um vom Computer aus Android-Geräte zu verwalten, Anwendungen zu installieren oder Daten auszutauschen. Es können ggf. auch ganze ROMs installiert ("geflasht") werden (`adb sideload`). Dabei ist eine Verbindung sowohl über USB-Kabel als auch - für einige Funktionen - über WiFi möglich. Das Programm ist unter Windows, iOS und Linux nutzbar. = Installation = Es gibt verschiedene Möglichkeiten, das Programm zu installieren[1]. Aus den offiziellen Quellen kann folgendes Paket installiert werden {{{#!vorlage Paketinstallation android-tools-adb }}} Alternativ kann es aus der Android-SDK-Suite bezogen werden; die beiden Installationsarten schließen sich aber gegenseitig aus: {{{#!vorlage Paketinstallation adb }}} == Fremdquelle == Die jeweils aktuellste Version kann als Teil der SDK Platform Tools von der Download-Seite des Projekts [https://developer.android.com/studio/releases/platform-tools.html Platform Tools] {en}/{dl} bezogen werden. Insbesondere sinnvoll ist die Verwendung für neuere Android-Versionen. Das heruntergeladene Linux-Archiv entpacken[2], die u.a. darin befindliche Datei '''adb''' kann direkt verwendet werden; ggf. für systemweite Nutzung das Programm in ein im [:Umgebungsvariable:`PATH`] vorgesehenes Verzeichnis verschieben/verlinken, z.B. '''~/.local/bin/'''. Die neuere adb-Version verträgt sich nicht mit einer aus den Quellen installierten adb, diese ggf. also wieder deinstallieren! [[Vorlage(Fremd, Software,)]] == Vorbereitung == == udev-Regel == Die passenden [:udev:]-Regeln für verschiedenste Hersteller werden am einfachsten über das Paket '''android-sdk-platform-tools-common''' installiert. Die Regeln befindet sich in '''/lib/udev/rules.d/51-android.rules'''. Bei Bedarf können weitere Hersteller-Einträge hinzugefügt werden. Dazu benötigt man die Hersteller-ID (z.B. aus der [:Systeminformationen_ermitteln/#USB:`lsusb`-Ausgabe:] bei angeschlossenem Gerät auslesbar, erster Teil der ID-Ausgabe). Mit Root-Rechten [3] kann man dann neue Einträge in folgender Form in einem Editor[4] hinzufügen: {{{ #HERSTELLER SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", MODE="0664", GROUP="plugdev" }}} Der Benutzer muss Mitglied in der [:Benutzer und Gruppen:Gruppe] `plugdev` sein, was meist der Fall ist. Bei Problemen ggf. überprüfen. Mit {{{#!vorlage Befehl sudo udevadm control --reload-rules sudo systemctl restart systemd-udevd.service }}} werden die Regeln dann übernommen. Auf GitHub findet sich auch eine gepflegte [github:M0Rf30/android-udev-rules:Sammlung] von Udev-Regeln für Android, die viele aktuelle Geräte umfasst. Diese erfordern jedoch eine gesonderte Installation, etwa muss der Benutzer der Gruppe `adbusers` hinzugefügt werden. Alternativ zum Bearbeiten der systemweiten '''.rules'''-Datei mit Root-Rechten kann man neue Geräte auch in der '''adb'''-spezifischen Konfigurationsdatei '''~/.android/adb_usb.ini''' angeben. Dazu wird eine neue Zeile mit der Hersteller-ID (die ersten vier Stellen vor dem Doppelpunkt) mit `0x` vorangestellt eingetragen. Zum Beispiel: {{{ 0x2a47 }}} Anschließend muss noch der adb-Server neu gestartet werden: {{{#!vorlage Befehl sudo adb kill-server && sudo adb start-server }}} ## [http://linuxwissen.blogspot.de/2015/09/blog-post.html Linuxwissen] {de} erklärt das Vorgehen sowohl für ADB als auch [:MTP:]. [[Bild(./USB-Debugging.png, 200, right)]] == USB-Debugging == Auf dem Android-Gerät muss in den Einstellungen unter den ''"Entwickleroptionen -> USB-Debugging"'' aktiviert werden, damit eine Verbindung zustande kommen kann, bei neueren Android-Versionen ggf. auch die ''"OEM-Entsperrung"'' aktivieren (Bootlader-Entsperrung). Um auf das Gerät zugreifen zu können muss der Zugriff dauerhaft gestattet werden. Beim ersten Ausführen eines adb-Befehls erscheint eine Meldung auf dem Gerät, siehe Abbildung rechts, hier die Checkbox aktivieren, und mit ''"OK"'' bestätigen. Der Akku des Geräts muss gut aufgeladen sein, ebenso auf eine sichere Verbindung zwischen Gerät und Computer achten (keine defekten Kabel oder USB-Ports verwenden, kontinuierliche Stromversorgung des PCs sicherstellen, kein versehentliches Abziehen des USB-Kabels)! {{{#!vorlage Hinweis Es gibt leider Kabel, die nur zum Aufladen genutzt werden können und keine Datenverbindungen ermöglichen. Falls also schon `lsusb` keine zum Gerät passende Ausgabe liefert, sollte man es zunächst mit anderen (neueren) Kabeln versuchen! }}} {{{#!vorlage Warnung Die Verwendung des Programms geschieht auf eigene Gefahr! Vor Verwendung wird die Erstellung eines __kompletten System- und Daten-Backups__ des Geräts dringend empfohlen! Der Eingriff in das Betriebssystem des Geräts stellt immer ein erhebliches potentielles Risiko dar. Daher vorher sehr genau prüfen, ob z.B. das gewählte ROM oder die Apps für das eigene Gerät geeignet sind; bei Fehlverwendung drohen ggf. schwerwiegende Schäden. Mit dem Einsatz erlöschen ggf. die Garantieansprüche an den Geräte-Hersteller, offizielle Software-Updates sind dann nicht mehr bzw. nur nach Herstellung des Ursprungszustand möglich. Bei Schäden wird jegliche Verantwortung und Haftung abgelehnt! }}} = Verwendung = adb ist ein reines Kommandozeilenwerkzeug, die allgemeine Syntax auf der Kommandozeile lautet {{{#!vorlage Befehl adb OPTION BEFEHL }}} Um festzustellen, ob das Android-Gerät erreichbar ist, folgenden Befehl im Terminal [2] eingeben: {{{#!vorlage Befehl adb devices }}} Falls adb in der aktuellen Sitzung noch nicht verwendet worden ist, meldet das Terminal zunächst der Start des adb-Daemons, danach erscheint, wenn alles glatt geht, etwas wie {{{ * daemon not running. starting it now on port 5037 * * daemon started successfully * List of devices attached 5200d6fd904b2200 device }}} Falls stattdessen nach `List of Devices attached` nur eine Leerzeile erscheint, wird das Gerät (noch) nicht erreicht; in den USB-Verbindungs-Einstellungen auf dem Gerät überprüfen, ob ggf. ''"Nur Laden"'' ausgewählt ist. Wenn statt `device` ein `unauthorized` steht, ist die Verbindung zwar erstellt worden, muss auf dem Gerät bestätigt werden; dazu in einer auf dem Gerät gezeigten Meldung den __dauerhaften__ Zugriff bestätigen. Wird neben der Gerätenummer `recovery` ausgegeben, befindet sich das Gerät im [https://www.droidwiki.org/wiki/Recovery Recovery-Modus] {de}. Falls über adb das Gerät - im selben WLAN-Netz wie der Rechner - kabellos verwaltet werden soll, muss ggf. eine entsprechende App auf dem Gerät laufen, siehe dazu den Eintrag auf [https://www.android-user.de/so-nutzen-sie-wireless-adb-via-app-und-kommandozeile/ Android-User.de] {de}, Hintergründe auch auf [https://www.droidwiki.org/wiki/Wireless_ADB Wireless ADB] {de}. Nutzen lässt sich adb für eine Vielzahl von Aufgaben, z.B. Dateitransfer, Synchronisation von Verzeichnissen, Installation und Entfernen von Apps, Wechsel von Geräte-Modi u.v.m.. Die Möglichkeit des Erstellens und Wiedereinspielens von Backups mittels `adb backup` wurde aufgrund von in Android 12 eingeführten [https://developer.android.com/about/versions/12/behavior-changes-12#adb-backup-restrictions Restriktionen] {en} praktisch nutzlos, und ist, als veraltet eingestuft, bereits nicht mehr in der Hilfe erläutert. == Befehle und Optionen == Diese Auflistung stellt die wichtigsten Befehle samt Option von `adb` vor. Für eine volle Übersicht können `adb --help` bzw. die Manpage [man:adb:] konsultiert werden. {{{#!vorlage Tabelle <-3 tableclass="zebra_start3" rowclass="titel"> adb-Befehle und Optionen +++ Befehl, ggf. mit DATEINAME mögliche Optionen Funktion +++ `devices` `-l` listet die verbundenen Gerät auf, ggf. auch als IP-Adresse; `-l` liefert genauere Informationen +++ `connect HOST:PORT`[[BR]]`disconnect HOST:PORT` Verbindet/trennt ein Gerät via TCP/IP, Port 5555 wird verwendet, wenn keine Portnummer angegeben ist. Getrennt werden alle Geräte, wenn keine zusätzliche Angabe gemacht wird +++ `push /COMPUTERPFAD/DATEI /GERÄTEPFAD/DATEI` Kopiert eine Datei vom Computer auf das Gerät +++ `pull /GERÄTEPFAD/DATEI /COMPUTERPFAD/DATEI` `-a` Kopiert eine Datei vom Gerät auf den Computer ,`-a` bewahrt den Zeitstempel und Modus der Datei +++ <^>`sync` <^>`VERZEICHNIS` Kopiere alle veränderten Dateien zum Gerät; Verzeichnis kann '''system''', '''vendor''', '''oem''' oder '''data''' sein, nur diese Partitionen werden synchronisiert; ohne `VERZEICHNIS`-Angabe werden alle synchronisiert, mit `-l` werden diese nur aufgelistet +++ < ^,|6>`reboot` Ohne Option rebootet das Gerät neu ins Hauptsystem. Eine WiFi-Verbindung wird immer unterbrochen! +++ `bootloader` Reboot in den [:fastboot:]-Modus; auf Samsung-Geräten ggf. nicht möglich, siehe [:Heimdall:] +++ `recovery` Reboot in den Recovery-Modus +++ `sideload` Reboot in den Recovery-Modus und Starten des Sideload-Modus; muss ggf. im Recovery-Modus auf dem Gerät aktiviert werden +++ `sideload-auto-reboot` ebenfalls Reboot in den Recovery-Modus, führt zum automatischen Reboot nach Ausführung des Sideload-Befehls. +++ `download` undokumentiert; versetzt Samsung-Geräte in den Download- oder auch ODIN-Modus, bei anderen Geräten bootet das Gerät direkt ins Hauptsystem +++ <^,|8>`install PAKETNAME` [[BR]] `install-multiple PAKETNAME (...)` Installiert `PAKETNAME(N)` auf dem Gerät +++ `-l` Sichert die App mit "forward lock" (nur für Entwickler relevant, siehe auch [https://groups.google.com/forum/#!topic/android-security-discuss/68cBySxGTzA diesen Eintrag] {en} auf Google-Groups zu Android Security ) +++ `-r` ersetzt bestehende App +++ `-t` lässt Testpakete zu +++ `-s` Installiert die App auf eine (externen) SD-Karte +++ `-d` Teilinstallationsinstallation wird zugelassen (nur für `install-multiple` nutzbar) +++ `-p` Rückführung auf ältere Version (nur für "debug"-bare Pakete) +++ `-g` Gewährt alle Laufzeitberechtigungen (ab Android 6 nutzbar) +++ `uninstall PAKETNAME` `-k` Entfernt `PAKETNAME` vom Gerät, `-k` erhält die Daten- und Cache-Ordner auf dem Gerät +++ <^,|7>`backup` `-f DATEI` Dateiname für das Backup, ohne -f wird '''backup.ab''' erzeugt +++ `-apk|-noapk` ermöglicht/verhindert die Sicherung der '''.apk'''-Dateien, Standard: `-noapk` +++ `-obb|-noobb` ermöglicht/verhindert die Sicherung von '''.apk'''-Erweiterungen (aka '''.obb'''), Standard: `-noobb` +++ `-shared|-noshared` ermöglicht/verhindert die Sicherung der gemeinsamen Speicher/SD-Karten-Inhalte des Geräts, Standard `-noshared` +++ `-all` alle installierten Apps werden einbezogen +++ `-system|-nosystem` gibt an, ob bei Verwendung von `-all` die System-Apps einbezogen werden oder nicht; Standard ist `-system` +++ `PAKETE...` Liste der zu sichernden Pakete +++ `restore BACKUP-DATEI` Stellt den vorherigen Zustand aus der `BACKUP-DATEI` wieder her +++ <^|6>`shell` Öffnet eine interaktive Shell auf dem Geräte +++ `-e ESCAPE` Escape-Zeichen festlegen, Standard ist "~" +++ `-n` nicht von stdin lesen +++ `-T|t` verhindert (`-T`)/erzwingt (`-t`) [wikipedia:Pseudoterminal:PTY:]-Zuordnung +++ `-x` unterbindet "remote exit codes" und stdout/stderr-Trennung +++ `BEFEHL...` Shell-Befehle, sinnvoll zur effektiven Nutzung ist eine [wikipedia:Busybox:] auf dem Gerät (ggf. nur für gerootete Geräte umsetzbar) +++ `root`[[BR]]`unroot` Neustart von adb mit/ohne Root-Rechten; das Gerät muss Root-Zugang erlauben, um die Befehle nutzen zu können +++ `usb` Neustart des adb-Servers, um an USB-Ports zu lauschen +++ `tcpip PORT` Neustart des adb-Servers, um an TCP mit `PORT`-Nummer zu lauschen +++ <^>`sideload OTA-PAKET` Installiert `OTA-PAKET` (z.B. ein komplettes ROM). Näheres auch unter [https://twrp.me/faq/ADBSideload.html ADBSideload] {en} auf twrp.me [[Vorlage (Warnung, "Mit größter Umsicht anwenden! Die Installation ungeeigneter OTA-Pakete kann zu __schwerwiegenden Schäden__ führen!")]] }}} Eine ausführliche Anleitung findet sich auch auf dieser [https://developer.android.com/studio/command-line/adb.html adb-Referenz] {en} auf der Projektseite developer.android.com. = Probleme und Lösungen = Da es eine unüberschaubare Anzahl von Android-Geräten gibt, können hier nur generelle Lösungsvorschläge aufgeführt werden. Informationen zu vielen Geräten und Problemen findet man z.B. auf [https://xda-developers.com/ xda-developers] {en}, einem großes Portal rund um Handys, PDAs etc. pp. oder [https://www.nextpit.de/ NextPit] {de}. Hintergrundinformationen liefert z.B. [https://www.droidwiki.org/wiki DroidWiki.org] {de}. == Probleme mit adb root == Falls trotz eines gerooteten Geräts der Befehl `adb root` scheitert, kann die Verwendung der App "adbd-insecure" helfen, die Verbindung zu ermöglichen (siehe diesen [https://forum.xda-developers.com/showthread.php?t=1687590 Forums-Thread] {en} auf xda-developers.com). == WLAN-Verbindung scheitert == Falls auf dem Gerät die App "adbd-insecure" installiert ist, muss diese deaktiviert werden, sonst ist eine WiFi-Verbindung nicht möglich. = Alternativen = * [:Heimdall:] ist ein speziell für Samsung-Geräte entwickeltes Programm zu Flashen. * [:fastboot:] gehört ebenfalls zu den Android Platform Tools. = Links = * [https://developer.android.com/studio/releases/platform-tools.html Download] {en}/{dl} SDK Platform Tools * [https://android.izzysoft.de/articles/named/adb-for-end-users?lang=de#fnref:4 ADB für Anwender] {de}- sehr guter Artikel zur Nutzung * [https://www.androidpit.de/forum/470625/how-to-adb-tutorial-anfaengerfreundlich Einführung] {de} auf androitpit.de * [https://www.droidwiki.org/wiki/Android_Debug_Bridge Android Debug Bridge] {de} - Wiki-Eintrag auf droidwiki.de * [https://mfonville.github.io/android-studio/ Android Studio PPA] {en} - Anleitung zum Installieren von Android Studio * [https://www.android-user.de/ Android-Users] {de} - deutschsprachiges Android-Portal #tag: Hardware, Android, Bildung, Kommunikation