# Android Debug Bridge

L'Android Debug Bridge (abreujat habitualment com adb) és una eina de programació utilitzada per a la depuració de dispositius basats en Android. El dimoni del dispositiu Android es connecta amb el servidor de l'ordinador amfitrió mitjançant USB o TCP, que es connecta al client que utilitza l'usuari final a través de TCP. Disponible com a programari de codi obert sota la llicència Apache per Google des del 2007, les característiques inclouen un shell i la possibilitat de fer còpies de seguretat. El programari adb és compatible amb Windows, Linux i macOS. Les botnets i altres programes maliciosos han fet un ús indegut, per als quals es van desenvolupar mitigacions com l'autenticació RSA i la llista blanca de dispositius.

## Característiques

Les característiques d'adb inclouen copiar fitxers des de l'ordinador amfitrió, instal·lar aplicacions, visualitzar la sortida de logcat, obtenir un shell Unix, i reiniciar al mode Qualcomm EDL. Per exemple, les aplicacions d'Android es poden desar mitjançant l'ordre backup en un fitxer. També inclou suport per al protocol Java Debug Wire.
S'han posat a disposició algunes interfícies gràfiques. El monitor gràfic de dispositiu Android d'Android Studio es pot utilitzar per recuperar informació d'un dispositiu Android.
El mètode d'Android per instal·lar fitxers APK en un dispositiu s'ha utilitzat com una manera de descarregar aplicacions no oficials al subsistema de Windows per a Android i la màquina virtual Android de Chrome OS.

## Història del desenvolupament

L'Android Software Development Kit (SDK) es va llançar per primera vegada el 2007. Des del 2017, Google va permetre descarregar adb per separat de l'SDK d'Android.
El 2015, Microsoft va llançar un emulador d'Android que es pot connectar al client adb. El 2016 per a Android Studio 2.0 es va fer una millora de rendiment 5x per instal·lar aplicacions i enviar fitxers mitjançant adb. Per facilitar l'ús d'Android Things, el 2017 es va crear un embolcall al voltant de les ordres adb manuals. Per a Android 11 el 2020, Google va afegir instal·lacions incrementals d'adb. El 2020, el Wi-Fi adb es va integrar a Android Studio per a macOS. L'any 2021 per a Android 12, l'ordre adb backup es va limitar, de manera que la còpia de seguretat de les dades d'usuari de les aplicacions s'ha activat mitjançant una configuració de manifest per aplicació després d'haver estat obsoleta a Android 10 juntament amb adb restore. Fucsia serà compatible amb adb. Se substituirà per fx i ffx.
* Per habilitar la depuració USB al dispositiu Android, cal que estigui activada a la finestra "Configuració del desenvolupador".
* Després de connectar el dispositiu a l'ordinador amfitrió, l'usuari ha de verificar l'empremta digital de la clau RSA de l'ordinador amfitrió

## Configuració
### Ordinador amfitrió

Per a Windows, l'SDK d'Android conté el binari adb.exe que es pot extreure i instal·lar. How-To Geek recomana afegir la carpeta que conté els binaris a la variable d'entorn PATH.
A Ubuntu, adb es pot instal·lar amb el paquet android-tools-adb. Per a Debian, també s'ha recomanat instal·lar el paquet android-sdk-platform-tools-common al costat del paquet adb, que instal·la les regles udev que permeten executar l'eina sense permisos d'arrel. Per a macOS i altres distribucions de Linux, les eines de la plataforma es poden descarregar i la variable PATH es pot modificar a bashrc.

### Dispositiu Android

A Android 4.2.2 o posterior (nivell API 17), es mostra un diàleg amb una empremta digital RSA que l'usuari ha d'acceptar. Això protegeix contra els ordinadors que explotin el mecanisme de depuració sense el consentiment de l'usuari del dispositiu. A partir d'Android 4.2, la configuració del desenvolupador s'amaga de manera predeterminada. Si premeu set vegades el número de compilació al menú sobre, els fa visibles per a l'usuari. Després d'això, es pot activar l'opció de depuració USB. Alguns proveïdors d'Android tenen procediments diferents per activar-lo. Per exemple, Huawei requereix introduir un codi PIN abans que es pugui activar l'adb.

## Arquitectura

El protocol adb es pot transportar per USB o per Wi-Fi mitjançant TCP. Utilitza una arquitectura client-servidor. S'utilitzen dos protocols diferents. El primer és entre el client i el servidor i el segon és entre el servidor i el dimoni. El dimoni adb està implementat en C i es troba a l'espai d'usuari d'Android. El dimoni està facilitat pel framework USB d'Android, UsbDeviceManager i UsbDebuggingManager.

### Protocol client ↔ servidor

El mode de comunicació entre el client i el servidor és un sòcol TCP. El servidor escolta en un port, al qual el client ha d'enviar una sol·licitud. La sol·licitud conté un camp inicial de 4 bytes en ASCII i una càrrega útil. La càrrega útil comença amb la paraula host, per indicar que s'ha d'enviar al servidor. Aleshores, el servidor pot respondre amb OK o FAIL per indicar l'estat, combinat amb una càrrega útil i una longitud opcionals.

### Protocol servidor ↔ dimoni

Els missatges enviats des del servidor consisteixen en una capçalera de 24 bytes de llarg, amb els camps següents:
* Comandament
* Primer argument
* Segon argument
* Longitud de la càrrega útil, 0 o superior
* CRC-32 de la càrrega útil de dades
* Valor màgic, calculat mitjançant l'ordre XOR 0xFFFFFFFF

