Installare ADB su Debian

Alla fine, mi sono dovuto convertire pure io ad uno smartphone. I miei vecchi Nokia con suoneria polifonica funzionano ancora benissimo, ma questi benedetti telefonini hanno effettivamente una marcia in più. La mia scelta è caduta, ovviamente, su un device che supportasse Android come sistema operativo, proprio perché mi piace molto smanettare 🙂

Dopo essermi fatto una bella ripassata di Java, ed aver creato le mie prime app, è arrivato ora il momento di fare le cose serie: impadronirsi completamente del dispositivo! Ma come posso impadronirmi del mio telefono, se non ne conosco il sistema che lo fa funzionare? Arriva in nostro aiuto ADB, acronimo di Android Debug Bridge, un utile insieme di tool e driver che ci permettono di prendere familiarità con il nostro device.

In questo articolo, vedremo di capire cos’è questo ADB, a cosa ci serve, come funziona e come installarlo su Debian.

ADB a livello teorico:

Su ogni dispositivo Android è presente la modalità di Debug. Questa ci permette di comandare il nostro dispositivo, collegato via USB, direttamente dal nostro computer, tramite una riga di comando. Si tratta di una grande possibilità per chiunque voglia capire il funzionamento del proprio SO, oltre che per fare innumerevoli prove e test.

ADB è un tool presente nell’SDK di Android. Questo non fa altro che “compiere la magia” di far riconoscere al proprio PC il device Android collegato via USB. Senza questo particolare tool, il dispositivo verrebbe riconosciuto come una semplice memoria esterna. Ma non è solo questa l’opzione che ci offre ADB. Grazie ad esso, abbiamo a disposizione una serie di comandi (da lanciare dal nostro terminale o dal prompt) per interagire con il nostro dispositivo.

Sicuramente, la caratteristica più importante è la possibilità di accedere al nostro dispositivo come root, e quindi di potercene impadronire, come dicevo poco sopra 🙂

A livello teorico, è un software client-server, composto da un client che è il nostro dispositivo con Android, un server che è il nostro PC con un sistema operativo Win/Lin, ed un demone che si esegue in background sul dispositivo. I client comunicano tutti tramite la porta TCP 5037, e quando avviamo il tool sul nostro PC (server), questo si metterà all’ascolto su quella porta, in attesa di trovare ed identificare dei device.

ADB a livello pratico:

Una volta scaricato l’insieme di tool, questi ci permettono di collegare il nostro device in modalità Debug e di poterci collegare ad esso come root tramite riga di comando.

Cosa ci serve?

In realtà, molto poco. Essenziale, per prima cosa, è la presenza di Java sulla nostra macchina. Non importa che sia Sun o JDK, bisogna avere installato Java. Senza, non si può andare avanti.

In secondo luogo, avremo bisogno dell’SDK Android. In realtà, non è necessario scaricare tutto l’ambiente di sviluppo (ossia l’ADT Bundle, comprendente anche del software Eclipse), ma basta scaricare solo gli SDK Tools. La scelta sta a voi, in ogni caso potete scaricare tutto gratuitamente dalla pagina “Get the Android SDK“.

Nient’altro. Ovviamente, un dispositivo con Android installato, ed il relativo cavo USB per collegarlo al PC!

Abilitare la modalità Debug sul proprio dispositivo:

Anche questo è molto semplice da fare. Ci basta muoverci in Applicazioni -> Impostazioni -> Applicazioni -> Sviluppo, e da li spuntare l’opzione Debug USB. Ci verrà chiesta la conferma della scelta, e noi diremo di si. A questo punto possiamo collegare il dispositivo al PC via USB.

Installazione dei pacchetti necessari:

Scaricato il pacchetto, non dobbiamo far altro che estrarlo, ottenendo così una cartella con il nome dell’archivio. Io, ad esempio, utilizzo una versione di Debian a 64 bit, ed ho scaricato l’ADT Bundle (nome completo: adt-bundle-linux-x86_64-20130219). Fatte queste premesse, avviamo il terminale e spostiamoci nella cartella appena estratta, che nel mio caso è:

cd Scaricati/adt-bundle-linux-x86_64-20130219

Se avete scaricato anche voi l’ADT Bundle, come detto sopra, non avrete a disposizione solo i tool. Quindi, dovete spostarvi nella cartella:

cd sdk/tools

Una volta dentro, bisogna dare questo comando:

./android update sdk

