Aujourd’hui, nous allons parler d’ADB, petit outil bien pratique mis à disposition des développeurs dont l’on sous estime bien souvent, les capacités !
ADB, qu’est-ce que c’est ?
ADB signifie Android Debug Bridge. C’est un outil de développement qui permet d’aider à communiquer entre un smartphone sous Android et un ordinateur. Bien souvent, la connexion est réalisée en USB, mais le WIFI est supporté !
ADB est un véritable couteau suisse, il va nous permettre de réaliser des actions simples comme transférer ou récupérer un fichier depuis son téléphone mais on pourra également exécuter des commandes plus complexes en se connectant directement au shell du téléphone. Afin de lister les commandes disponibles avec ADB, vous pouvez utiliser le paramètre help :
adb --help
Toutefois, avant de pouvoir exécuter, il faudrait déjà avoir installé ADB et l’avoir rajouté au path de son ordinateur :p, voyons comment faire ça.
Installer et ajouter ADB à son path
Plusieurs manières sont possibles pour installer ADB :
- Soit, vous avez déjà Android Studio, dans ce cas, il devrait déjà être disponible sur votre PC. Afin de l’ajouter dans notre path, il suffira de trouver le chemin vers l’installation du SDK Android. Pour ce faire, allez dans: File => Settings => System settings => Android SDK. Vous devriez avoir quelque chose comme sur cette capture d’écran.
- Sinon, il est possible de télécharger uniquement les outils binaires du SDK Android. Il vous suffit alors de vous rendre sur cette page.
Une fois prêt, vous n’avez plus qu’à renseigner dans le PATH de votre système, le lien vers l’outil. Pour ma machine sous archlinux, par exemple, j’ai rajouté ceci dans mon .bashrc:
export PATH=$PATH:~/Android/Sdk/platform-tools
Connecter son smartphone à son PC afin qu’il soit reconnu par ADB
Pour que votre téléphone soit reconnu par ADB, la première chose à faire, cela va être d’activer les options développeurs d’Android :
- On va dans « About », il faut alors cliquer 5 fois sur le Build Number. Un toast devrait s’afficher vous indiquant que vous êtes maintenant développeur. Bien joué !
- On peut alors maintenant aller dans « System », « Developer options ».
- Enfin dans la section « Debugging », vous devez activer l’USB debugging.
Maintenant, il vous suffit de connecter votre appareil Android, à votre PC en USB. Vous devriez avoir alors un magnifique pop-up de ce style :
N’hésitez pas à cocher l’option “Always allow USB Debugging“, sinon vous allez devoir confirmer ce pop-up à chaque connexion USB. Cliquez sur « Allow » et vous êtes fin prêt pour utiliser ADB !
ADB over the air
Comme je le disais dans l’introduction, il est possible d’utiliser ADB à travers le WIFI. Pour ce faire, plusieurs solutions s’offrent à vous, soit vous utilisez le plugin Android Studio: ADB WiFi Connect, qui vous permet alors de faire la connexion grâce à l’UI de l’IDE.
Soit si vous voulez utiliser la ligne de commande, vous pouvez utiliser la commande adb connect. Par exemple pour ma part, j’ai les deux fonctions suivantes dans mon bashrc:
Pour la connexion :
connectWifi() { adb tcpip 5555 adb wait-for-device phoneIp="$(adb shell ip addr show wlan0 | grep -iEo 'inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -iEo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" export lastPhoneIP=$phoneIp adb connect $phoneIp:5555 }
En gros, le serveur ADB demande au daemon du device d’activer la connexion réseau. Ensuite, on récupère l’IP du téléphone avec un adb shell. Enfin, on se connecte sur l’adresse IP récupéré sur le port 5555. Attention, mon script fonctionne quand vous n’avez qu’un seul device de connecté. Il faudrait l’adapter un peu en utilisant l’option -s dont l’on va discuter plus loin.
Pour la déconnexion :
disconnectWifi() { phoneIp="$(adb shell ip addr show wlan0 | grep -iEo 'inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -iEo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" export lastPhoneIP=$phoneIp adb disconnect $lastPhoneIP:5555 adb usb }
On refait le processus inverse pour se déconnecter, rien de bien surprenant. La dernière commande adb usb, permet de désactiver le debug sans fil.
Les commandes de bases de ADB
La première commande à connaitre, c’est celle pour démarrer/killer le serveur ADB. Ce qui peut-être pratique quand l’outil d’installation d’application d’Android Studio a planté. En effet, en killant et relançant le serveur ADB vous pouvez débloquer la situation.
adb start-server adb kill-server
Quand, vous voulez vérifier si un device est bien conbnecté et obtenir des informations sur ce dernier. Vous pouvez utiliser la commande devices :
adb devices
De base, elle va vous renvoyer une liste de tous les périphériques connectés à votre ordinateur. Si elle retourne un ID de dispositif, l’appareil est connecté et prêt à recevoir des commandes. Vous pouvez avoir plus de détails en précisant l’option -l.
Développer avec son smartphone Android et ADB
Une fois un smartphone connecté et prêt à être utilisé, vous allez pouvoir interagir avec lui grâce à ADB. Si vous avez plusieurs devices connectés, vous allez devoir préciser l’ID obtenu grâce au listing de la commande adb devices. Par exemple :
adb -s 7f1c864e shell
Faisons maintenant un petit listing des commandes bien pratique pour gérer son smartphone grâce à notre CLI.
Il est possible de copier les fichiers de votre ordinateur vers votre appareil Android. Ceci est particulièrement pratique pour la copie de gros fichiers.
adb push [source-du fichier] [destination] # Exemple, on envoie le fichier des vacances de son ordinateur vers # la carte sd du téléphone adb push holidays-movie.mp4 /sdcard/
On peut bien sur faire l’inverse, c’est-à-dire transférer des fichiers du téléphone vers l’ordinateur :
adb pull [source-du-fichier] [destination] # Exemple adb pull /sdcard/holidays-movie.mp4 ~/Desktop/
On peut également installer un fichier APK sur son smartphone, depuis son PC.
adb install myapplication.apk
Il est possible de faire le processus inverse de désinstaller un fichier apk présent
adb uninstall myapplication.apk
Comme Android est basé sur Linux, il est possible d’exécuter un shell sur le smartphone. On peut alors exécuter des commandes comme sous un système unix. Plutôt pratique et vous allez voir, qu’on l’utilise souvent ;).
adb shell [commande] # Exemple, pour lister les fichiers présents dans la carte sd # du smartphone adb shell ls /sdcard/
Adb permet de montrer en temps réel les logcats (rapport) du téléphone. Vous pouvez bien sur faire une redirection vers un fichier texte en utilisant ce genre de commande : adb logcat > logcat.txt. Vous pouvez ajouter l’option -C, pour voir les logs en couleur.
adb logcat
On a vu quelques commandes et l’intérêt que ADB peut apporter au quotidien. Mais voyons maintenant plus concrètement. Qu’est-ce ADB peut nous permettre de faire ?
Obtenir des informations sur le téléphone
On peut utiliser ADB afin de récupérer des informations sur le smartphone, cela pourrait être utile pour des scripts bash, qui dépendraient du numéro de version du SDK par exemple. Vous pouvez utiliser la commande getprop afin d’obtenir ces données.
Obtenir le numéro de version d’Android ou même le numéro de l’API SDK correspondante:
ludo ~/Desktop [11:45] -> adb shell getprop ro.build.version.release 10 ludo ~/Desktop [11:45] -> adb shell getprop ro.build.version.sdk 29
Obtenir le modèle du téléphone :
ludo ~/Desktop [11:46] -> adb shell getprop ro.build.product OnePlus5T
Obtenir l’opérateur de la carte SIM utilisée :
ludo ~/Desktop [11:57] -> adb shell getprop gsm.sim.operator.alpha Bouygues Telecom
Obtenir la langue définie sur le téléphone :
ludo ~/Desktop [11:59] -> adb shell getprop persist.sys.locale en-GB
Obtenir la timezone du téléphone :
ludo ~/Desktop [11:59] -> adb shell getprop persist.sys.timezone Europe/Paris
Obtenir la résolution de l’écran du smartphone:
ludo ~/Desktop [11:50] -> adb shell wm size Physical size: 1080x2160
Mettre à jour son système d’exploitation grâce à ADB
Si vous voulez passer sur une ROM custom comme Lineage OS (j’ai d’ailleurs fait un tutoriel dessus), ADB peut vous aider dans le processus notamment, les quelques commandes suivantes :
# Permets de faire une sauvegarde complète du système. Pas besoin # d’être root, ni d’avoir de recovery custom installé. adb backup # Permet de faire une restauration complète du système. # Par exemple : adb restore c:\adb\backup.zip adb restore # Permet de redémarrer dans le bootloader adb reboot bootloader # Permet de redémarrer en mode recovery adb reboot recovery
Bien pratique, surtout le adb reboot recovery, ça évite de faire une gymnastique des doigts un peu stressante à mon goût :p.
Récupérer les APKs des applications téléchargées depuis le PlayStore
Oui, vous avez bien lu, ADB va nous permettre de récupérer n’importe quel APK installé sur notre téléphone !
D’abord, on commence par lister les packages installés grâce au package manager (pm) et la commande adb shell. Après, il suffit d’utiliser grep pour récupérer uniquement la ligne qui nous intéresse :
adb shell pm list packages | sort | grep 'trello'
Ce qui nous donne le package, par exemple ici :
package:com.trello
Ensuite, pour savoir où est le fichier .apk, il suffit d’utiliser la commande path du package manger :
adb shell pm path com.trello
Vous aurez alors le path pour récupérer le fichier :
package:/data/app/com.trello-wrT9KY7FjzsnrhUb-tUcAQ==/base.apk
Et après, on a vu comment faire précédemment: adb pull !
adb pull /data/app/com.trello-wrT9KY7FjzsnrhUb-tUcAQ==/base.apk
Capturer et enregistrer l’écran de son smartphone avec ADB
On peut facilement prendre un screenshot du téléphone avec la commande screencap :
adb shell screencap [destination/filename.png] # Exemple adb shell screencap /sdcard/screenshot.png
De même, on peut enregister une vidéo de l’écran avec la commande screenrecord :
adb shell screenrecord [destination/filename.mp4] # Exemple adb shell screenrecord /sdcard/filename.mp4
Comme, c’est une vidéo, la commande va attendre un retour de votre part, pour arrêter la vidéo, une fois la commande lancée :
- Soit vous utilisez le raccourci ctrl +c
- Soit vous attendez 3 minutes qui est la valeur par défaut avant d’arrêter l’enregistrement. Si besoin, vous pouvez bien sûr l’augmenter en précisant, la commande –time-limit, en sachant que la valeur est en seconde. Donc pour 5 minutes par exemple, on ferait: adb shell screenrecord /sdcard/viedo.mp4 –time-limit 300.
À noter, que l’enregistrement de vidéo est disponible qu’à partir d’Android 4.4 et plus. Si vous avez besoin d’avoir des informations sur les commandes un simple adb shell screencap/screenrecord –help, devrait vous aider !
Après tout ça, bien sûr on peut utiliser la comande adb pull qu’on a vu au-dessus afin de récupérer les fichiers ainsi obtenus.
adb pull /sdcard/screenshot.png ~/Desktop/
Simuler l’appui d’une touche avec ADB
ADB permet même de contrôler son smartphone comme si on appuyait sur les touches nous-même. On peut ainsi envoyer des touch events à des coordonnées spécifiques :
adb shell input tap [x coordinate] [y coordinate]
Ou même carrément envoyer des appuis de touche :
# Home button adb shell input keyevent 3
Voici, une liste de touches qu’on peut envoyer :
# Back button adb shell input keyevent 4 # Call adb shell input keyevent 5 # End call adb shell input keyevent 6 # Turn Android device ON and OFF adb shell input keyevent 26 # Camera adb shell input keyevent 27 # Open browser adb shell input keyevent 64 # Enter adb shell input keyevent 66 # Backspace (delete) adb shell input keyevent 67 # Brightness down/up adb shell input keyevent 220 / 221 # Cut/Copy/Paste adb shell input keyevent 277 / 278 /279
Je pourrais continuer bien longtemps car la liste est longue !
Allez plus loin avec ADB
ADB est un outil vraiment complet, qui n’a de limite que votre imagination. Je vous laisse donc quelques liens, si vous voulez approfondir le sujet :
- Un petit gist récapitulatif de la plupart des commandes que l’on a vu avec du bonus
- Un talk donné sur ADB par Eyal Lezmy durant les Android Makers de 2018
- Enfin, je vous laisse sur une liste de 3 tutoriels donnée sur du reverse engineering, de quoi avoir un aperçu de ce que permet ADB ;). Un sujet qui devrait revenir d’ici peu sur le blog !
Merci pour cet article très informatif ! ADB est un outil tellement puissant, et je suis sûr qu’il m’aidera à améliorer mon efficacité sur Android. Hâte d’essayer les astuces partagées ici !