## Referències

* ↑ Darcey, Lauren; Shane Conder. Android wireless application development (en anglès). 3rd. Upper Saddle River, NJ: Addison-Wesley, 2012. ISBN 978-0-321-81383-1. OCLC 749852462.
* ↑ «Things You Can Do with Android's adb Command» (en anglès). For Dummies. Arxivat de l'original el 2018-05-15. [Consulta: 9 setembre 2021].
* ↑ EASTTOM, CHUCK. An In-Depth Guide to Mobile Device Forensics (en anglès). [S.l.]: CRC PRESS, 2021, p. 72. ISBN 978-0-367-63300-4. OCLC 1250310301.
* ↑ Jack Wallen. «How to create a full backup of your Android device without root» (en anglès), 06-03-2015. Arxivat de l'original el 2016-01-24. [Consulta: 29 gener 2016].
* ↑ Regupathy, Rajaram. Unboxing Android USB: a hands-on approach with real World examples (en anglès), 2014. ISBN 978-1-4302-6209-1. OCLC 880673864.
* ↑ Morgillo, Ivan. Learning embedded Android N programming: create the perfectly customized system by unleashing the power of Android OS on your embedded device (en anglès), 2016, p. 89. ISBN 9781785283284. OCLC 1020708322.
* ↑ «How to sideload Android apps on Windows 11» (en anglès), 23-01-2022.
* ↑ «How to sideload apps to a Chromebook» (en anglès), 05-03-2023.
* ↑ «Google releases Android SDK» (en anglès americà). Macworld. Arxivat de l'original el 2021-09-10. [Consulta: 10 setembre 2021].
* ↑ «Google makes ADB, fastboot, and other platform tools available without full SDK or Android Studio download» (en anglès americà). Android Police, 05-01-2017. Arxivat de l'original el 2021-04-10. [Consulta: 9 setembre 2021].
* ↑ Vasile, Cosmin. «Microsoft Releases Android Emulator and It's Supposed to Be Faster than Google's» (en anglès). Softpedia. Arxivat de l'original el 2021-09-10. [Consulta: 10 setembre 2021].
* ↑ «Android Studio 2.0 - Beta» (en anglès). Android Developers Blog. Arxivat de l'original el 2021-09-10. [Consulta: 10 setembre 2021].
* ↑ «Android Things Developer Preview 6» (en anglès). Android Developers Blog. Arxivat de l'original el 2021-09-10. [Consulta: 10 setembre 2021].
* ↑ «Turning it up to 11: Android 11 for developers» (en anglès). Android Developers Blog. Arxivat de l'original el 2021-09-17. [Consulta: 10 setembre 2021].
* ↑ «Announcing Android Studio Arctic Fox (2020.3.1) & Android Gradle plugin 7.0» (en anglès). Android Developers Blog. Arxivat de l'original el 2021-09-12. [Consulta: 10 setembre 2021].
* ↑ «Behavior changes: Apps targeting Android 12 | Android 12 Beta» (en anglès). Android Developers. Arxivat de l'original el 2021-09-28. [Consulta: 28 setembre 2021].
* ↑ «Google Considers Removing Android ADB Backup and Restore» (en anglès).
* ↑ Bradshaw, Kyle. «Google wants to make Fuchsia devices manageable with Android's ADB tool» (en anglès americà). 9to5Google, 26-08-2022. [Consulta: 29 agost 2022].
* ↑ Harwani, B. M.. PhoneGap build: developing cross platform mobile applications in the cloud (en anglès), 2013, p. 38. ISBN 978-1-4665-8975-9. OCLC 862745697.
* ↑ Hoffman, Chris. «How to Install and Use ADB, the Android Debug Bridge Utility» (en anglès americà). How-To Geek, 04-09-2021. Arxivat de l'original el 2021-09-18. [Consulta: 9 setembre 2021].
* ↑ Smyth, Neil. «7». A: Android Studio 4. 0 Development Essentials - Java Edition: Developing Android Apps Using Android Studio 4. 0, Java and Android Jetpack. (en anglès), 2020. ISBN 978-1-951442-21-7. OCLC 1190906409.
* ↑ «Debian -- Details of package adb in bullseye» (en anglès). packages.debian.org. Arxivat de l'original el 2021-09-08. [Consulta: 8 setembre 2021].
* ↑ «How to Install Android Debug Bridge (ADB) and Fastboot» (en anglès). Lifewire. Arxivat de l'original el 2022-01-30. [Consulta: 18 gener 2022].
* ↑ «Run apps on a hardware device» (en anglès). Android Developers. Arxivat de l'original el 2021-09-08. [Consulta: 8 setembre 2021].
* ↑ Wallen, Jack. «How to enable Developer options in Android 4.2» (en anglès). TechRepublic. Arxivat de l'original el 2021-09-09. [Consulta: 9 setembre 2021].
* ↑ Aranzulla, Salvatore. «Come attivare debug USB» (en italià). Salvatore Aranzulla. Arxivat de l'original el 2021-09-09. [Consulta: 9 setembre 2021].
* ↑ Regupathy, Rajaram. Unboxing Android USB: a hands-on approach with real World examples (en anglès), 2014. ISBN 978-1-4302-6209-1. OCLC 880673864.
* ↑ Regupathy, Rajaram. Unboxing Android USB: a hands-on approach with real World examples (en anglès), 2014. ISBN 978-1-4302-6209-1. OCLC 880673864.