Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Migliorare l'emulatore Android su architetture Intel

Sfruttare le potenzialità di virtualizzazione hardware offerte dai processori Intel che hanno integrato il supporto per VT-x
Sfruttare le potenzialità di virtualizzazione hardware offerte dai processori Intel che hanno integrato il supporto per VT-x
Link copiato negli appunti

Chiunque si sia cimentato almeno una volta nello sviluppo di applicazioni per Android ha certamente familiarità con l'emulatore di dispositivi disponibile nello SDK. Si tratta essenzialmente di un ambiente che emula un dispositivo Android e permette pertanto di averne a disposizione l'ambiente completo. I vantaggi che comporta avere un meccanismo simile sono innegabili.

Anzitutto si tratta di molto più di un tool per il test delle applicazioni, anche se usarlo non è piacevole come avere tra le mani uno smartphone o un tablet reali, l'emulatore permette di osservare il sistema al lavoro, sperimentarne funzionalità e testarne i programmi.

Ciò potrebbe essere interessante anche per un utente "non-sviluppatore" che utilizzando di altri sistemi operativi, volesse provare a muoversi nel launcher di uno smartphone e magari provare qualche applicazione.

Per quanto attiene i programmatori, invece, uno degli aspetti più importanti dell'emulatore è che non ne esiste una sola versione ma è possibile averne a disposizione molte diverse in grado di emulare non solo il sistema ma soprattutto dispositivi diversi come tipologia, dimensioni e versioni di API. Con la dilagante frammentazione del panorama tecnologico Android, chiunque voglia creare app in maniera professionale deve poter testare il proprio programma in una molteplicità di configurazioni di sistema anche senza avere a disposizione altrettanti dispositivi reali.

Purtroppo chi è abituato ad usare un emulatore Android sa anche che deve armarsi di una certa pazienza. Infatti le sue prestazioni non sono sempre ottimali. Anche quando viene impostato correttamenete non è raro che ci si imbatta in situazioni di stallo o che si verifichino malfunzionamenti che segnalino problemi apparentemente inspiegabili. Fortunatamente un rimedio esiste.

Virtualizzare più che emulare

La soluzione adottabile per migliorare le prestazioni dell'emulatore Android viaggia a cavallo tra emulazione e virtualizzazione. Si tratta di sfruttare le potenzialità di virtualizzazione hardware offerte dai processori Intel. Per farlo è necessario che il processore abbia integrato il supporto per VT-x e che questo non sia disabilitato nel BIOS.

Verificata la disponibilità dei requisiti hardware, ormai non rari nelle CPU, si può procedere approntando il necessario sul "fronte" software. Questa fase è tanto più semplice quanto più abbiamo già acquisito una buona dimestichezza con la terminologia e la struttura dello SDK Android.

Android SDK: facciamo il punto

Anche se chi sbiluppa per Android ha già confidenza con l'SDK, il suo Manager e la creazione di emulatori, cerchiamo di sintetizzarle le caratteristiche fondamentali.

Android SDK è un insieme di strumenti realizzati per accompagnare lo sviluppatore nella realizzazione di una app: dalla scrittura, al build fino al test e al confezionamento del pacchetto di installazione.

È possibile configurare il proprio SDK mediante uno strumento grafico, dall'approccio molto amichevole: si tratta dell'Android SDK Manager. È disponibile tramite il programma android contenuto nella sottocartella tools dell'SDK ed è attivabile da riga di comando.

In alternativa può essere richiamato in Eclipse, mediante la voce Android SDK Manager presente nel menu Window, nella Java Perspective, la configurazione di Eclipse che si trova appena si apre l'IDE.

Il Manager si presenta come un lungo elenco di funzionalità raggruppate per versioni di Android. Grazie ad esso, per ogni edizione del sistema operativo, è possibile scaricare strumenti di sviluppo quali SDK platform, esempi di codice ed immagini di sistema per l'emulatore.

In fondo alla finestra dell'SDK Manager, al termine dell'elenco delle versioni Android, appare una cartella denominata Extras che contiene ulteriori utilità. È questo il luogo in cui prima o poi lo sviluppatore capita per reperire o aggiornare aspetti come la libreria di supporto, i Google Play Services o gli USB Driver.

Nelle varie funzionalità rese disponibili nella finestra dell'Android SDK Manager ce ne sono due da notare in particolare:

1. per molte versioni di API sono disponibili immagini di sistema per l'emulatore basate non solo sul processore ARM ma anche per l'Intel x86 Atom;

Figura 1. Immagini Intel x86 Atom
Immagini Intel x86 Atom

2. tra gli Extras è disponibile una voce con etichetta Intel x86 Emulator Accelerator (HAXM).

Figura 2. Scaricare HAXM tra gli Extras
Scaricare HAXM tra gli Extras

Ai fini della trattazione, questi due elementi saranno quelli su cui si concentrerà maggiormente il nostro interesse nello svolgimento dei test che esamineremo nell'articolo.

HAXM: la soluzione per Windows e Mac

Una volta verificati i prerequisiti hardware, si può procedere alla predisposizione di un emulatore "accelerato" a livello hardware. Per fare ciò, nei sistemi Windows e Mac è disponibile, mediante Android SDK Manager, il programma HAXM, acronimo di Hardware Accelerated Execution Manager.

La procedura prevede due passi:

  1. Aprire SDK Manager e scaricare HAXM tra gli Extras;
  2. al termine dello scaricamento, HAXM non sarà ancora installato nel sistema ma solo disponibile come pacchetto di installazione, denominato IntelHAXM.exe su Windows e IntelHAXM.dmg su Mac. Questo file deve essere raggiunto all'interno della cartella dell'Android SDK Manager, seguendo il percorso di sottocartelle

    extras/intel/Hardware_Accelerated_Execution_Manager

    Una volta trovato, si può lanciare l'installazione vera e propria.

