Skip to content
Archive of posts tagged Android

Android e Google Cloud Platform getting start

In questo video, spiego come utilizzare il “Mobile Backend Starter” per realizzare in pochi minuti un’applicazione Android in grado di gestire una chat tra piu’ utenti, che si interfaccia con un backend hostato su Google Cloud Platform e che gestisce notifiche push e accesso autenticato alle API del backend.

(3 Febbraio 2013)

Postepay e quel vizietto di contattare servizi in background

Update 17:30: ho modificato il precedente titolo “Postepay e quel vizietto di contattare server di terze parti” in quanto, finche’ non si fa dello sniffing, non e’ possibile sapere a chi e’ destinato il traffico. Il bello e’ che lo avevo scritto anche nei commenti, ma mi era sfuggito il titolo ed e’ rimasto cosi’ quando l’ho pubblicato ^_^ Ribadisco, ho rimosso l’app perche’ effettuava delle chiamate in background pur non essendo stata avviata e senza un motivo apparente. Grazie ai ragazzi di 01tribe per avermi fatto notare la svista.
———————–

Stavo facendo un po’ sano di debug di una mia app Android quando,casualmente, mi cade l’occhio su queste stringhe nella shell con l’output di adb logcat:

D/dalvikvm(27834): GC_CONCURRENT freed 429K, 6% free 8894K/9412K, paused 26ms+47ms, total 115ms
D/kM      (27834): =============================== RESPONSE START ================================
D/kM      (27834): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
D/kM      (27834): <ns2:context-response xmlns:ns2="http://moni.01tribe.com/context">
D/kM      (27834):     <ns2:response-header>
D/kM      (27834):         <ns2:status>
D/kM      (27834):             <ns2:status-code>999</ns2:status-code>
D/kM      (27834):             <ns2:status-description>Non e' stato possibile verificare la disponibilita' dei servizi</ns2:status-description>
D/kM      (27834):         </ns2:status>
D/kM      (27834):         <ns2:trace-id>791654851</ns2:trace-id>
D/kM      (27834):     </ns2:response-header>
D/kM      (27834):     <ns2:body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PivotOutAppCheck"/>
D/kM      (27834): </ns2:context-response>
D/kM      (27834): ================================ RESPONSE END ================================
I/System.out(27834): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
I/System.out(27834): <ns2:context-response xmlns:ns2="http://www.01tribe.com/context">
I/System.out(27834):     <ns2:response-header>
I/System.out(27834):         <ns2:status>
I/System.out(27834):             <ns2:status-code>999</ns2:status-code>
I/System.out(27834):             <ns2:status-description>Non e' stato possibile verificare la disponibilita' dei servizi</ns2:status-description>
I/System.out(27834):         </ns2:status>
I/System.out(27834):         <ns2:trace-id>791654851</ns2:trace-id>
I/System.out(27834):     </ns2:response-header>
I/System.out(27834):     <ns2:body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PivotOutAppCheck"/>
I/System.out(27834): </ns2:context-response>
D/EXPIRED (27834): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
D/EXPIRED (27834): <ns2:context-response xmlns:ns2="http://www.01tribe.com/context">
D/EXPIRED (27834):     <ns2:response-header>
D/EXPIRED (27834):         <ns2:status>
D/EXPIRED (27834):             <ns2:status-code>999</ns2:status-code>
D/EXPIRED (27834):             <ns2:status-description>Non e' stato possibile verificare la disponibilita' dei servizi</ns2:status-description>
D/EXPIRED (27834):         </ns2:status>
D/EXPIRED (27834):         <ns2:trace-id>791654851</ns2:trace-id>
D/EXPIRED (27834):     </ns2:response-header>
D/EXPIRED (27834):     <ns2:body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PivotOutAppCheck"/>
D/EXPIRED (27834): </ns2:context-response>
D/fB      (27834): Siamo spiacenti. Non è stato possibile effettuare l'operazione richiesta. Si prega di riprovare più tardi

Mmmm, insospettito da un messaggio del genere, inizio a chiedermi cosa possa averlo generato e, scorrendo il log, trovo poco sopra quest’altro messaggio:

