Tra le varie attività legate al mondo dell’IT quella dello sviluppo di app per Android è indubbiamente una tra le più richieste.
La sempre maggiore crescita di Android e la diversificazione degli ambienti in cui viene eseguito hanno però comportato il dover eseguire applicazioni su dispositivi dotati di processori Intel x86, un’architettura totalmente differente dai processori ARM con cui il sistema operativo del robottino verde era nato. Un’applicazione Android che viene eseguita su un device con architettura Intel x86 implica il doverne virtualizzare l’esecuzione, un’operazione questa che comporta un’inevitabile degrado in fatto di performance. Per evitare che ciò accada è tuttavia possibile tener conto di alcune linee guida e sfruttare degli strumenti ad hoc che, appunto, offrono la possibilità di ottimizzare le app per l’esecuzione su architettura x86.
Compilazione delle app
Prima di passare in rassegna le modalità di ottimizzazione delle app Android per un’architettura Intel x86 è necessario fare chiarezza su un punto fondamentale: bisogna compilare correttamente le app per la piattaforma in questione.
Partendo dalle impostazioni di default gli SDK vanno a creare un pacchetto .apk dell’app contenente le versioni binarie del codice nativo ed il bytecode risultante dalla compilazione del codice Java. Il bytecode viene virtualizzato mentre il codice nativo generalmente viene compilato in via esclusiva per architetture ARM. Per applicazioni che richiedono un certo livello di performance è quindi necessario scrivere codice nativo. In tal caso è indispensabile seguire una procedura specifica che consente di compilare un’applicazione per le architetture x86 e che, per fortuna, risulta abbastanza semplice.
Parallelismo e multithreading
Oggigiorno i dispositivi Android sfruttano processori multi-core. Andando ad utilizzare tutti i core disponibili non solo migliorano le prestazioni del dispositivo ma è anche possibile risparmiare un notevole quantitativo di energia.
Di sicuro interesse è inoltre l’elevata frequenza con cui vengono effettuate le system call. Combinare insieme diverse azioni periodiche in’una sola azione permette di evitare inutili system call andando dunque a risparmiare, e non poco, sul consumo energetico. Meno transizioni vengono inoltre tradotte in un maggior grado di parallelismo.
Ottimizzare il codice
Il codice utilizzato con maggior frequenza è quello che ha bisogno di maggiori ottimizzazioni. Un ottimo modo per sfruttare a pieno le potenzialità dell’architettura Intel x86 è quello di impiegare istruzioni vettoriali che consentono di eseguire azioni comuni in molto meno tempo e richiedono meno spreco di energia.
Limitare l’utilizzo della memoria
Ovviamente anche ridurre il più possibile l’uso di risorse di memoria va a diminuire il consumo di energia delle app che risultano attive. Affinché ciò avvenga è quindi opportuno cercare di evitare le conversioni di formati grafici che non sono necessarie, cercare di mantenere in cache le strutture dati usate con maggior frequenza e ridurre all’osso lo spostamento dei dati tra il kernel space o lo user space.
Tecnologie specifiche
L’utilizzo di processori Intel x86 permette di sfruttare alcune interessanti tecnologie che si prestano a numerose applicazioni come nel caso di Intel WiDi tramite la quale è possibile connettere un dispositivo ad un monitor esterno senza cavi. Un esempio di utilizzo di questa tecnologia è l’app Grace.
Considerando poi il fatto che utilizzare il simulatore di Android fornito da Google è molto pesante è possibile sfruttare soluzioni alternative come quella offerta da Intel e chiamata HAXM (Hardware Accelerated Execution Manager). Trattasi di un hypervisor che utilizza la tecnologia Intel VT-x per migliorare la virtualizzazione dell’emulatore ed aumentarne le prestazioni.
Partendo dal presupposto che tale tecnologia sia supportata dal computer impiegato l’unico problema riscontrato potrebbe derivare dal fatto che Intel VT-x non è abilitata. Per far fronte alla cosa è necessario accedere al BIOS, abilitare Intel VT-x e riavviare l’installazione. Quando poi verrà creato un un AVD (Android Virtual Device) per la simulazione sarà necessario selezionare un’immagine tra quelle disponibili sul sito di Intel.
Intel INDE
Intel INDE è un interessantissimo tool prodotto direttamente da Intel pensato in maniera specifica per aiutare gli sviluppatori ad adattare le proprie app a più architetture.
Intel INDE consente, mediante un’unica interfaccia, di effettuare in maniera semplice e rapida il setup dell’ambiente di sviluppo includendo in maniera automatica compilatori per le architetture ARM ed x86, librerie integrabili che possono essere compilate per le specifiche architetture e varie altre componenti necessarie per lo sviluppo.
Nel dettaglio, Intel INDE provvede ad installare in maniera automatica i seguenti componenti:
- Google Android SDK per Java
- Android NDK per C++
- Android Design
- Apache ANT
Il tool supporta inoltre l’integrazione con tre diverse IDE, quali:
- Microsoft Visual Studio (2012 o successivo)
- Eclipse
- Android Studio
Da notare che con Intel INDE è possibile sfruttare le potenzialità di Intel HAXM per il debugging sull’emulatore.
[Photo Credits | Flickr]