Velocizzare l'emulatore Android* sull'architettura Intel®

Sunto:

Se siete uno sviluppatore di Android* che è insoddisfatto delle prestazioni dell'emulatore Android, allora questo documento fa per voi. Sappiamo delle continue lamentele degli sviluppatori di Android in merito all'emulatore che è lento e complesso da utilizzare. La situazione è però cambiata. Se usate un computer sufficientemente aggiornato con un processore Intel® che ha attivata la Intel® Virtualization Technology e che esegue Microsoft Windows* o Apple Mac OS*, potete allora usare Intel® Hardware Accelerated Execution Manager (Intel® HAXM) o KVM per Linux*, che è un modo semplice per accelerare notevolmente l'emulatore Android e, di conseguenza, le attività di test e debug delle applicazioni Android. Questo documento spiega tutti i passaggi richiesti per accelerare l'emulatore e come utilizzarlo. Spiega quindi come usare l'NDK per compilare il codice nativo x86 e il modo corretto per inviare gli APK contenenti le librerie native x86 allo store Google Play. Intel HAXM è anche usato per accelerare l'emulatore Tizen*, ma questo è un argomento che esula dall'ambito di questa documentazione. Per maggiori informazioni in merito, visitare tizen.org nella sezione dell'SDK.

Indice

1. Introduzione
2. Installazione
2.1. Prerequisiti
2.2. Installazione in Windows
2.3. Installazione in Linux
2.3.1. Installazione di KVM
2.4. Creazione di un AVD (Android* Virtual Device)
3. Metodologie ottimali
3.1. Testare l'applicazione con l'emulatore di Eclipse
3.2. Inviare più pacchetti APK per ABI diverse oppure inviare dei fat binary a Google Play
3.3. Compilare l'NDK per x86
3.3.1. Aggiungere il percorso dell'NDK alla variabile d'ambiente
3.3.2. Compilazione con l'NDK
3.3.3. Un altro modo per compilare con l'NDK

1. Introduzione

Questo documento offre le indicazioni per eseguire l’installazione di Intel® Hardware Accelerated Execution Manager (Intel® HAXM), un motore di virtualizzazione basato su hardware (hypervisor) che usa la Intel® Virtualization Technology (Intel® VT) per accelerare lo sviluppo Android* in Windows*. Spiega anche come configurare una macchina virtuale basata su kernel (KVM) e basata su hardware in Linux* e le metodologie ottimali per la compilazione nativa e l'invio di applicazioni allo store Google Play per x86.

2. Installazione

2.1. Prerequisiti

  • È necessario che l'Android SDK sia installato.
  • Il computer deve avere un processore Intel con il supporto per Intel VT-x, EM64T e la funzionalità Execute Disable(XD) Bit abilitata nel BIOS.

2.2. Installazione in Windows

Dopo aver installato l'Android SDK, aprire SDK Manager. È possibile trovare Intel HAXM nella sezione delle funzionalità aggiuntive.

Selezionare la casella e fare clic sul pulsante ‘Install packages…’ per installare il pacchetto. Non lasciarsi però trarre in inganno dallo stato visualizzato (‘Installed’), perché in realtà l'installazione non è avvenuta. L'SDK infatti copia sul computer solo il file eseguibile di Intel HAXM e sta a voi installarlo.

Per installare l'eseguibile di Intel HAXM, ricercare nel disco rigido il file IntelHaxm.exe (o IntelHAXM.dmg in Mac OS X). Se si sono lasciate invariate le impostazioni predefinite, il file dovrebbe trovarsi in C:\Programmi\Android\android-sdk\extras\Intel\Hardware_Accelerated_Execution_Manager\IntelHaxm.exe.

Intel HAXM funziona solo in combinazione con una delle immagini dei sistemi x86 basati sul processore Intel® Atom™, che sono disponibili per Android 2.3.3 (API 10), 4.0.3 (API 15), 4.1.2 (API 16), 4.2.2 (API 17). Queste immagini di sistema Intel possono essere installate esattamente come si fa per le immagini basate su ARM tramite l'SDK manager.

Quando si fa clic sull'eseguibile IntelHaxm, appare una schermata di benvenuto simile alla seguente:

È possibile regolare la quantità di memoria RAM da allocare a Intel HAXM. Dopo questa operazione, fare clic su Next. La schermata successiva conferma l'allocazione della memoria. Se tutte le informazioni sono quelle desiderate, fare clic su Install.

Per poter installare Intel HAXM, è necessario che Intel VT-x sia abilitato nel BIOS, altrimenti durante l'installazione sarà visualizzato un errore simile al seguente:

Se si riceve questo errore, entrare nel BIOS ed abilitare la funzione.

La seconda opzione per scaricare Intel HAXM e l'immagine dell'emulatore del sistema x86 è di andare direttamente al sito Web http://software.intel.com/it-it/android e da lì scaricare i componenti necessari.

2.3. Installazione in Linux

I passaggi per accelerare l'emulatore Android per Linux sono diversi da quelli per Windows e Mac OS X perché Intel HAXM non è compatibile con Linux ed è perciò necessario usare una macchina virtuale basata su kernel (KVM). I passaggi descritti di seguito sono stati eseguiti usando Ubuntu* 12.04 e potrebbero variare leggermente con altre distribuzioni Linux.

Come visto per Windows (e Mac OS X), è prima necessario scaricare l'Android SDK dal sito per sviluppatori Android. Si troverà un pacchetto ADT (Android Developer Tool) che contiene sia Eclipse* IDE che l'Android SDK. Scaricare il file zip ed estrarlo sul computer Linux. Accertarsi di usare la versione corretta per la propria distribuzione Linux, a 32 bit o a 64 bit. Lo si può verificare facilmente usando il comando:

file /sbin/init

Prima di iniziare a installare i pacchetti richiesti per KVM, si consiglia di accertarsi di avere l'ultimo repository digitando:

sudo apt-get update

2.3.1. Installazione di KVM

Per installare ed eseguire KVM, che è una soluzione completa di virtualizzazione per Linux su hardware x86 (ad esempio, Intel VT), è prima necessario controllare che la CPU supporti la virtualizzazione dell'hardware digitando:

egrep –c ‘(vmx|svm)’ /proc/cpuinfo

Se il risultato è 0, significa che la CPU non supporta la virtualizzazione dell'hardware, che è necessaria per eseguire la KVM. Se il risultato è 1 o un valore superiore, significa che si può procedere senza problemi, ma occorre sempre verificare che sia abilitata nel BIOS (vedere la Sezione 2.2).

Quindi si dovrà installare KVM, se non lo si è già installato. Si può verificare se il processore supporta KVM digitando:

kvm-ok

Se KVM è installato, sarà visualizzato questo messaggio:

"INFO: Your CPU supports KVM extensions
INFO: /dev/kvm exists
KVM acceleration can be used"

Altrimenti, sarà necessario andare nel BIOS e attivare Intel VT se appare il seguente messaggio:

"INFO: KVM is disabled by your BIOS
HINT: Enter your BIOS setup and enable Virtualization Technology (VT),
and then hard poweroff/poweron your system
KVM acceleration can NOT be used"

Nel passaggio successivo si installa la KVM e alcuni altri pacchetti necessari. A tal fine, digitare

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

Nella finestra successiva, selezionare No configuration se si desidera lasciare immutata la propria configurazione:

Quindi, aggiungere il proprio utente al gruppo KVM e al gruppo libvirtd. A tal fine, digitare:

sudo adduser proprio_nome_utente kvm
sudo adduser proprio_nome_utente libvirtd

Dopo l'installazione, eseguire nuovamente l'accesso cosicché le modifiche abbiano effetto. È possibile testare l'installazione digitando:

sudo virsh -c qemu:///system list

Si è ora pronti a continuare con il passaggio successivo in cui si crea ed esegue il dispositivo virtuale Android (AVD). La procedura è la stessa per Linux e Windows.

2.4. Creazione di un AVD (Android* Virtual Device)

