Android Debug Bridge - adb

Mise à jour : Debian 9.5 - Android 7/8/9 - adb 1.0.36

Android Debug Bridge (ADB) est un programme permettant d'envoyer des commandes et d'échanger des informations entre un PC et un périphérique Android. Cette interaction est possible lorsque le périphérique est en mode "Device" ou en mode "Recovery".

Dans ce qui suit, ADB est installé sur un PC sous Linux Debian et la connexion avec la périphérique Android est du type USB.

Référence

1 - Installation de adb

# apt install adb
$ adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
$ adb kill-server

2 - adb en mode device

2.1 - Activation du Débogage USB sur le périphérique

En mode Device, il est nécessaire d'activer le Débogage USB pour autoriser la connexion

2.2 - Test de la connexion

$ sudo dmesg |tail
[23851.877138] usb 1-1: new high-speed USB device number 3 using xhci_hcd
[23852.094588] usb 1-1: New USB device found, idVendor=04e8, idProduct=6860
[23852.094596] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[23852.094600] usb 1-1: Product: SAMSUNG_Android
[23852.094604] usb 1-1: Manufacturer: SAMSUNG
[23852.094608] usb 1-1: SerialNumber: 87e44f92
[23852.120546] cdc_acm 1-1:1.1: ttyACM0: USB ACM device
[23852.121397] usbcore: registered new interface driver cdc_acm
[23852.121398] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

$ lsusb -d 04e8:6860
Bus 001 Device 003: ID 04e8:6860 Samsung Electronics Co., Ltd Galaxy (MTP)
$ adb devices -l
List of devices attached
87e44f92 unauthorized usb:1-1

Si le le message "unauthorized" apparaît, comme ci-dessous, rechercher sur le périphérique un message d'autorisation de débogage USB. Accepter la connexion au PC dont l'empreinte est fournie, temporairement ou toujours.

$ adb devices -l
List of devices attached
87e44xxx device usb:1-1 product:gts210veltexx model:SM_T819 device:gts210velte

Vérifier que le périphérique est correctement identifié :

Noter la détection du mode de fonctionnement du périphérique :

$ adb devices -l
List of devices attached

Vérifier

2.3 - Mode adb root

Par défaut, les commandes adb sont passées en mode utilisateur dans le shell du périphérique

2.3.1 Mode adb root

Pour passer, les commandes adb en mode root (du périphérique), le rootage de la ROM étant effectué :

$ adb root & sleep 3 && adb reconnect
$ adb unroot & sleep 3 && adb reconnect

2.3.2 Alternatives

Si la réponse à la commande adb root est :

$ adb root
adbd cannot run as root in production builds

2.4 - Commandes

adb peut-être utilisé

2.4.1 - Commandes spécifiques

$ adb reboot 
$ adb reboot bootloader
$ adb reboot recovery
$ adb get-state
device
$ adb push <chemin_vers_fichier_ou_répertoire_PC> <chemin_vers_répertoire_périphérique>
$ adb push ./rom.zip /storage/emulated/0/
$ adb pull <chemin_vers_fichier_ou_répertoire_périphérique> <répertoire_PC>
$ adb pull /storage/emulated/0/Pictures ./Backup-Pictures
$ adb remount

2.4.2 - Mode shell interactif

$ adb shell <commande_shell_linux>
<résultat_commande_shell_linux>
$
$ adb shell "cd /storage/emulated/0; touch toto; ls -l |grep toto"
-rw-rw---- 1 root sdcard_rw 0 2018-10-28 18:50 toto
$ adb shell su -h | grep command
-c, --command COMMAND pass COMMAND to the invoked shell
$ adb shell su -c mount -o remount,rw /system
$ $ adb shell "su -c 'cd /storage/57*; touch test; ls -l ./ |grep test'"
-rw-rw---- 1 root sdcard_rw 0 2018-10-28 19:00 test

2.4.3 - Mode shell non-interactif

$ adb shell
crackling:/ $
crackling:/ $ exit
$

En mode shell non interactif, si le périphérique est routé, il est aussi possible d'utiliser adb en mode utilisateur simple et de passer super-administrateur en mode shell avec su

$ adb shell
gts210velte:/ $ su
gts210velte:/ #

3 - adb en mode recovery

adb peut être utilisé pour passer des commandes lorsque le périphérique est démarré en mode Recovery. 

A noter

3.1 - Commandes communes avec le mode normal

Les commandes ci-dessous décrites dans les commandes adb sont également utilisables en mode récupération TWRP. 

$ adb get-state
recovery
$ adb reboot
$ adb reboot recovery
$ adb reboot bootloader
$ adb push <chemin_vers_fichier_ou_répertoire_PC> <chemin_vers_répertoire_périphérique>
$ adb push ./rom.zip /sdcard1 # Copie du fichier rom.zip vers la racine de la carte sd externe (utilisée en tant que périphérique amovible)
$ adb pull <chemin_vers_fichier_ou_répertoire_périphérique> <répertoire_PC>
$ adb pull /sdcard/Pictures ./Backup-Pictures # Copie du répertoire Pictures située sur la "carte sd interne" (équivalent à /storage/emulated/0)
$ adb shell .....

A noter que les commandes du shell en mode récupération peuvent être différentes de celles du shell en mode normal, le mode récupération pouvant par exemple disposer d'une "busybox" non disponible ou différente de celle de la rom.

3.2 - Commandes spécifiques au mode recovery

$ adb kill-server && adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
$ adb shell
~ #
$ adb sideload fichier.zip

Les commandes de flashage du fichier zip défilent sur l'écran du périphérique