D/kM      (27834): +++++++++++++++++++++++++++++++ REQUEST START +++++++++++++++++++++++++++++++
D/kM      (27834):<?xml version="1.0" encoding="UTF-8"?>
<context:context-request xmlns:context="http://www.01tribe.com/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <context:request-header>
    <context:trace-id>791654851</context:trace-id>
    <context:channel>mobile</context:channel>
    <context:workflow-name>appCheckPublicWorkflow</context:workflow-name>
    <context:action-name>ActionAppCheck</context:action-name>
    <context:user-agent>Android</context:user-agent>
    <context:language-code>it</context:language-code>
    <context:country-code>IT</context:country-code>
  </context:request-header>
  <context:body>
    <PivotInAppCheck>
      <appName>postepay</appName>
      <appVersion>1.2.3</appVersion>
    </PivotInAppCheck>
  </context:body>
</context:context-request>
D/kM      (27834): ++++++++++++++++++++++++++++++++ REQUEST END ++++++++++++++++++++++++++++++++

Postepay app on Android E scopro che l’artefice di tutto questo e’ l’applicazione Postepay, realizzata da 01tribe.

Ora, de gustibus, ma a me app che mandano richieste in background a servizi senza dirmi niente, senza essere in esecuzione e che richiedono permessi anche un po’ sospetti (tipo Phone calls, Your social information) anche se poi vengono tutti usati legittimamente dentro l’app, a me queste app mi provocano una reazione immediata: disinstallazione.

Certo, potrei controllare con uno sniffer il traffico realmente scambiato (ammesso di riuscire a riprodurre questa situazione) e verificare che sia innocuo per la mia privacy, ma in questo momento ho altro da fare, quindi bye bye Postepay, io ho installato la tua app, non capisco perche’ devi contattare server di un sito di cui non so niente in background. E per fare cosa poi?

Nexus One, un Android come Torrent server

Nexus One come Torrent serverDopo un paio d’anni quasi di glorioso servizio (prima come smarthphone principale e poi come device di test per lo sviluppo), proprio non riuscivo a contemplare l’idea di mandare in pensione il mio glorioso Nexus One. Cosi’, dopo qualche sperimentazione, ho scoperto che posso ancora reimpiagarlo con successo come torrent client domestico, centralizzando su di esso (quasi) tutto il download. Di materiale legale, ovviamente!

Per prima cosa ho messo sul  mio N1 una CyanogenMod, giusto per dare un’aggiornata al sistema e incrementarne un po’ le performance. Questo passo e’ solo consigliato, ma non necessario. Inoltre, ho messo un microSD da 16Gb come storage, per avere la possibilita’ di mettere piu’ di qualche file in coda contemporaneamente. Anche tagli piu’ piccoli di microSD vanno bene: dipende tutto da quello che ci si vuole fare.

Come software per il download dei torrent ho scelto, tra tanti, tTorrent, principalmente per questi motivi:

  • riavvio automatico del programma al riavvio del dispositivo ed altre impostazioni per il risparmio di energia
  • supporto dell’uPNP, quindi con i router compatibili (tutto oggigiorno) non devo preoccuparti di aprire le porte necessarie per massimizzare il traffico in entrata
  • possibilita’ di limitare la banda sia in download che in upload
  • capacita’ di analizzare qualunque file messo in una determinata cartella e, se corrisponde ad un .torrent, viene automaticamente messo in download
  • plugin per la ricerca dei torrent direttamente all’interno del programma
  • scelta dei file da scaricare contenuti in ogni .torrent
  • ha un’interfaccia ottimizzata per i tablet

Gli altri software che ho esaminato, come aTorrentµTorrent Beta o BitTorrent Beta (che e’ uguale ad µTorrent) non avevano tutte queste caratteristiche assieme, soprattutto quella dell’analisi dei file .torrent messi in una cartella del dispositivo. Magari nel tempo le implementeranno.

Altra esigenza da gestire e’ quella di condivedere i file scaricati dal telefono al proprio PC. La soluzione piu’ semplice e’ quella di collegare il telefono all’USB del proprio computer e abilitare l’USB storage, anche se poi questo interromperebbe i download in corso. Soluzione piu’ elegante prevede l’uso di un server FTP sul dispositivo. Ho scelto Ftp Server, anche se non mi soddisfa ancora appeno (non riparte, ad esempio, al riavvio del dispositivo). Dai test che ho fatto, con questa app riesco a fare il download dei file a piu’ di 2 Mbyte/secondo, tenendo pero’ disattivato il tTorrent, altrimenti va molto piu’ lento. In alternativa, anche un server samba, come Samba Filesharing, puo’ egregiamente svolgere il suo compito, dipende tutto dalle vostre preferenze.

Combinando tTorrent e il server FTP (o Samba), basta copiare un file .torrent in una specifica cartella del dispositivo (di default /sdcard/torrent/incoming) e tTorrent iniziera’ a scaricare quanto richiesto, senza neanche toccare il telefono. Se invece volete direttamente ricercare e scaricare tutto dal telefono, il consiglio e’ di installare il plugin apposito di tTorrent per fare le ricerche direttamente dentro l’app oppure Torrent Search, in grado di cercare su IsoHunt e BitSnoop ed con alcuni filtri predefiniti come il tipo di file da cercare (video, musica ecc) e l’history delle ricerche fatte.

Ciliegina sulla torta: iMediaShare per visualizzare direttamente i video su TV dotate di WiFi e server DLNA, oppure con una XBox 360 o PlayStation 3 collegate. Non c’e’ neanche piu’ da accendere il pc o collegare cavi :)

Per quanto riguarda il consumo energetico, posso dire che e’ praticamente nullo: senza corrente la batteria del telefono dura per piu’ di una giornata, mentre per la ricarica l’ho attaccato alla presa USB del mio router, risparmianto un alimentatore e una presa di corrente.

I limiti attuali del sistemino che ho messo in piedi sono sostanzialmente due: la prima e’ la velocita’ di download, che nella versione Lite di uTorrent e’ limitata a 250 kb/sec, ma basta acquistare la versione a full dell’app e non e’ piu’ un problema, oppure usare un altro torrent client come aTorrent. La seconda rigurda le dimensioni del file: essendo la microSD formattata in FAT32, non si possono scaricare file piu’ grandi di 4GB. Devo fare qualche prova per vedere se, formattando con ext2, questo limite puo’ essere aggirato (risolto, guardare la sezione primo update).

Nonostante questi limiti, la goduria e’ massima: aver riciclato un device che altrimenti avrei lasciato inutilizzato, un consumo energetico praticamente pari a zero, portabilita’ totale, magari per andare una sera a casa di amici e continuare a scaricare da loro ;)

Variazioni sul tema: invece di scaricare sulla microSD del dispositivo, se avere gia’ uno storage server domestico che supporta il protocollo SMB (direi tutti), potete sempre mappare la sua condivisione Samba su una cartella del device con app quali AndSMB, e impostare poi tTorrent per scaricare direttamente su quella cartella. Perdete la portabilita’, ma almeno non avrete piu’ problemi di spazio e/o dimensione del file. Occorrerebbe verificare le performance, che potrebbero diminuire facendo passare tutto e sempre sulla rete WiFi.

 

Primo update

Come pensavo, grazie alla combinazione Cyanogenmod (o altra ROM che supporta il filesystem di tipo ext2), mi e’ bastato formattare la SD in ext2 invece che un FAT32 per aggiungere il supporto a download di file oltre i 4GB. Per fare questa operazione ho collegato il Nexus all’USB del mio pc con Ubuntu e ho attivato l’USB storage su quest’ultimo, potendo in questo modo usare la SD del device come un normale disco esterno sul mio desktop. Ho copiato tutti i dati presenti nell’unita’, ho lanciato GParted e l’ho formattata in ext2. Finita la formattazione, ho ricopiato i dati salvati nella sd e dal terminale ho eseguito questo comando: sudo chmod -R 777 * (all’interno della root folder della SD). Ho smontato dal pc l’unita’ e ho riavviato il Nexus.

Ubuntu for Android, la convergenza del tutto!

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 ‘Ubuntu for Android, la convergenza del tutto!’ »

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.

Video dell’intervento “Sopravvivere a due anni di sviluppo con Android”

Ecco i video dell’intervento che ho fatto il 22 Novembre al GTUG Milano, dove ho condiviso con i partecipanti alcuni consigli utili imparati dopo piu’ di due anni di sviluppo per piattaforma Android.

Continue reading ‘Video dell’intervento “Sopravvivere a due anni di sviluppo con Android”’ »

Linkflood 20111029: Holodesk ed applicazioni Android su Win/Mac

The Essence of Google Dart: Building Applications, Snapshots, Isolates – Un articolo che parla un po’ piu’ in dettaglio di Dart, il nuovo linguagguio di programmazione per il web creato da Google.

Problema di sicurezza iPad 2: la SmartCover scardina le password – Il codice di sicurezza degli iPad2 che protegge l’accesso al dispositivo ad estranei e’ facilmente aggirabile usando la SmartCover. Un esempio di hardware hacking. Fortunatamente l’accesso e’ completo al dispositivo, ma limitato alle app aperte prima di bloccarlo.

Bluestacks – Eseguire applicazioni Android su Windows non sembra piu’ un sogno, grazie a Bluestack. Dalle prove che ho fatto, devo dire che …

Codify iPad – Un editor LUA per iPad, con la possibilita’ di gestire la scrittura di codice anche in modo touch. Esperimento interessante, ma non mi convince molto, dato che la tastiera, e al limite il mouse, sono da sempre stati i migliori amici del dev. ;) Rimane pero’ il fatto che e’ un editor LUA per iPad con alcune interessanti funzioni (auto competition, project browser ecc).

MonoGame Goes Multi-platform: MonoGame 2.0 Announced – Si aggiunge un nuovo nato alla famiglia Mono / Monotouch/ MonoDroid: e’ infatti arrivato MonoGame, versione crossplaform per desktop e mobile delle API XNA. Quindi Windows, Linux, Mac, Android, iPad. Supporto nativo del codice, invece, da parte di XBOX e Windows Phone 7. Decisamente un qualcosa da provare non appena trovo un po’ di tempo libero!

Qualcomm Augmented Reality Mobile SDK  – Un SDK per realizzare applicazioni in realtà aumentata rilasciato da Qualcomm per Android e iPhone. Stiamo parlando di riconoscimento di forme, non piu’ solo location-base. Da tenere sott’occhio assieme agli SDK rilasciati da Layar e da Wikitude.

Holodesk bt Microsoft – Sensori 3D, Kinect, complesse computazioni, qualche specchio ben piazzato ed ecco nato un desktop olografico made in Microsoft, che da la possibilita’ di interagire in maniera naturale con gli oggetti creati al suo interno.

Android Orphans: Visualizing a Sad History of Support – Un’infografica che mostra lo stato attuale della frammentazione del mondo Android per quanto riguarda la disponibilita’ di aggiornamenti del sistema operativo rilasciati dai produttori dei dispositivi nell’arco di 3 anni. Una triste situazione, con moltissimi device lasciati a se stessi. Impossibile immaginare uno scenario diverso: i produttori hanno tutto l’interesse a far acquistare nuovi device, piuttosto che rilasciare aggiornamenti per mantenerli ancora competitivi sul mercato. Speriamo che quando dichiarato da Google al Google I/O, riguardante la policy sul supporto agli aggiornamenti del sistema operativo per almeno 18 mesi dalla data di rilascio di un dispositivo, sai davvero rispettata.

Trailer, le risposte della SIAE – Embeddate video di trailer cinematografici nel  vostro sito, che contengono colonne sonore coperte da diritto d’autore (come tutte quelle dei film)? Bene, dovete pagare la SIAE.

Continuous Integration for Mobile – LinkedIn non e’ nuova a scrivere dei dettagliati post che spiegano com’e’ organizzata la sua struttura IT per gestire specifiche situazioni. Stavolta tocca all’ambiente di Continuous Integration per le applicazioni mobili del portale.

Come installare Cyanogenmod, MIUI o una custom rom sul Nexus One

Installare un sistema operativo personalizzato al posto di quello standard presente sul proprio smartphone e’ una pratica consolidata. Gia’ con Symbian era prassi comune quella di eliminare la versione customizzata che l’operatore telefonico installava nel telefono, spesso con crapware e limitazioni varie, per usarne una “stock”, ovvero pulita, spesso piu’ aggiornata, piu’ leggera e senza vincoli. Con Windows Mobile c’e’ stata un’esplosione di questa pratica e le ROM coocked create dalla comunita’ erano spesso di gran lunga migliori di quelle standard: parecchi bugfix, driver e sistemi operativi aggiornati, utility precaricate per risparmiare spazio, Erano insomma capaci di prolungare la vita di un device di un anno o piu’. Dopotutto intendiamoci, i produttori di dispositivi non hanno interesse a rilasciare versioni aggiornate del firmare dei propri prodotti, preferiscono che si buttino via e si ricomprino nuovi con quanto di nuovo c’e’ sul mercato.