Dopo aver installato l'SDK e Intel HAXM (o KVM in Linux), si può creare un dispositivo virtuale con emulazione accelerata da hardware. Al tal fine, andare in AVD Manager e creare un nuovo dispositivo. Accertarsi di selezionare Intel Atom (x86) come CPU/ABI. L'opzione appare nel menu a discesa solo se è installata l'immagine di sistema Intel x86. Per una maggiore fluidità della grafica, attivare l'emulazione della GPU mentre si crea l'AVD.

Fare clic su New e creare il dispositivo AVD x86. Accertarsi di selezionare un'API che sia supportata dalle immagini dei sistemi x86, di aver impostato l'opzione CPU/ABI a x86 e di aver abilitata l'emulazione della GPU (OpenGL ES*). Fatto questo, fare clic su Create AVD per creare il dispositivo virtuale Android.

È possibile avviare l'AVD x86 facendo clic su Start e quindi su Launch.

Se l'installazione riesce, all'avvio dell'emulatore appare una finestra di dialogo indicante che Intel HAXM è eseguito in modalità virtuale veloce.

Per accertarsi ulteriormente che l'immagine utilizzata sia di un sistema x86, è sempre possibile controllare le informazioni riportate in ‘About phone’ nell'emulatore.

L'aumento delle prestazioni che si osserverà con Intel HAXM o KVM dipende dal PC utilizzato, dall'unità, dalla memoria e da altri fattori, ma dovrebbe essere di un ordine di grandezza di 5-10 volte. La schermata seguente mostra il confronto tra un AVD abilitato x86/HAXM e un AVD basato su ARM. Il dispositivo AVD x86 si avvia nello schermo bloccato nel giro di 15 secondi mentre il dispositivo AVD non di Intel impiega 40 secondi, che è una differenza notevole.

