Android Emulator è un componente di Android Studio che esegue una copia virtuale completa di un dispositivo Android sul computer dello sviluppatore. L'emulatore utilizza QEMU per tradurre le istruzioni ARM nell'architettura x86_64 dell'host. Documentazione Google descrive il ciclo completo di configurazione dei dispositivi virtuali AVD e dell'accelerazione hardware.
Punti chiave
Android Emulator è un dispositivo Android virtuale che funziona su QEMU (Quick EMUlator) ed emula la piattaforma hardware Android. A differenza di iOS Simulator, Android Emulator traduce completamente le istruzioni ARM, consentendo al codice compilato per architettura mobile di essere eseguito su un host x86_64.
Google ha rilasciato Android Emulator nel 2007 insieme alla prima versione di Android SDK. Da allora, l'emulatore si è evoluto da una soluzione lenta solo ARM a un sistema ad alte prestazioni con supporto GPU, accelerazione hardware ed emulazione di sensori. Secondo Google (Android Developer Blog, 2025), l'emulatore moderno con HAxM funziona 4-5 volte più velocemente della prima generazione.
L'emulatore supporta tutti i componenti di un dispositivo Android: CPU, GPU, RAM, storage, schermo tattile, accelerometro, giroscopio, GPS, fotocamera, batteria, NFC, Bluetooth e Wi-Fi. Lo sviluppatore può simulare chiamate in arrivo, SMS, vari livelli di segnale di rete e geolocalizzazione tramite Extended Controls.
Android Emulator utilizza immagini di sistema scaricate tramite SDK Manager. Ogni immagine di sistema contiene una copia completa del firmware Android per il livello API selezionato e l'architettura del processore target. Sono disponibili immagini con diverse architetture: x86_64 (raccomandata con HAxM), ARM64 (per test di compatibilità ARM) e Google APIs (con Google Play Services preinstallati). Immagini separate sono disponibili anche per Wear OS, Android TV e Automotive.
// Verifica del tipo di emulatore nel codice
val isEmulator = Build.FINGERPRINT
.contains("generic") ||
Build.PRODUCT.contains("sdk")
if (isEmulator) {
Timber.d("L'app è in esecuzione nell'emulatore")
}AVD (Android Virtual Device) è una configurazione di dispositivo virtuale per l'emulatore. AVD Manager in Android Studio consente di creare dispositivi con qualsiasi combinazione di caratteristiche: modello, dimensione dello schermo, densità di pixel, quantità di RAM, dimensione dello storage e versione Android.
| Parametro AVD | Raccomandazione per sviluppo | Raccomandazione per test |
|---|---|---|
| Architettura | x86_64 (con HAxM) | ARM64 (emulazione pura) |
| RAM | 2048-4096 MB | 1536-2048 MB |
| Storage interno | 8-16 GB | 4-8 GB |
| Livello API | Ultimo stabile | Minimo supportato |
| Google Play Services | Attiva | Secondo necessità |
Creazione AVD viene eseguita tramite Device Manager in Android Studio: seleziona un profilo hardware (Pixel, Nexus, Galaxy e altri), un'immagine di sistema e configura i parametri. Dopo la creazione, il dispositivo appare nell'elenco Run Configurations per l'esecuzione immediata dell'app.
L'emulatore supporta Quick Boot — salva lo stato dell'AVD come snapshot e lo ripristina all'avvio successivo. Il tempo di avvio si riduce da 30-60 secondi a 2-5 secondi. Per resettare a uno stato pulito, usa Cold Boot Now in AVD Manager.
Traduzione ARM è una tecnologia chiave di Android Emulator che converte le istruzioni ARM in x86_64 al volo. Senza traduzione, l'emulatore potrebbe eseguire solo immagini x86_64, limitando i test. Google utilizza libhoudini per la traduzione ARM→x86 e librerie Intel per l'accelerazione HAXM.
# Verifica dello stato HAxM su Windows
sc query "IntelHaxm"
# Installazione di HAxM tramite SDK Manager
sdkmanager "extras;intel;Hardware_Accelerated_Execution_Manager"
# Avvio dell'emulatore con accelerazione hardware
emulator -avd Pixel_9_API_35 -accel on -gpu autoIntel HAxM (Hardware Accelerated Execution Manager) è un driver di virtualizzazione per processori Intel VT-x che accelera l'emulatore di 3-5 volte. Su Windows con processore AMD, utilizza Windows Hyper-V Platform e WHPX. Senza accelerazione hardware, l'emulatore funziona lentamente, con ritardi di animazione fino a 1-2 secondi.
Su macOS con Apple Silicon (serie M), l'accelerazione hardware funziona nativamente tramite Hypervisor.framework. Secondo Google (Android Emulator Release Notes 2025), l'emulatore su M2 Max raggiunge il 95% delle prestazioni di un dispositivo reale per le operazioni di base.
La scelta tra emulatore e dispositivo reale dipende dalla fase di sviluppo. Sull'emulatore è comodo sviluppare e fare debug: avvio rapido, deploy immediato, Extended Controls per la simulazione di sensori. Su un dispositivo reale — test finali di prestazioni, batteria e funzionamento con l'hardware.
| Scenario | Emulatore | Dispositivo reale |
|---|---|---|
| Sviluppo UI | Sì (veloce) | No (deploy lento) |
| Test prestazioni | No (metriche gonfiate) | Sì (misure reali) |
| Emulazione sensori (GPS, NFC) | Sì (Extended Controls) | Limitato |
| Consumo energetico | Non supportato | Sì (Battery Historian) |
| Test rete (2G/3G/4G/5G) | Sì (simulazione velocità) | Sì (con SIM) |
| Automazione CI/CD | Sì (nessun dispositivo fisico) | Difficile (device farm) |
Le prestazioni dell'emulatore con accelerazione hardware sono spesso superiori a quelle di un dispositivo reale economico. Pertanto, esegui i test finali su dispositivi reali con il livello di prestazioni target.
Rilevare l'ambiente di esecuzione in Kotlin è utile per disabilitare codice errato o aggiungere informazioni di debug. Android fornisce Build.FINGERPRINT, Build.PRODUCT e Build.HARDWARE per questo scopo.
object EmulatorDetector {
val isEmulator: Boolean
get() = Build.FINGERPRINT.startsWith("generic")
|| Build.FINGERPRINT.contains("emulator")
|| Build.HARDWARE == "ranchu"
|| Build.HARDWARE == "goldfish"
fun logEnvironment() {
if (isEmulator) {
Log.d("EmulatorDetector", "Ambiente: emulatore")
}
}
}Usare un rilevatore di emulatore aiuta durante il debug: sull'emulatore puoi attivare log avanzati, disabilitare animazioni o sostituire chiamate API reali con mock. Evita la verifica nelle build di produzione a meno che non sia richiesta dalla logica di business dell'app.
Android Emulator viene utilizzato per test automatizzati su server CI. Per eseguire i test, è necessario creare un AVD, avviare l'emulatore e attendere il caricamento completo del sistema. Gradle Managed Devices semplifica questo processo: la configurazione dell'AVD è descritta in build.gradle.kts.
// build.gradle.kts — Gradle Managed Devices
android {
testOptions {
managedDevices {
devices {
register<ManagedVirtualDevice>("pixel9Api35") {
device = "Pixel 9"
apiLevel = 35
systemImageSource = "google"
}
}
}
}
}Per avviare l'emulatore manualmente, usa la riga di comando: emulator -avd Pixel_9_API_35 -no-window -no-audio -gpu swiftshader_indirect. Il flag -no-window disabilita l'interfaccia grafica per ambienti server, e -gpu swiftshader_indirect fornisce rendering software senza GPU host.
Extended Controls in Android Emulator fornisce potenti strumenti per simulare le condizioni di rete: latenza, larghezza di banda e tipo di rete (GPRS, EDGE, 3G, 4G, 5G). Ciò consente di testare il comportamento dell'app in connessione lenta senza spostarsi fisicamente in un'area con copertura scarsa.
Simulazione sensori include accelerometro, giroscopio e magnetometro tramite modelli 3D virtuali di dispositivi. Per il GPS, puoi caricare file GPX con percorsi — l'emulatore simula il movimento lungo le coordinate, fondamentale per testare app di navigazione. La fotocamera viene emulata tramite webcam host o caricamento di immagini.
Multi-display in Android Emulator supporta più schermi per tablet e dispositivi pieghevoli. Extended Controls consente di modificare orientamento, dimensione dello schermo e densità di pixel (DPI) senza riavviare l'emulatore. Per testare i dispositivi pieghevoli, sono disponibili modalità Foldable con commutazione tra stato piegato e aperto.
L'emulatore supporta non solo smartphone ma anche Wear OS e Android TV. Per Wear OS, sono disponibili configurazioni AVD rotonde e rettangolari, simulazione di rotazione della lunetta e gesture di scorrimento, nonché test di interazione con un emulatore telefonico. Per Android TV viene utilizzata un'interfaccia con navigazione D-pad. Entrambe le piattaforme supportano accelerazione hardware e test con Google Play Services, importante per il ciclo di sviluppo di app per smartwatch e TV.
Domande frequenti
Android Emulator utilizza emulazione ARM completa tramite QEMU con traduzione di istruzioni, mentre iOS Simulator compila codice per l'architettura dell'host. Android Emulator supporta GPU, fotocamera, sensori, Bluetooth, NFC — iOS Simulator non supporta la maggior parte di queste funzionalità.
In Kotlin, controlla Build.FINGERPRINT per "generic" o "emulator", e Build.HARDWARE per "ranchu" o "goldfish". Usa Build.PRODUCT come marcatore aggiuntivo — per l'emulatore contiene "sdk_google" o "google_sdk".
Attiva Intel HAxM (Intel VT-x) o Windows Hyper-V Platform (WHPX) per processori AMD. Usa immagini di sistema x86_64 con accelerazione hardware. Alloca almeno 4 GB di RAM all'emulatore in AVD Manager. Attiva Quick Boot per il caricamento tramite snapshot.
Sì, Android Emulator supporta l'emulazione NFC a partire da Android 10 (API 29). Extended Controls → Phone → NFC consente di inviare messaggi NDEF. I modi lettura/scrittura tag, peer-to-peer e HCE sono supportati. Per test completi, usa un dispositivo reale con chip NFC.
Per lo sviluppo quotidiano, scegli x86_64 con Google APIs — massime prestazioni e set completo di servizi. Per test di compatibilità, usa immagini ARM64. Per CI — immagini senza Google Play Services, sono più piccole e si avviano più velocemente.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche