Categorie
Android Mac OS X Mobile App Sviluppo software

Cosa fare se Android ‘adb devices’ non elenca i dispositivi su Mac OS X

ELbuild sviluppa applicazioni Android a Firenze, Pistoia, PratoRecentemente mi sono imbattuto in un problema che mi ha fatto perdere una bella oretta per cui ho deciso di postare qui la soluzione, a beneficio di coloro che si troveranno nella stessa condizione. La situazione è la seguente: state sviluppando una applicazione Android, avete un device Android in modalità USB debug connesso alla porta USB del vostro Mac, aprite un terminale e, per controllare che tutto sia a posto prima di avviare l’applicazione in debug da Eclipse, digitate come al solito ‘adb devices‘. Vi aspettate di vedere la lista di dispositivi Android connessi ma, per quanto proviate a sconnettere e riconnettere, non succede nulla!

Il mio problema è che sviluppando su Mac OS X la cosa ha sempre funzionato in maniera talmente semplice rispetto a Windows (ed anche a Linux), che non mi ero mai posto il problema di driver proprietari dei dispositivi, nè di altri possibili cause che impedissero ad adb di “vedere” i device connessi.

Per prima cosa ho provato a cercare un po’ fra le possibili cause collegate al device che stavo utilizzando, ovvero un Galaxy Nexus, oggi il telefono da sviluppo per eccellenza. Mi son imbattuto in un po’ di post poco rassicuranti che suggerivano di utilizzare driver proprietari Samsung, o di creare a mano il mounting point per il dispositivo. Quest’ultima soluzione mi sembrava ancor meno  sensata della prima perchè dmesg mostrava chiaramente i log del kernel che correttamente evidenziavano la connessione dello smartphone.

USBMSC Identifier (non-unique): SH12FRT00755 0xbb4 0xc91 0x226
USBMSC Identifier (non-unique): SH12FRT00755 0xbb4 0xc91 0x226

A questo punto ho iniziato a capire che c’era qualcosa sul mio sistema che impediva ad adb di interagire con il dispositivo e tadà mi è tornato in mente che qualche giorno fa, mentre giravo con un Acer Liquid E Donut 1.6, avevo dovuto riesumare Easy Tether per ovviare al fatto che su un Android così datato non disponevo della possibilità di usare il telefono come Access Point WIFI.  

Easy Tether è un software un tempo molto utile per usare un telefono Android connesso alla rete 3G come modem condividendo la connessione con il Mac tramite USB. Ora l’utilità di questo tipo di applicazioni è molto calata perchè il sistema operativo Android permette di default di usare gli smartphone come Access Point. Ad ogni modo, su Mac OS X, Easy Tether crea una nuova interfaccia di rete in una posizione a scelta dell’utente, e nello stesso tempo crea un kext file nelle estensioni delle librerie di sistema.

Ho deciso di provare a rimuoverlo usando l’utility kextunload e dopo di rimuovere completamente il file (rm -rf) perchè il problema non si ripresentasse al boot. Se volete ancora usate Easy Tether non digitate il secondo comando perchè lo renderà inutilizzabile.

sudo kextunload /System/Library/Extensions/EasyTetherUSBEthernet.kext
sudo rm -rf /System/Library/Extensions/EasyTetherUSBEthernet.kext

A questo punto è sufficiente sconnettere e riconnettere il dispositivo per vederlo apparire felice fra i device visti da adb.

dex:~ Lu$ adb devices
List of devices attached
01498B0C19021010	device

La soluzione ha carattere generale e può servire come spunto a chi si trova nella stessa soluzione. Prima di fasciarvi la testa fate un bel controllo dei file .kext e magari qualcosa di possibilmente incompatibile salta fuori.

E ora continuiamo a sviluppare 🙂

Di Luca Adamo

Luca Adamo si è laureato con lode in Ingegneria delle Telecomunicazioni all'Università degli studi di Firenze ed è dottorando in Ingegneria Informatica, Multimedialità e Telecomunicazioni, sempre nella stessa facoltà. Le sue competenze tecniche includono lo sviluppo software, sia orientato al web che desktop, in C/C++ e Java (J2EE, J2SE, J2ME), l'amministrazione di macchine Unix-based, la gestione di reti di telecomunicazioni, ed il design di database relazionali.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *