# Android Debug Bridge

Android Debug Bridge (ADB) è uno strumento compreso all'interno del software SDK (Software Develompent Kit) e usato per mettere in comunicazione un dispositivo Android ed un computer.

## Caratteristiche

Android Debug Bridge è stato distribuito assieme al software SDK dai sviluppatori di Google nel 2007. La vera rivoluzione è stata nel 2011 quando venne introdotta la possibilità di effettuare un backup completo senza lo sblocco del Boot Loader di un dispositivo android.
ADB viene utilizzato per eseguire comandi da riga-comando. Con questi comandi gli sviluppatori possono modificare le proprie applicazioni in sviluppo o le ROM, mentre gli utenti possono personalizzare determinati aspetti del dispositivo, eseguire debug di applicazioni, accedere a funzionalità nascoste e recuperare dati dal dispositivo quando è in modalità recupero.
Per permettere la comunicazione fra computer e il dispositivo sono necessari un cavo USB o una connessione wireless.
Per motivi di sicurezza nella fase preliminare bisogna attivare le funzionalità aggiuntive di Android ovvero le "Opzioni sviluppatore" abilitando la voce "Debug USB", che consente di accedere direttamente al file system di un dispositivo Android da un computer desktop.
Senza il debug abilitato, è possibile interagire solo con l'archivio multimediale del dispositivo, cioè per esempio con la scheda SD o una directory multimediale appositamente formattata.

## Componenti

ADB è un programma client-server composto da tre elementi
* Client: il computer, che dopo l'installazione dei driver ADB può inviare i comandi attraverso un prompt di comandi come il CMD proprietario di Windows.
* Daemon (ADBD): un processo che permette l'esecuzione dei comandi, installato sia sul computer che sul dispositivo Android. Il processo viene eseguito in background e consente al dispositivo di accettare ed eseguire i comandi inviati dal client.
* Server: un servizio che gestisce la comunicazione fra il client e il Daemon. Si attiva dopo aver eseguito il comando sul prompt del client e permette la comunicazione e l'esecuzione di tutto il processo.
Se questi tre componenti non sono attivi il programma non potrà funzionare.

## Installazione

Esistono tre metodi principali per l'installazione.
* Il metodo più semplice è installare un tool completo dal forum di XDA. Il Tool include un prompt di comando e driver ADB per eseguire i comandi.
* Un metodo alternativo consiste nello scaricare il tool per Windows SDK (software development kit) dal sito ufficiale di Google. Questo tool è dotato di un compilatore per tradurre il codice sorgente. Il Tool è utile per chi vuole analizzare o eliminare bug.
* Google dal 2017 permette di scaricare separatamente i driver di ADB a differenza di tempo fa quando bisognava obbligatoriamente scaricare tutto il pacchetto SDK completo, si trova tutto sul sito ufficiale SDK.

## Connessione wireless

L'evoluzione tecnologica ha permesso di utilizzare non solo il cavo USB per la connessione ADB ma anche una connessione wireless grazie al protocollo TCP/IP. Per questo esistono due metodi principali, distinti in base ai permessi di ROOT del dispositivo Android.
* Se il dispositivo non ha i permessi di ROOT occorre che sia il computer che il dispositivo Android siano connessi alla stessa rete. Al primo collegamento occorre quindi collegare il dispositivo Android tramite cavo USB ed eseguire il comando per ascoltare una connessione TCP / IP su una porta.
* Se il dispositivo ha i permessi di root è possibile usare un'applicazione Google Play per abilitare la connessione in modo semplice.

## Problemi comuni

Alcuni problemi che si riscontrano più frequentemente nell'uso di Android debug bridge:
* Le connessioni ADB non riuscite: Per problemi fisici ad esempio la porta USB del computer danneggiata o il connettore USB del dispositivo android danneggiato.
* USB Android difettosi Driver:Driver non aggiornati oppure driver difettosi, ci sono varie guide dove poter scaricare dei driver adeguati, di solito si scaricano i driver Universali, si possono anche ricercare driver distribuiti dal produttore del dispositivo.
* Comando non trovato: Errore frequente può capitare per distrazione oppure non si ha l'ultima versione del software, con il comando "ADB help" nel prompt dei comandi comparirà la lista completa dei comandi.
* Server is out of date: le versioni presenti di ADB sul computer non è compatibile con la versione del dispositivo.

## Come si utilizza

L'installazione di una ROM su un dispositivo richiede diversi passaggi.
* Installare ADB dal sito ufficiale di SDK.
* Installare il pacchetto .zip della ROM.
* Avviare ADB o Prompt dei comandi.
* Mettere in comunicazione lo smartphone e il computer tramite connessione via cavo USB oppure connessione wireless.
* Con un codice specifico inoltrare il pacchetto zip precedentemente scaricato sul computer allo smartphone; lo smartphone in ascolto riceve il pacchetto e lo installa in automatico.
* Al termine del processo,scollegare lo smartphone dal computer.

## Codice

Alcuni esempi di comandi utilizzabili con ADB attraverso un prompt o la Shell sono:
* adb reboot → Per riavviare normalmente il dispositivo.
* adb devices → Mostra i dispositivi android connessi con il PC.
* adb install → Per installare un'applicazione .apk. Va inserito alla fine del comando il nome dell'applicazione
* adb pull → Per copiare un file dal dispositivo al pc.
* adb push → Per copiare un file dal pc al dispositivo.
* adb get-serialno → Mostra il numero di serie del dispositivo.
* adb logcat > Per visualizzare il file di registro.
* adb get-state → Visualizza lo stato del dispositivo.
* adb start-server → Avvia il processo del server ADB.
* adb kill-server → Arresta il server ADB.
* adb shell → Impartisce comandi Linux al dispositivo Android. Quando appare il prompt $, vuol dire che tutto quello che andremo a fare e i comandi che digiteremo verranno eseguiti all'interno del dispositivo.
* adb reboot bootloader → Riavvia il dispositivo in modalità fastboot o modalità bootloader.
* adb reboot recovery → Riavvia il dispositivo in recovery mode.

## Equivalenti su Ios

Sono presenti due soluzioni differenti per utilizzare Ios per il debug bridge.
Per Ios e Mac non esiste un programma paragonabile ad ADB, ma la situazione è più complicata e richiede l'esecuzione di un jailbreak. In questo modo si possono trasferire applicazioni (per esempio, il Mac viene fornito con Xcode); per eseguire le impostazioni dal terminale proprietario si può utilizzare un'applicazione, la quale però non è disponibile nell'App Store.
In alternativa, è possibile usare uno strumento per Ios, il quale sfrutta Xcode, un IDE per IOS SDK, utilizzato per sviluppare le applicazioni IOS su computer Mac. La parte fondamentale è XCRUN: un file binario disponibile nello strumento Xcode in cui è possibile controllare il dispositivo.
Alcuni esempi di comando XCRUN sono:
* $xcrun simctl list → Fornisce la lista dei dispositivi connessi.
* $xcrun simctl list device types → Fornisce la lista dei tipi di dispositivi.