Android, ovviamente, non fa differenza. Unica controindicazione di questo processo di customizzazione della ROM e’ la perdita della garanzia, ma si puo’ sempre ripristinare quella originale ;)

Considerazione finale dopo aver sperimentato per un paio di giorni tutto: ma come ho fatto ad aspettare cosi’ tanto tempo prima di usarle sul mio Nexus One!

 

I passi da seguire per un Nexus One

Ovviamente ogni telefono ha una sua sequenza di comandi per essere sbloccato e personalizzato, di seguito quelli per il mio Nexus One:

  • Sbloccare il bootloader del device per poter installare una nuova recovery image, al posto di quella standard (si usa fastboot).
  • Installare una Custom Recovery Image che permettera’, tra le altre cose, di installare delle ROM personalizzate (ClockWorld Mod).
  • Tramite la Custom Recovery Image, fare un salvataggio del sistema e poi caricare la nuova ROM personalizzata.
  • Installazioni aggiuntive.

Purtroppo, la prima volta che si esegue questo processo, tutti i settaggi delle app saranno irrimediabilmente persi. Quindi addio punti nei giochi, impostazioni di programmi e tutto quello che non viene salvato nativamente nel cloud o sulla SD dalle singole applicazioni. Le volte successive, grazie all’accesso root al dispositivo e ai tool di backup esistenti, questo problema sara’ solo un brutto ricordo. Ragione in piu’ per fare il prima possibile lo sblocco, anche solo per avere un salvataggio completo di tutto, in caso di perdita del device.

 

Sbloccare il bootloader ed installare Fastboot

Una volta il comando fastboot era installato nell’Android SDK, poi e’ stato tolto. Qui si puo’ trovare un eseguibile multipiattaforma: e questa e’ la procedura dettagliata per sbloccare il boot del device.

  • Scaricare i pacchetti del fastboot per linux e copiati nella directory platform-tools dell’sdk Android
  • Boot del device nel bootloader (premere il trackpad e accendere il dispositivo). Apparira’ uno schermo con dei robottini Android su uno skate.
  • Controllare che in alto a sinistra ci sia la scritta S-OFF, che indica il security off del dispositivo, quindi la possibilita’ di sbloccarlo
  • Controllare che sia selezionato FASTBOOT e non HBOOT nelle voci del menu’
  • Connettere il device via USB al computer
  • Lanciare, dal computer, il comando fastboot devices e controllare che il proprio device sia elencato
  • Lanciare, dal computer, il comando fastboot oem unlock e confermare l’unlock del device

Tutti i dati saranno cancellati e il device verra’ riavviato. Per controllare se e’ effettivamente stato sbloccato, avviare nuovamente il bootloader e questa volta, in altro, dovrebbe apparire la scritta *** UNLOCKED ***

 

Installare una Custom Recovery Image

Compito della Custom Recovery Image e’ quello di installare custom rom, salvare dati, partizionare sd card, cancellare dati, resettare impostazioni particolari di sistema e molto altro. Ci sono diversi programmi molto usati e che fungono bene allo scopo, io ho scelto ClockWorldMod Recovery, ecco spiegato cos’e’. Per installarlo, ho seguito questi passi qui, che comprendono anche il link per il download del file img. In alternativa, c’e’ anche Amon-Ra’s

  • Scaricato il file img nel computer
  • Boot del device nel bootloader
  • Connettere il device via USB al computer
  • Lanciare il comando fastboot flash recovery /path/to/recovery-clockwork-3.0.0.5-passion.img
  • Riavviare il device. La Custom Recovery Image e’ presente ed operativa.

Ovviamente esiste una versione piu’ nuova della 3.0.0.5, dopo l’installazione della custom rom ci sono le istruzioni per aggiornarla.

 

Backup del sistema operativo, conosciuto anche come Nandroid backup, e installare di una custom ROM