L'installazione del pacchetto non presenta particolari difficoltà ed è piuttosto breve. Va comunque tenuto a mente che potrà essere portata a termine solo se il bit VT-x è stato abilitato via BIOS.

L'unica domanda che la procedura di installazione rivolge all'utente riguarda quanta memoria RAM da dedicare al funzionamento di HAXM. Di default, viene proposto 1024 MB e nei sistemi attuali è una quantità che solitamente si può dedicare.

Tutto qui. HAXM è disponibile e non resta che provarlo.

E su Linux? KVM

Su Linux HAXM non è disponibile. Lo si vede già nell'Android SDK Manager dove accanto alla voce relativa a HAXM appare il messaggio "Not compatible with Linux". Tuttavia anche in questo sistema non viene negata la possibilità di sfruttare un emulatore Intel accelerato, fermo restando, ovviamente, il requisito hardware di disponibilità (e abilitazione via BIOS) della tecnologia VT-x.

Si può ricorrere a KVM, il modulo kernel di virtualizzazione presente in Linux. La sua installazione non è complicata e si articola lungo le seguenti fasi, qui prese in esame basandoci su una distribuzione Ubuntu 12.04:

  1. verifica della corretta disponibilità di virtualizzazione nel sistema operativo. Lo si fa consultando i flags disponibili all'interno del file cpuinfo del filesystem proc. Il seguente comando:

    egrep -c '(vmx|svm)' /proc/cpuinfo

    restituirà 1 o un numero maggiore se la virtualizzazione risulta essere disponibile, 0 altrimenti. Solo nel primo caso ovviamente si potrà procedere;

  2. un'ulteriore verifica, allo scopo di controllare la possibilità di installare KVM, può essere fatta con il comando:

    kvm-ok

    disponibile nel pacchetto cpu-checker. L'output di risposta dichiarerà chiaramente se è possibile o meno utilizzare KVM date le caratteristiche e la configurazione BIOS della CPU;

  3. la vera e propria installazione avviene mediante pacchetti precompilati con:

    sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Al termine, il pacchetto KVM sarà disponibile. Per permetterne un corretto funzionamento è consigliabile aggiungere il proprio utente ai gruppi kvm e libvirtd con i seguenti comandi:

sudo adduser username kvm
sudo adduser username libvirtd

Affinchè la modifica dei gruppi abbia effetto è necessario effettuare un nuovo login nel sistema.

Per verificare l'effettiva disponibilità di KVM si può digitare il seguente comando:

sudo virsh -c qemu:///system list

che essenzialmente serve a chiedere la lista delle macchine virtuali installate nel sistema.

Provare l'emulatore accelerato

In definitiva, che si sia in possesso di un sistema Windows, Mac o Linux il modo di avere a disposizione un emulatore Android più veloce c'è: basta affrontare una delle procedure di installazione proposta oltre a possedere una CPU con i necessari requisiti hardware. Non resta che mettere il tutto alla prova. Per farlo, è necessario creare un emulatore Android come il programmatore dovrebbe già essere abituato a fare:

  1. per prima cosa, scaricare mediante l'Android SDK Manager una immagine di sistema Intel x86;
  2. aprire l'Android Virtual Device Manager. Lo si può fare dall'interno di Eclipse o da riga di comando invocando il programma android della cartella tools dello SDK seguito dal parametro avd;
  3. procedere alla creazione di un nuovo emulatore cliccando sul tasto "New..." della finestra che si apre. Si può dare la configurazione che si vuole purchè si scelga una versione del sistema Android per la quale si è scaricata un'immagine di sistema Intel;
  4. abilitare se possibile anche l'emulazione della GPU per migliorare la reattività del display nell'emulatore.

Una volta avviato il nuovo dispositivo, andrà in esecuzione il sistema basato su immagine Intel, accelerato a livello hardware. Normalmente l'Android Virtual Device Manager segnala l'entrata in funzione di HAXM riproducendo un messaggio del tipo "HAX is working and emulator runs in fast virt mode".

Figura 3. HAXM è in funzione
HAXM è in funzione

Sicuramente, accurati test possono misurare l'entità dell'accelerazione ottenuta nell'emulatore ma per rendersi conto dell'impatto che può produrre è sufficiente provarlo.

A partire dalla fase di boot, si nota a vista che l'emulatore è decisamente più veloce. Il confronto è stato fatto su due configurazioni diverse ma entrambi su pc portatili:

  • un sistema Linux Ubuntu 12.04 con CPU Intel i7 2670QM, processore quadcore con HyperThreading;
  • un sistema Windows7 con CPU Intel i5 2410M, dualcore anch'esso con HyperThreading.

In entrambe le configurazioni sono stati predisposti due emulatori con sistema operativo Android 4.2.2 (API level 17), uno su architettura ARM e l'altro con l'immagine Intel x86 Atom. Trattandosi di due macchine di sviluppo con sistemi operativi diversi l'accelerazione hardware si è raggiunta con KVM nel primo caso, HAXM nel secondo. In entrambi i casi, il boot dell'emulatore ARM ha impiegato circa 40 secondi per completarsi mentre quello dell'emulatore Atom è stato praticamente istantaneo in entrambe le macchine, impiegando al più alcuni secondi.

Come si può presumere, venendo chiamato in causa maggiormente l'hardware mediante la virtualizzazione l'incremento di prestazione dipende molto dalla macchina di sviluppo che si sta usando. Il vantaggio non si limita ovviamente alla sola fase di boot ma si riscontra nell'utilizzo di qualunque applicazione ottenendo l'impressione che il sistema sia un pò più "reale" e meno emulato.

(articolo sponsorizzato)

Ti consigliamo anche