Si avvierà una finestra (è tutto in Java, abbiate pazienza) dalla quale potremo selezionare che versione dell’SDK (dell’ambiente di sviluppo) scaricare ed installare. La versione da installare dovrebbe essere verosimilmente la stessa che avete installato sul vostro device. Ad es., se sul mio telefonino c’è Android 2.3, io posso installare la stessa versione dell’SDK, o una versione superiore. Per avere una piena compatibilità, si può decidere anche di installare sempre la versione più recente disponibile.

Adesso, abbiate pazienza. Ci vorrà un po’ di tempo per scaricare ed installare tutto.

Primo test di connessione:

Una volta finito il download e l’installazione dei pacchetti necessari, possiamo già provare a vedere se il nostro dispositivo viene riconosciuto dal tool. Per eseguire qualunque comando che ADB ci mette a disposizione, dobbiamo farlo dalla cartella platform-tools, quindi se non avete chiuso il terminale ci basta fare:

cd ..
cd platform-tools

Da qui, possiamo avviare il comando:

./adb devices

A questo punto, molto probabilmente il dispositivo ci risponderà in ogni caso, ma dobbiamo aspettarci due possibili opzioni. Se siamo stati fortunati, otterremo subito sotto al nostro comando la scritta “List of devices attached“, e ancora sotto il numero del nostro dispositivo. In questo caso, non c’è altro da fare!

Nella maggiore delle ipotesi però, andremo incontro ad un errore. Dopo aver dato il comando, prima della lista dei dispositivi, ci troveremo di fronte ad un errore che ci dice “* daemon not running. starting it now on port 5037 * * daemon started successfully *“. Vuol dire che non abbiamo sufficenti permessi, e che quindi li dobbiamo guadagnare.

Ottenere i permessi in caso di errore:

Ottenere il permesso di lettura del device è molto semplice. Dobbiamo creare un file ed assegnarli determinati permessi. In parole povere, sempre da terminale, accediamo come root:

su

Ed inseriamo la password. Adesso, creiamo il file digitando:

gedit /etc/udev/rules.d/99-android.rules

Il file sarà vuoto (a meno che non lo abbiate già creato in passato). Incolliamoci dentro:

SUBSYSTEM==”usb”, ATTRS{idVendor}==”XXXX“, SYMLINK+=”android_adb”, MODE=”0666″ GROUP=”plugdev”

Dove al posto delle XXXX dobbiamo inserire l’ID del nostro vendor, ossia di chi ha prodotto il nostro device. Ad esempio, se avete un cellulare della Samsung, vi basta sostituire le X con 04e8. Potete trovare la lista completa in questa pagina. Fatta la modifica, salviamo il file e chiudiamolo.

Ritornati nel nostro bel terminale, diamo i permessi al file appena creato, digitando:

chmod a+rx /etc/udev/rules.d/99-android.rules

E quindi, riavviamo il servizio udev (che gestisce i dispositivi) con:

/etc/init.d/udev restart

Et voillà! Ridando il comando ./adb devices, non dovreste più visualizzare alcun messaggio di errore. Usciamo da root (basta dare exit) e se non viualizziamo più il messaggio di errore… Non c’è altro da fare 🙂

La mia prima connessione via ADB:

In un altro articolo tratterò i vari comandi da dare per muoversi ed ambientarsi, ma nel frattempo, perché non farsi un bel giretto all’interno del nostro dispositivo?  Per farlo, da terminale (senza permessi di root) posizioniamoci in:

cd ...tuo_percorso.../sdk/platform-tools

Quindi diamo il comando:

./adb shell

E vedremo cambiare “qualcosa”. Siamo all’interno del nostro dispositivo, diamo un bel ls per ambientarci ed iniziamo un po’ a vagare come delle anime in pena 🙂