Prima di installare una qualunque custom rom, e’ buona cosa fare un backup dell’intero sistema operativo, che servira’ anche nel caso in cui le cose vadano storte e il device non si riavvii piu’, ad esempio a a causa di una rom sbagliata, un errore nella sd che ha corrotto il file ecc. Inoltre e’ l’immagine che va rimessa sul dispositivo in caso di invio in assistenza (assieme all’esecuzione del comando fastboot oem lock per ribloccare il bootloader e riportarlo allo stadio originale). Conosciuto anche come Nadroid backup, ecco i passi che ho seguito:

  • Fare il reboot in recovery mode: lanciare il bootloader, scegliere recovery, oppure, con il device connesso via usb, lanciare il comando adb reboot recovery.
  • Scegliere la voce di menu’ Backup and Restore
  • Lanciare in backup e aspettare un paio di minuti
  • Per il restore, stessa procedura, ma selezionando restore invece di backup, e l’immagine da ripristinare (tramite data e ora del backup fatto)

 

Installazione di una Custom ROM

Ovviamente esistono tantissime custom rom, sia in base al device, sia in base all’orientamento che viene dato alla rom (performance, cool&stylish, funzionalita’ ecc). Personalmente, e per un Nexus One, ritengo che ci siano tre grandi alternative: installare una rom stock, una Cyanogenmod o una MIUI. Consiglio la prima scelta a chi usa il device per sviluppare e testare le proprie applicazioini, ma non vuole perdere i benefici di essere root: le rom customizzate, infatti, sono molto diverse da quella originale, quindi potrebbero anche avere dei comportamenti inattesi / fuori dagli standard che potrebbero pregiudicare il buon esito dei test di funzionamento. La Cyanogenmod, invece, e’ tipicamente per gli smanettoni: tantissimi settaggi, ottimizzazioni alle stelle e velocita’ da urlo. MIUI, infine, e’ esteticamente qualcosa di unico ed offre applicazioni di gran lunga migliori di quelle standard (player musicale, rubrica dei contatti, backup integrato ecc). A voi la scelta. Io le sto provando entrambe e, per ora, la MIUI mi ha conquistato. Seguiranno post piu’ dettagliati.

A prescindere dal tipo di rom i passi sono molto simili, ecco quelli che ho seguito io per la Cyanogenmob, secondo la guida ufficiale.

  • Scaricare nel computer il file della custom rom, prendendola dal sito o scaricandola con qualche app direttamente dal device. E’ un file zip, che va copiato nella propria SD (dove si vuole, io ho creato la cartella /roms e le metto li sotto). Io ho preso la versione stable da qui.
  • Nel caso di una Cyanogenmod, se si vogliono anche le Google Apps (Market, GMail ecc), occorre scaricare l’apposito pacchetto.
  • Fare il reboot in recovery mode: lanciare il bootloader, scegliere recovery, oppure, con il device connesso via usb, lanciare il comando adb reboot recovery.
  • Selezionare un Wipe data/factory reset e poi Wipe data/Cache partition: questo cancellera’ tutti i dati presenti, ma e’ fondamentale farlo quando si installa una nuova tipologia di ROM, non sempre richiesto quando si passa ad un nuova versione di rom della stessa famiglia.
  • Selezionare Install zip from sd card e poi Choose zip from sdcard e navigare fino a scegliere il file scaricato con la rom in precedenza
  • Ripetere il precedente passo, ma con il file delle Google Apps
  • Riavviare il sistema dall’apposito’ menu.
  • Let’s the magic happens! La ROM e’ pronta all’uso.

 

Continue reading ‘Come installare Cyanogenmod, MIUI o una custom rom sul Nexus One’ »

NavigationBar in style iPhone UITabBarController per Android

Nel porting di applicazioni iOS su piattaforma Android, ci sono casi in cui si vuole necessariamente una barra di navigazione nella parte bassa dello schermo, come quella presente in molte applicazioni iPhone/iPad.

Ci sono diversi approcci che si possono seguire. Usare una libreria che rende anche possibile lo scrolling dei bottoni, un controllo personalizzato e gestito tutto via codice, dei TabHost con dei TabWidget, oppure inventarsi altro per gestire anche i Fragment.

Invece io voglio ottenere lo stesso risultato con la massima flessibilita’ possibile, quindi usando solo controlli standard e semplici, al massimo personalizzandone lo stile. Quindi il componente principale della navigationbar sara’ un RadioGroup, all’interno del quale ogni elemento RadioButton rappresentera’ un pulsante. Un diffuso uso di StateListDrawable rendera’ coerente l’aspetto grafico.