[Con Intel HAXM (o KVM) si dovrebbe rilevare un aumento delle prestazioni di 5-10 volte, in base alla configurazione del sistema. Il software e i carichi di lavoro utilizzati nei test delle prestazioni potrebbero essere stati ottimizzati per le prestazioni solo sui microprocessori Intel. I test delle prestazioni, come SYSmark* e MobileMark*, sono misurati usando computer, componenti, software, operazioni e funzioni specifici. Qualunque modifica a questi fattori potrebbe causare variazioni nei risultati. Per valutare in modo più completo i prodotti considerati per l'acquisto, si consiglia di consultare altre informazioni e test delle prestazioni, incluse le prestazioni del prodotto quando usato insieme ad altri prodotti. Configurazione: in questo caso per i test è stato usato Mac Book Pro. Per maggiori informazioni andare a http://www.intel.com/performance”]

3. Metodologie ottimali

3.1. Testare l'applicazione con l'emulatore di Eclipse

Intel HAXM può essere utilizzato per velocizzare l'emulatore durante i test, sia che si tratti di un'applicazione basata su NDK che di un'applicazione Dalvik*. Se si sta sviluppando con Eclipse, seguire questa semplice procedura per accertarsi di usare Intel HAXM quando si avvia l'emulatore.

Accertarsi innanzitutto di creare l'AVD secondo le istruzioni date nel passaggio 2. Se l'AVD è pronto, andare a Run As -> Run Config come mostrato qui di seguito:

Dovrebbe aprirsi una pagina simile a questa:

In questa pagina è possibile scegliere l'AVD desiderato selezionando la casella corrispondente. Dopo aver creato l'AVD e impostata la configurazione, iniziare a compilare il progetto ed eseguirne il debug con l'emulatore selezionando Run As -> Android Application. In questo modo l'AVD accelerato da hardware si avvia automaticamente.

Dopo che l'AVD si è avviato, dovrebbe apparire la schermata iniziale dell'applicazione (occorre prima sbloccare lo schermo).

3.2. Inviare più pacchetti APK per ABI diverse oppure inviare dei fat binary a Google Play

In passato si sarebbe inviato un fat binary dell'applicazione sviluppata contenente tutte le librerie e i file NDK, senza poter differenziare tra le diverse architetture. In questo caso gli utenti avrebbero scaricato l'APK completo contenente anche i file non rilevanti per le architetture specifiche, ad esempio gli utenti x86 si sarebbero ritrovati con del codice ARM e viceversa. Lo svantaggio di questo metodo è che il fat binary ha dimensioni notevoli e l'utente è obbligato a scaricare una gran quantità di dati che non sono applicabili al dispositivo. È in genere accettabile se l'APK ha dimensioni inferiori ai 10-20 MB.

Intel e Google hanno implementato un meccanismo di filtro della CPU che, se ci si attiene al codice di versione consigliato mostrato qui di seguito, permette di inviare più APK contenenti le diverse librerie specifiche per ciascuna architettura.

La prima cifra si riferisce all'ABI, ad esempio 6 si riferisce all'architettura x86. Le cifre successive si riferiscono al livello di API che si intende utilizzare (11), alle dimensioni dello schermo (13) e quindi al numero di versione dell'applicazione (3.1.0).

Accertarsi che il numero di versione dell'applicazione contenga almeno 8 cifre e di assegnare le prima cifra più elevata alla versione x86. Nell'esempio precedente, si userebbe 6 per indicare x86, 2 per ARMv7 e 1 per ARMv5TE. In questo modo si permette che le versioni x86 siano quelle preferite dai dispositivi x86 e le versioni ARM siano quelle preferite dai dispositivi ARM.

Attenendosi a queste linee guida si assicura che gli utenti ottengano le prestazioni migliori dal dispositivo che usano. Si evita inoltre che gli utenti, a causa di errori di traduzione di codice, tentino di eseguire le applicazioni su dispositivi specifici.

Ulteriori informazioni sono reperibili all'indirizzo http://software.intel.com/it-it/articles/google-play-supports-cpu-architecture-filtering-for-multiple-apk.

3.3. Compilare l'NDK per x86

Questa sezione descrive come compilare la parte per x86 dell'NDK dell'applicazione.

Affinché l'applicazione basata su NDK possa essere eseguita su un dispositivo AVD x86 è necessario compilare la libreria NDK per l'architettura x86. A tal fine, seguire questa semplice procedura:

Aprire un prompt dei comandi e andare nella cartella dei file NDK, come mostrato sotto:

Accertarsi di aver impostato il percorso della variabile d'ambiente in modo da poter utilizzare lo script ndk-build da qualsiasi posizione.

3.3.1. Aggiungere il percorso dell'NDK alla variabile d'ambiente

Per impostare la variabile d'ambiente per l'NDK, fare clic su Computer e selezionare Properties. Andare alle proprietà di sistema Advanced e individuare le variabili d'ambiente (Environment Variables). Selezionare Path e fare clic su Edit. Alla fine della stringa ‘Variable Value’, aggiungere il percorso alla propria cartella principale dell'NDK, quella che contiene il file ndk-build.cmd come mostrato nell'immagine seguente:

3.3.2. Compilazione con l'NDK

Dal prompt dei comandi andare alla cartella dell'NDK ed eseguire:

ndk-build APP_ABI:=all

Il file NDK sarà eseguito per ciascuna architettura disponibile, ad esempio ARMv5TE, ARMv7, x86 e mips.

Per compilare per architetture specifiche, sostituire ‘all’ con le diverse architetture. Ad esempio:

ndk-build APP_ABI:=armeabi armeabi-v7a x86 mips

Accertarsi di aggiornare il progetto in Eclipse affinché siano acquisite le ultime impostazioni, come ad esempio le ultime cartelle create dallo script ndk-build. Nella cartella libs dei progetti dovrebbero ora essere presenti quattro cartelle, una per ciascuna architettura.

Si è ora pronti a usare l'AVD x86 con l'applicazione NDK.

3.3.3. Un altro modo per compilare con l'NDK

Un altro modo per compilare il codice nativo per tutte le architetture, inclusa l'architettura x86, è di modificare il file Application.mk che si trova nella cartella jni. Se il file Application.mk non è presente, lo si può creare e aggiungervi l'istruzione seguente:

APP_ABI:=armeabi armeabi-v7a x86 mips

In questo modo, quando si esegue il file batch, ad esempio lo script ndk-build, saranno compilate le librerie per tutte le architetture disponibili.

Inoltre, per semplificare l'uso, invece di elencare tutte le architetture basta indicare ‘all’:

APP_ABI:=all