Questa è la procedura per installare i moduli ADB su Debian, ma ovviamente questi sono disponibili, più generalmente, per Linux e per Windows. Nel prossimo articolo, vedremo i comandi che abbiamo a disposizione.

  • Luca

    Ciao, ho seguito attentamente la tua guida. Ho un Gs2 rootato e sbrandizzato su cui ho installato Cyanogenmod 10.1.3. Sul mio pc ho Debian wheezy 7.3.
    Il procedimento riesce bene; il device viene riconosciuto e posso accedere alla shell.
    In seguito, appena lancio i comandi push-pull ed altri, mi viene data come risposta “adb not found”.

    luca73@debian:~/Downloads/android-sdk-linux/platform-tools$ ./adb devices

    * daemon not running. starting it now on port 5037 *

    * daemon started successfully *

    List of devices attached

    000e18c50ecd8f device

    luca73@debian:~/Downloads/android-sdk-linux/platform-tools$

    luca73@debian:~/Downloads/android-sdk-linux/platform-tools$

    luca73@debian:~/Downloads/android-sdk-linux/platform-tools$ ./adb shell

    shell@android:/ $

    shell@android:/ $

    shell@android:/ $ ls

    acct

    boot.txt

    cache

    charger

    config

    d

    data

    default.prop

    dev

    efs

    etc

    extSdCard

    fstab.smdk4210

    init

    init.cm.rc

    init.goldfish.rc

    init.rc

    init.smdk4210.rc

    init.smdk4210.usb.rc

    init.superuser.rc

    init.trace.rc

    init.usb.rc

    lpm.rc

    mnt

    preload

    proc

    res

    sbin

    sdcard

    storage

    sys

    system

    ueventd.goldfish.rc

    ueventd.rc

    ueventd.smdk4210.rc

    usbdisk0

    vendor

    shell@android:/ $

    shell@android:/ $

    Comfortably Numb.mp3 /storage/sdcard1/ <

    /system/bin/sh: ./adb: not found

    127|shell@android:/ $

    127|shell@android:/ $

    127|shell@android:/ $

    127|shell@android:/ $

    127|shell@android:/ $

    127|shell@android:/ $

    127|shell@android:/ $ ./adb get-serialno

    /system/bin/sh: ./adb: not found

    127|shell@android:/ $

    127|shell@android:/ $

    127|shell@android:/ $

    127|shell@android:/ $ ./adb get-state

    /system/bin/sh: ./adb: not found

    127|shell@android:/ $

    127|shell@android:/ $

    127|shell@android:/ $

    Vorrei una tua opinione. Inoltre sulla shell non trovo il percorso per il filesystem Debian. Posso muovermi solo all'interno del filsystem di Android. Riesco solo a muovermi tra le cartelle, creare file e cancellarli. Ti ringrazio se vorrai rispondermi. Premetto che anche se da tempo utilizzo Ubuntu/Debian, non mi ritengo un utente esperto.

    • Ciao Luca,
      ho notato che, nei comandi che hai postato, scrivi il comando come “./adb”. Probabilmente l’errore è quello, in quanto il comando corretto dovrebbe essere solo “adb”, senza punto e slash. Prova in questo modo (quindi lanciando “adb get-state” e così via) e fammi sapere 🙂
      Si, una volta che hai effettuato l’accesso, puoi spostarti solo all’interno del filesystem di android. Un po’ come se ti connetti via SSH. Il terminale ti permette comunque di gestire più schede nella stessa istanza (da File -> Apri Scheda), in questo modo puoi ovviare al problema e muoverti contemporaneamente sui due filesystem.
      Se hai altre domande/dubbi, non esitare a contattarmi 🙂

      • Luca

        Ciao Francesco, grazie per la risposta. Il comando adb (senza punto e slash) funziona:
        luca73@debian:~/Downloads/android-sdk-linux/platform-tools$ ./adb get-serialno
        000e18c50ecd8f
        luca73@debian:~/Downloads/android-sdk-linux/platform-tools$ ./adb get-state
        device
        luca73@debian:~/Downloads/android-sdk-linux/platform-tools$ ./adb get-devpath
        usb:1-6
        Quando entro nella shell invece mi dà questo output:
        shell@android:/ $ adb get-serialno
        unknown
        shell@android:/ $ adb get-devpath
        unknown
        shell@android:/ $ adb get-state
        unknown
        1|shell@android:/ $ adb devices
        List of devices attached
        shell@android:/ $

        Ma questo non mi dà noia. Non riesco a capire perchè adb push e adb pull non funzionano. Se volessi portare sul pc una foto dal telefono o spostare un mp3, non riesco a trovare il percorso del filesystem di Debian da Android e viceversa, ovvero dal cell non vedo il percorso per il pc. Spero di essere stato chiaro.

        • Ciao,
          il comando adb va usato dall’esterno, non quando sei nella shell di Android 🙂 Utilizzandolo dall’interno, ti darà sempre “unknown”, perché sei già in un device.
          Anche quello che chiedi si può fare solo dall’esterno. Per essere sintetico, ti posizioni nella cartella platform-tools, e da li lanci il comando “./adb pull /sdcard/nomefile.formato /home/TUOUTENTE/Documenti”, o nella cartella che preferisci. In questo modo, sposterai dal device al tuo pc, mentre con il comando push fai l’opposto 🙂

          • Luca

            ok Francesco. Ora ci sono riuscito. Adesso è tutto chiaro. Molte grazie per le spiegazioni. I comandi adb push e pull funzionano perfettamente. Saluti e buon lavoro.

          • Perfetto! 🙂
            Se hai altre domande/dubbi, non esitare a contattarmi, anche via mail.