Recensione “Android – Programmazione Avanzata”

Android - Programmazione AvanzataGrazie a Stefano e Emanuele ho ricevuto una copia del libro “Android – Programmazione Avanzata“, un testo in italiano scritto da italiani che tratta di alcuni concetti avanzati nello sviluppo per piattaforma Android.

Questo un sommario degli argomenti presenti:
– Activity e Service
– Grafica ed interfaccia utente
– Honeycomb e Tablet
– Networking
– NFC
– Push Notification
– Bluetooth
– Qualita’ del software
– Ice Cream Sandwich: la riconciliazione

Devo dire che la prima impressione che ho avuto leggendo i capitoli del libro e’ stata che le pagine “trasudavano esperienza d’uso”. Bluetooth, NFC, Rendescript, TDD ed altri argomenti sono trattati con la competenza tipica di chi ci ha sbattuto la testa piu’ e piu’ volte, arrivando alla fine ad una buona quadratura del cerchio. Questo non puo’ che essere un grosso pregio a mio avviso, che scavalca i limiti di molto materiale formativo che affronta un caso mediamente semplice, tralasciando scenari piu’ complessi.

La lettura dei capitoli è scorsa via veloce viste anche le interessanti e attuali tematiche e, se proprio devo trovare un difetto, e’ in relazione alla mia personale fruizione dei suo contenuti. Ho infatti ho letto il testo “a schermo spento”, sul divano o in viaggio, e la scelta degli autori di inserire pochi esempi di codice nel libro e lasciare al lettore la possibilita’ di consulatare gli esempi online a corredo del testo non sempre per me è stata comoda e/o possibile. Certo, più codice nel libro avrebbe forse ridotto gli argomenti trattati o accorciato le spiegazioni, quindi sono sicuro che questa scelta sia stata ben valutata e ponderata all’origine.

Interessante anche il capitolo dedicato interamente ad ICS, responsabile dei continui ritardi nella pubblicazione del testo: non nego che mi sono messo immediatamente a giocare con le API di riconoscimento facciale appena letto il paragrafo a loro dedicato! Menzione di merito speciale al capitolo sul Bluetooth, il primo che ho letto, dato che stavo lavorando su un progetto con un prototipo Arduino e che mi ha dato veramente tutte le risposte di cui avevo bisogno per far andar tutto al primo colpo!

In definitiva, un testo che consiglio se si vogliono scoprire o approfondire gli argomenti sopra riportati, ma con l’avvertenza di leggerlo con un pc/tablet davanti.

Ubuntu for Android, la convergenza del tutto!

httpv://www.youtube.com/watch?v=ZQozs5tXxwY

Finalmente un senso a questi processori sempre piu’ potenti. Finalmente un device che tra storage locali e dati nel cloud, connettivita’ always-on e context-aware, diventa un punto di aggregazione unico per la mia vita digitale. Finalmente un mediacenter che ha anche altre funzioni. Nonostante le cose ancora da migliorare, forse il primo tecnogadget per cui sento davvero la voglia metterci le mani sopra il prima possibile! Speriamo di vedere qualcosa al MWC.

Continue reading

Screen density del Kindle Fire e Galaxy Tab 7″

Android, supporto a schermi di diversa grandezza e Kindle Fire: le FAQ di Amazon la dicono giusta: il Kindle Fire viene rilevato dal meccanismo di identificazione delle risorse piu’ appropriate come un device “large” e “mdpi“, nonostante i suoi 1024×600 pixel di schermo e 160dpi di densita’. Probabilmente e’ stata fatta qualche customizzazione nel sistema operativo installato sul device, come riportato su StackOverflow.

Poco male, per fortuna basta aggiungere la il suffisso -large-mdpi-1024×600 nelle cartelle che conterranno i file di risorse specifici per il Fire, nel mio caso values-large-mdpi-1024×600 con dentro le dimensioni di alcuni immagini che erano troppo piccole viste sullo schermo del device. Per device normali sono di 80dp, per device xlarge sono di 120dp ed anche per il Fire le ho settate a 120dp, perche’ a 80dp si vedevano troppo piccole. Tutto molto bello e facile.

Kindle Fire, senza risorse specifiche (errato)

Kindle Fire, con le risorse specifiche (corretto)

Peccato poi aver ottenuto questo effetto sul Galaxy Tab 7″, che prima delle modifiche fatte avete la immagini della dimensione voluta (screenshot a sinistra), dopo aver aggiunto le risorse per il Kindle Fire le aveva visibilmente piu’ grandi, e inadatte (screenshot a destra):

Galaxy Tab 7", prima della modifica per il Kindle Fire (corretto)

Galaxy Tab 7", dopo la modifica per il Kindle Fire (errato)

 

Alla fine, ho scoperto che il Galaxy Tab 7″ viene riconosciuto come un -large-hpdi-1024×600, quindi ho semplicemente ricopiato le risorse gia’ presenti nella cartella values-large anche in values-large-hpdi-1024×600 ed e’ tutto ritornato alla normalita.

Continue reading

Tethering dallo smartphone, ecco come gli operatori telefonici possono scoprirlo

Molte delle promozioni per la navigazione web dal proporio smartphone precisano che l’accesso ad Internet e’ consentito *solo dal device*, e non attaccando il device ad un computer attraverso il tethering (wifi o usb). Mi sono sempre chiesto come facessero i carrier a capire quando stavo navigando nell’uno o nell’altro modo, e grazie a questo commento a questo post ho avuto la risposta, almeno per Android:

The built-in tether support acts as a WiFi hotspot and router. This does a USB tether, and acts as a network proxy. Very different.

The biggest difference, from the carrier’s end, is that routing is pretty easy to detect; each packet that goes through the router, the time-to-live (TTL) field in the IPv4 header is decremented. In addition, there is NAT going on, and there are heuristics to detect that. There are ways around this using Linux’s iptables that can masquerade the routing/NAT, but I’m unaware of any mainstream implementations of this on Android, and it would require root. This app doesn’t; I’m like 90% sure it’s all done over ADB (Android Debug Bridge), which every Android device supports.

With the USB tether acting as a network proxy, there is simply no routing/NAT going on, so there is no way for the carrier to detect what’s going on. It just appears to be data coming from the phone.

Ottimo, penso anche che il meccanismo sia estendibile anche ad altre piattaforme, non si finisce mai di imparare dai commenti! Prossima mossa, vedere se veramente il tethering USB non viene scoperto dai carrier.

Aggiornamento manuale del Nexus S ad Ice Cream Sandwich

Aggiornare il proprio Nexus S al nuovo Android Ice Cream Sandwich e’ ormai solo una questione di pazienza, dato che l’update via OTA e’ in arrivo in questi giorni. Il problema e’ che, se come me avete installato una custom ROM (MIUI, Cyanogenmod o altre), l’aggiornamento via OTA non arrivera’ mai.

Situazione che si puo’ risolvere facilmente, dato che e’ sempre possibile aggiornare manualmente alla ROM ICS ufficiale, ora che sono disponibili.

La guida di partenza che ho usato per fare l’aggiornamento e’ stato questa. Ho scaricato l’ultima ROM 4.0.3 dal link fornito (il file ZD3PyN0t.zip), l’ho copiato nel dispositivo sotto la cartella principale della SD card rinominandolo in update.zip, poi ho spento il device, l’ho riavviato premendo volume up + power in modo da far partire il bootloader, ho selezionato il recovery (nel mio caso il Clockworld Manager, ma funziona anche con quello standard), ho fatto un bel wipe di dati e della cache e ho installato il file update.zip. Un nuovo reboot e voila’, ICS anche sul mio smartphone!

Altra cosa che ho ripristinato e’ stato l’accesso come root al dispositivo. La procedura e’ ben descritta qui, e che contiene l’hack per ottenerli. Il problema e’ che non mi funzionava piu’ il ClockWorld Manager: nel sito con tutte le versioni e’ ancora disponibile la 5.0.2.0, che pero’ a me non partiva dal bootloader. Ho dovuto prendere l’ultimissima versione “non ufficiale” 5.0.2.3 e, installata, il recovery ha ripreso ad andare. Anche in questo post il problema sembra essere conosciuto.

Nello sfortunato caso di brick del Nexus S (non parte piu’ niente), si puo’ sempre tentare un ripristino a basso livello con Odin, come spiegato da questa e da questa guida, ma funzionera’ solo con Windows

Ovviamente anche le ROM custom non sono rimaste a guardare e se Cyanogenmod ha rilasciato una versione di Android Ice Cream Sandwich qualche settimana prima di quella ufficiale, dal canto suo la MIUI ha portato ICS sulla sua versione per Nexus S. Il supporto ad altri dispositivi e’ atteso a breve. Per ora, da quello che ho visto, non ci sono sostanziali differenze rispetto alle ROM stock, quindi ho installato quest’ultima e poi vedro’ se e dove orientarmi.

Infine, per i piu’ curiosi, la lista completa delle ROM e degli update per tutti i modelli di Nexus S.

 

Kindle Fire, Ubuntu Linux, ADB e Cyanogenmod

Appena avuto tra le mani un Kidle Fire, da sviluppatore Android, ho cercato di capire come installare applicazioni NON provenienti dall’Amazon AppStore: ecco i passi necessari.

Di default il Fire non viene neanche rilevato da ADB, quindi occorre forzare il bridge tramite un semplice file di configurazione da modificare sul proprio pc, come spiegato qui.

  • Aprire il file ~/.android/adb_usb.ini e aggiungere la stringa “0x1949″ alla fine del file (senza le virgolette)
  • Riavviare l’adb server, magari tramite il comando adb kill-server
  • Lanciando il comando adb devices ora dovrebbe essere possibile vedere un nuovo device, anche se con il classico problema dei ??????????

La soluzione e’ facile, basta aggiungere queste righe al file /etc/udev/rules.d/51-android.rules:

#Amazon Kindle Fire
SUBSYSTEM==”usb”, SYSFS{idVendor}==”1949″, MODE=”0666″

Dove ox1949 e’, appunto, il manufacturer id. Bene, l’USB Debugging e’ ora abilitato e funzionante.

Per installare applicazioni non provenienti dall’Amazon AppStore, basta andare nei Settings (la rotellina vicino all’orologio), poi More, Device, e abilitare Allow Installation of Application From Unknown sources. Ora un semplice adb install nome_file_app.apk funzionera’ senza fare una piega.

Passiamo a qualche personalizzazione piu’ dura, tipo installare la CyanogenMod 7 sul Fire. Gli smanettoni di xda-developers stanno gia’ elaborando una ROM ad hoc per il dispositivo. Buoni tentativi ;)