L'emulatore di Android messo a disposizione da Google è sicuramente il migliore che possiamo trovare dato che quasi ogni app rilasciata sul PlayStore è stata molto probabilmente testata proprio su questo programma. Di solito fa parte della suite Android Studio che contiene tutti i componenti e i programmi necessari per creare app per Android ma se vogliamo solo l'emulatore e poco altro è possibile averlo senza per forza installare tutta la suite. Dato che sarà un installazione minimale, dovremo utilizzare la linea di comando per configurare e avviare l'emulatore, il che non è affatto un male perché questo metodo di interazione con il computer è uno dei più efficienti che ci sia!
Prerequisiti
Per far funzionare correttamente l'emulatore servono alcuni requisiti hardware:
- un processore moderno che supporti la virtualizzazione;
- almeno 8 GB di RAM;
- almeno 8 GB di spazio su disco.
Un altro requisito fondamentale per far funzionare l'emulatore è avere installato JAVA Development Kit sul proprio computer, non ne l'ultima versione però! Android Studio lavora bene con la versione 8; utilizzando solo l'emulatore, potete provare anche una versione più recente ma sappiate che potreste incorrere in qualche problema (io utilizzo la versione 11, qualche volta salta fuori qualche errore, ma tutto sommato funziona bene).
Non tratterò la parte riguardante l'installazione di questo componente, accennerò soltanto che, per quanto riguarda Linux, potete cercareopenjdk
nei repository della vostra distro mentre per MacOS e Windows potete scaricare il file di installazione direttamente dal sito di Oracle. In alternativa, se volete un installazione più snella, per MacOS potete utilizzare brew
per installare openjdk@8
e seguire le istruzioni al termine dell'installazione mentre per Windows potete utilizzare scoop
per installare openjdk8-redhat
.
» Leggi: Guida a Homebrew: il gestore pacchetti mancanti per MacOS
» Leggi: Scoop: il package manager per Windows!
A questo punto possiamo passare a vedere i passi necessari per installare il solo emulatore Android su ogni piattaforma.
Cosa andremo a fare?
Quello che andremo a fare è scaricare solo il gestore del kit di sviluppo di Android Studio che è sdkmanager
, vedremo in dettaglio come fare e quali operazioni sono necessarie per farlo funzionare al meglio, con ogni piattaforma. Con questo programma che, con l'installazione minimale che faremo, funziona solo da riga di comando, potremo scaricare l'emulatore vero e proprio e i file necessari per creare una macchina virtuale con la versione di Android che ci interessa. Infine vedremo come creare una macchina virtuale Android e come possiamo ottimizzarla in modo da renderla più veloce.
Una volta configurata la nostra macchina virtuale, sarà meglio non dimenticarci di sdkmanager
che potremo utilizzare per tenere aggiornati tutti i componenti installati (passando l'opzione --update
) e per scaricare nuove versioni di Android quando saranno rese disponibili da Google.
LINUX
Questa guida è piuttosto generica e dovrebbe essere valida per ogni distro Linux anche se, nello specifico, prenderemo in esame Ubuntu/Linux Mint.
Per prima cosa scarichiamo gli strumenti da linea di comando messi a disposizione da Google (Command Line Tools) che contengono proprio il programmasdkmanager
. Il file appena scaricato è un archivio compresso .zip che consiglio di estrarre nel path ~/.android/sdk
, all'interno della home del nostro utente, in modo da poter utilizzar sdkmanager senza necessità di ricorrere ai permessi di root (tramite sudo). I seguenti comandi creeranno il percorso desiderato dove poi estrarremo il contenuto dell'archivio
mkdir -p ~/.android/sdk
unzip ~/Scaricati/commandlinetools-linux-8092744_latest.zip -d ~/.android/sdk
Ovviamente dovrete aggiustare il percorso al file zip se l'avete scaricato in un altro path.
Adesso se proviamo ad avviare sdkmanager
, specificando il percorso completo all'eseguibile, con l'opzione --list
che mostra tutti i pacchetti disponibili per essere installati, questo restituirà un errore inerente a sdk_root: questo dipende dal fatto che sdkmanager si aspetta di trovarsi in ~/.android/sdk/cmdline-tools/latest mentre in realtà si trova in ~/.android/sdk/cmdline-tools/. Potremo specificare ogni volta l'opzione --sdk_root con il percorso reale di sdkmanager ma, per praticità, assecondiamo sdkmanager e spostiamo tutto il contenuto della cartella ~/.android/sdk/cmdline-tools/ in ~/.android/sdk/cmdline-tools/latest/; per farlo serviranno giusto due comandi:
mkdir ~/.android/sdk/cmdline-tools/latest
mv ~/.android/sdk/cmdline-tools/!(latest) ~/.android/sdk/cmdline-tools/latest
Adesso che abbiamo accontentato sdkmanager possiamo utilizzarlo per installare i pacchetti base necessari per il corretto funzionamento ma dato che questa parte è uguale per tutti i sistemi la vedremo più avanti, intanto facciamo qualche altra operazione che ci consentirà di semplificarci la vita in seguito, come aggiungere alcuni percorsi alla variabile PATH, in modo da poter invocare sdkmanager
(e in seguito gli altri eseguibili che installeremo) senza dover specificare l'intero percorso: dato che abbiamo installato tutto nella home del nostro utente, modificheremo la variabile PATH solo per questo, aggiungendo infondo al file ~/.bashrc la seguente stringa con il nostro editor di testo preferito (nano ~/.bashrc
)
export PATH="$PATH:/home/user/.android/sdk/cmdline-tools/latest/bin/:/home/user/.android/sdk/emulator/:/home/user/.android/sdk/platform-tools/"
Non preoccupatevi se ancora alcuni percorsi non esistono, lo saranno quando installeremo l'emulatore e i componenti necessari. Dato che siamo qui, possiamo anche specificare la variabile di ambiente ANDROID_HOME
impostandola a /home/user/.android/sdk/
Naturalmente in entrambe le stringhe sopra dovremo sostituire user con il nome del nostro utente! Se vogliamo che le modifiche siano subito disponibili, dovremo dare il comando source ~/.bashrc
.
Un'altra cosa che possiamo fare su Linux è installare alcuni pacchetti che saranno necessari per abilitare l'accelerazione hardware dell'emulatore Android; i pacchetti su Ubuntu e derivate sono i seguenti, per altre distro potrebbero avere nomi diversi ma probabilmente simili:
qemu-kvm
libvirt-daemon-systemlibvirt-clients
bridge-utils
MACOS
Scarichiamo la versione per MacOS di Command Line Tools e, in maniera simile a quanto visto per Linux, estraiamolo in una cartella nella home del nostro utente:
mkdir ~/Library/Android/SDK
unzip ~/Download/commandlinetools-mac-8092744_latest.zip -d ~/Library/Android/SDK
Se abbiamo scaricato il file zip in un altra posizione, dovremo indicare il percorso corretto ad unzip
.
Adesso dovremo spostare sdkmanager
nella cartella latest dove si aspetta di trovarsi; possiamo farlo con un semplice comando, ignorando l'errore
mv ~/Library/Android/SDK/cmdline-tools/* ~/Library/Android/SDK/cmdline-tools/latest
Anche in questo caso sarà meglio aggiungere alcuni percorsi alla variabile PATH e impostare una nuova variabile (ANDROID_HOME); anche in questo caso, apporteremo queste modifiche solo per il nostro utente, aprendo il file ~/.zshrc
con il nostro editor di testo preferito (ancora una volta utilizzerò nano
) e aggiungendo le seguenti stringhe
export PATH="$PATH:/Users/user/Library/Android/SDK/cmdline-tools/latest/bin:/Users/user/Library/Android/SDK/emulator/:/Users/user/Library/Android/SDK/platform-tools"
export ANDROID_HOME="/Users/user/Library/Android/SDK/"
Anche in questo caso dovremo, ovviamente, sostituire user con il nome del nostro utente!
Salviamo e chiudiamo l'editor di testo. Per rendere subito disponibili le modifiche dovremo dare il comando source ~/.zshrc
.
Per poter abilitare l'accelerazione hardware su MacOS dobbiamo installare il driver HAXM di Intel; Android Studio sarebbe in grado di installarlo come componente della suite ma dato che abbiamo scelto l'installazione minimale dell'emulatore, dovremo installarlo manualmente seguendo le semplici instruzioni che possiamo trovare qui.
WINDOWS
Scarichiamo Command Line Tools per Windows ed estraiamolo, anche in questo caso, in una cartella del nostro utente e in particolare in $home\AppData\Local\Android\sdk\
. Dato che dovremo utilizzare la riga di comando per gestire sdkmanager
, iniziamo a fare subito un po' di pratica aprendo PowerShell
(o Terminale Windows) e digitiamo
Expand-Archive -LiteralPath $home\Downloads\commandlinetools-win-8092744_latest.zip -DestinationPath $home\AppData\Local\Android\SDK\
Naturalmente dovrete modificare il LiteralPath
se avete scaricato l'archivio in una posizione diversa.
Spostiamo adesso l'intero contenuto della cartella $home\AppData\Local\Android\SDK\cmdline-tools in $home\AppData\Local\Android\SDK\cmdline-tools\latest\ con il comando
Get-ChildItem -Path $home\AppData\Local\Android\SDK\cmdline-tools\ -File -Directory -Exclude latest | Move-Item -Destination $home\AppData\Local\Android\SDK\cmdline-tools\latest
Anche su Windows, meglio modificare qualche variabile di ambiente per lavorare con sdkmanager
in maniera più agevole e anche in questo caso, tali modifiche riguarderanno solo il nostro utente (come si può vedere dal parametro "User"
in fondo ad ogni comando). In Powershell
, per modificare la variabile PATH, digitiamo il comando:
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Users\user\AppData\Local\Android\SDK\cmdline-tools\latest\bin\;C:\Users\user\AppData\Local\Android\SDK\emulator\;C:\Users\user\AppData\Local\Android\SDK\platform-tools\", "User")
Mentre per aggiungere la variabile ANDROID_HOME, il comando sarà il seguente:
[Environment]::SetEnvironmentVariable("ANDROID_HOME", "C:\Users\tasso\AppData\Local\Android\SDK\", "User")
Le nuove variabili di ambiente impostate saranno già attive sul sistema ma non saranno subito disponibili nella sessione corrente di PowerShell. Per poterle utilizzare anche su questa shell, il metodo più semplice è riavviare PowerShell chiudendo la finestra corrente e aprendo di nuovo detto programma.
Per quanto riguarda l'accelerazione hardware, anche per Windows, come per MacOS, è possibile installare il driver HAXM di Intel e anche in questo caso possiamo installarlo manualmente seguendo le semplici instruzioni qui presenti. Se però avete la versione Pro di Windows 10 o 11, la soluzione da preferire su questi sistemi, è quella di utilizzare Hyper-V dato che questo non è compatibile con HAXM ma può essere utilizzato anche per altre macchine virtuali. Trovate una guida completa ad Hyper-V proprio qui sul nostro sito:
Installiamo l'emulatore e creiamo la macchina virtuale con Android!
Utilizzeremo adesso sdkmanager
per installare l'emulatore e i componenti necessari per farlo funzionare correttamente. Per creare la macchina virtuale con Android sarà necessario installare anche la piattaforma per la versione di Android desiderata e un immagine di sistema della stessa versione. Purtroppo le versioni qui indicate seguono la numerazione delle API e non della versione commerciale (per così dire) di Android; per associare la versione delle API alla versione di Android potete consultare la tabella su questo sito. Negli esempi che seguono creeremo una macchina virtuale con Android12
e quindi sceglieremo le API-31
.
Un altra scelta che possiamo fare riguarda il tipo di immagine di sistema: potremo scegliere di emulare una architettura diversa da quella nativa del nostro computer ma per avere le migliori prestazioni sarà meglio scegliere la stessa: dato che ho un computer x86_64
negli esempi seguenti utilizzerò questo tipo di architettura. Un ultima scelta che riguarda l'immagine di sistema sarà quella relativa ai servizi di Google o meno: se vogliamo avere il Play Store e tutti i servizi connessi, dovremo scegliere le immagini di sistema che contengono la stringa google_apis_playstore
.
Per avere un idea di tutti i pacchetti disponibili possiamo dare il comando sdkmanager --list
. Per installare i componenti necessari per creare un macchina virtuale con Android12 con i servizi di Google dovremo installare i seguenti pacchetti: emulator
, platform-tools
, platforms;android-31, system-images;android-31;google_apis_playstore;x86_64
. Possiamo farlo in una volta con il comando comune a tutte le piattaforme:
sdkmanager --install emulator platform-tools "platforms;android-31" "system-images;android-31;google_apis_playstore;x86_64"
Prima che l'installazione cominci, dovremo accettare la licenza di utilizzo di alcuni componenti: premete y
seguito da Invio
per ogni richiesta che vi comparirà e attendete la fine dell'installazione.
Al termine, possiamo controllare che i pacchetti voluti siano effettivamente stati istallati e che l'accelerazione hardware sia stata correttamente configurata con i comandi
sdkmanager --list_installed
emulator -accel-check
A questo punto possiamo passare a creare la macchina virtuale con la versione di Android da noi scelta; in questo caso utilizzeremo un altro programma reso disponibile dall'installazione dei componenti che abbiamo appena fatto: il programma è avdmanager
e dovremo invocarlo con le seguenti opzioni aggiustando i parametri in base alla versione di Android e all'immagine di sistema scelti. Possiamo personalizzare il nome (name
) della nostra macchina virtuale ma consiglio di non inserire spazi nel nome
avdmanager create avd --name Android12 --package 'system-images;android-31;google_apis_playstore;x86_64'
Quando impartiremo questo comando, ci verrà chiesto se vogliamo creare una immagine personalizzata: se scegliamo di si dovremo rispondere ad una serie incredibile di domande per cui consiglio di rispondere di no
(scelta predefinita che possiamo confermare semplicemente con Invio
); casomai andremo a modificare il file di configurazione in seguito aggiustando direttamente solo i parametri che ci interessano.
Per avviare l'emulazione della macchina virtuale Android appena creata, sarà sufficiente un semplice comando, ma probabilmente occorrerà un bel po' di tempo, quindi aspettate pazientemente sapendo che, se non modificate ogni volta la configurazione dell'emulatore, i successivi avvi saranno un po' più veloci perché anziché riavviare il sistema, verrà caricato l'ultimo stato della macchina virtuale:
emulatore -avd Android12
Ottimizziamo l'emulatore!
Dopo aver provato che l'emulatore si avvia correttamente (o anche se non dovesse avviarsi per qualche errore la prima volta) possiamo pensare di modificare alcuni parametri per renderlo più veloce e usabile. Con l'emulatore spento, dovremo quindi andare a editare alcune voci presenti in:
- Linux:
~/.android/avd/Android12.avd/config.ini
- MacOS:
~/.android/avd/Android12.avd/config.ini
- Windows:
$home\.android\avd\Android12.avd\config.ini
Di seguito alcuni parametri che consiglio senz'altro di modificare, i valori suggeriti sono quelli minimi consigliati e se avete una buona quantità di memoria (>= 16GB) potete benissimo raddoppiare sia il valore della cache
che della ram
; mentre in base alla definizione del vostro monitor potrete regolare i valori di altezza (hw.lcd.height
) e larghezza (hw.lcd.weight
) dello schermo virtuale:
disk.cachePartition.size = 500MB
hw.gpu.enabled = yes
hw.lcd.height = 1000
hw.lcd.width = 500
hw.ramSize = 2G
Se non vi interessano i vari sensori che di solito sono in dotazione ai dispositivi Android fisici, potete anche disabilitare tutti gli hw.sensors.
impostandoli su no
e controllare anche accelerometro, gps e giroscopio che trovate rispettivamente alle voci hw.accelerometer
, hw.gps
e hw.gyroscope
.
Per velocizzare l'avvio e la reattività dell'emulatore possiamo passare alcune opzioni al comando "base" visto prima e in particolare:
-no-boot-anim
: per disabilitare l'animazione all'avvio di Android;-qemu -m 1024
: per aumentare la memoria a disposizione dell'emulatore che è basato su QEMU
emulator --help
e in particolare le opzioni che è possibile passare a qemu, con il comando emulator -qemu -h
.