Di seguito il layout dell’activity principale, quella che conterra’ la navigation bar: res/layout/actnavbar.xml

< ?xml version="1.0" encoding="utf-8"?>
 
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@android:color/white"
>
  <radiogroup android:layout_width="fill_parent"
    android:layout_height="60dp"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal"
    android:background="@drawable/navbar_background"
  >
    <radiobutton android:id="@+id/btnAll"
      style="@style/navbar_button"
      android:drawableTop="@drawable/navbar_allselector"
      android:text="All"></radiobutton>
    <radiobutton android:id="@+id/btnPicture"
      style="@style/navbar_button"
      android:drawableTop="@drawable/navbar_pictureselector"
      android:text="Pictures"
      android:layout_marginLeft="5dp"></radiobutton>
    <radiobutton android:id="@+id/btnVideo"
      style="@style/navbar_button"
      android:drawableTop="@drawable/navbar_videoselector"
      android:text="Videos"
      android:layout_marginLeft="5dp"></radiobutton>
    <radiobutton android:id="@+id/btnFile"
      style="@style/navbar_button"
      android:drawableTop="@drawable/navbar_fileselector"
      android:text="Files"
      android:layout_marginLeft="5dp"></radiobutton>
    </radiogroup>
</relativelayout>

Continue reading ‘NavigationBar in style iPhone UITabBarController per Android’ »

Linkflood 2011-09-05 – Clean Code in Android, algoritmi genetici e algoritmi che distruggeranno il mondo

Clean Code in Android Applications – Dependency Injection, pattern MVVM, Roboguide e Annotation: una serie di librerie utili per lo sviluppo di codice Android ad un livello piu’ professionale e in ottica di codice pulito e riusabile, con meno boilerplate possibili.

Charting library for Android – Sempre in tema Android, una libreria per realizzare accattivanti grafici nelle proprie applicazioni.

When algorithms control the world – Qualche riflessione ed esempio di fallimento dei complessi algoritmi e processi automatizzati che ormai gestiscono molte sfere della nostra vita, dalla borsa alla ricerca online. Riflessione necessaria dal momento in cui deleghiamo sempre piu’ scelte a qualcosa fatto da noi, ma che non siamo noi.

Genetic Algorithm – A ‘Walt Disney’ Introduction – Una semplice introduzione alla logica con cui sono costruiti gli algoritmi della famiglia chiamata “Evolutionary Computing” (Genetic Algorithm, Evolutionary Strategies, Evolutionary Programming e Genetic Programming).

Intel ‘Temporarily’ Halting Meego Development – Come era prevedibile, anche Intel ha dato un taglio allo svilupo di Meego. Dopo Symbian e WebOS, ecco il terzo grande ferito della guerra dei tre asset: hardware, sistema operativo e cloud.

Firefox for Tablets - Qualche screenshot della versione per Honeycomb di Firefox.

The “designers should code” bullshit and a not so new idea – Ma i designer devono sapere scrivere codice per essere dei buoni designer? Personalmente penso di no, ma ritengo anche necessario uno scambio di conoscenze tra chi costruisce e chi progetta, tra questi due mondi cosi’ separati. Partendo dalla teoria delle intelligenze multiple, un approccio che propone che i designer “Know what code does”. E viceversa, aggiungerei, arrivando ad un fluido scambio di conoscenze tra membri di team eterogenei.

Why Separate Mobile & Desktop Web Pages? – Nonostante il Responsive Web Design Manifesto consigli di usare una solo pagina HTML e poi ottimizzarla tramite Javascript e CSS in base alle caratteristiche del device che la sta richiedendo (layout, immagini, dimensione degli elementi ecc), in questo post vengono analizzati i pro dell’approccio inverso, ovvero realizzare e manutenere due separate versioni della stessa pagina, una per il desktop e una per il mobile.

Don Norman: Google doesn’t get people, it sells them – Ennesima critica mossa nei confronti di Google (ma si puo’ sostituire con Facebook e altri servizi simili) che “usano” noi utenti come prodotti, per raccogliere quante piu’ informazioni possibili sulla nostra vita e poi offrirle al miglior insersionista. Come criticarlo, in fondo?