Android : Apprenez à être efficace grâce à ADB

Partager cet article

Temps estimé pour la lecture de cet article : 51 min

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 :

android adb popup usb

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.

android adb over the air wifi

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

info wallpaper

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

android adb custom rom paranoid

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

android adb screen recording

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 :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.