Bookmark and Share
Document Actions

L'emulatore di Android

by Alice Narduzzo last modified 2008-03-19 17:08

Image of the Android Emulator
L'Android SDK include un emulatore di un dispositivo mobile — un dispositivo virtuale che gira sul tuo computer. Ti permette di prototipare, sviluppare, e testare applicazioni Android senza usare un vero dispositivo.

L'emulatore Android simula tutte le tipiche funzioni e i comportamenti di un dispositivo mobile, tranne il fatto che non può effettuare o ricevere normali chiamate. Come mostrato dall'immagine sulla destra,  l'emulatore è fornito di vari pulsanti sistemi di interazione, che puoi premere utilizzando il mouse o la tastiera per generare eventi all'interno della tua applicazione. Fornisce anche uno schermo nel quale vengono visualizzate la tua applicazione e qualsiasi altra in esecuzione.

Per aiutarti a disegnare e testare la tua applicazione, l'emulatore permette alla stessa di usare i servizi della piattaforma Android per invocare altre applicazioni, accedere alla rete, eseguire audio e video, immagazzinare e recuperare dati, avvisare l'utente e interpretare transizioni grafiche e temi.

L'emulatore include anche una vasta gamma di funzioni per il debugging, come una console da cui puoi autenticare output del kernel, simulare interruzioni dell'applicazione (come l'arrivo di un SMS o di una chiamata), e simulare effetti di latenza e dropouts sul canale dei dati.

Le sezioni seguenti forniscono ulteriori informazioni sull'emulatore e su come usarlo durante lo sviluppo della tua applicazione.

Contenuti

Avviare e fermare l'emulatore

Controllare l'emulatore

Opzioni di avviamento dell'emulatore

Usare la console dell'emulatore

Port Redirection

Condizioni della rete

Emulazione del ritardo di rete (Network Delay)

Emulazione della velocità di rete (Network Speed)

Emulazione della telefonia

Emulazione di SMS

Usare le skins dell'emulatore

Eseguire istanze multiple

Installare applicazioni sull'emulatore

Emulazione della SD Card

Creare una immagine del disco

Copiare files in una immagine del disco

Caricare l'immagine del disco all'avvio dell'emulatore

Risoluzione dei problemi dell'emulatore

Limitazioni

Avviare e fermare l'emulatore

Per avviare l'emulatore, apri la finestra terminale, spostati nella cartella tools/ del SDK e inserisci emulator o ./emulator. Ciò inizializza il sistema Android e vedrai apparire la finestra con l'emulatore sul tuo schermo.

Per fermare l'emulatore, chiudi la finestra.

Controllare l'emulatore

Puoi usare le opzioni di avviamento e i comandi della console per controllare i comportamenti e le caratteristiche dell'ambiente dell'emulatore. Una volta che l'emulatore è in esecuzione, puoi controllarlo usando il cursore del mouse o la tastiera per premere i pulsanti simulati sull'interfaccia.

La seguente tabella riassume le mappature tra i pulsanti dell'emulatore e i tasti della tua tastiera.

Emulator Key Keyboard Key
Back ESC
Menù F1 o PgUp
Star F2 or PgDn
Chiama F3
Termina chiamata F4
---- F5, F6 non assegnato
Power F7
Disattiva/attiva la rete F8
Avvia il tracing F9 (solo con -trace flag)
Termina il tracing F10 (solo con -trace flag)
Home HOME
DPad sinistra/sopra/destra/sotto Keypad 4/8/6/2
DPad tasto centrale Keypad 5
Ruotare skin Keypad 7/9
Volume up/down Keypad +/-
Onion alpha aumenta/diminuisci Keypad * / /
Toggle Unicode/raw key mode Ctrl-K

Opzioni di avviamento dell'emulatore

L'emulatore supporta una gamma di opzioni che puoi specificare quando lanci l'emulatore, per controllare la sua apparenza o il suo comportamento. Questi sono i comandi da usare sul terminale per lanciare l'emulatore con le varie opzioni:

emulator [-option [value]] ... [-qemu args]

La tabella seguente riassume le opzioni disponibili:

Categoria Opzioni Descrizioni Commenti
Help -help Stampa una lista di tutti i comandi dell'emulatore.  
Data -data <file> Usa <file> come immagine del disco dei dati utente (user data). Se -data non viene usato,l'emulatore cerca un file chiamato "userdata.img" in ~/.android (su Linux/Mac) o C:\Documents e Settings\<user>\Local Settings\Application Data\Android (su Windows).

Se usi -data <file> ma <file> non esiste, l'emulatore crea un file in quella posizione.

Consulta Eseguire istanze multiple per inforamzioni su come usare -data per permettere a istanze multiple di preservare i loro dati utente attraverso le varie sessioni.

-ramdisk <file> Usa <file> come immagine ramdisk. Il valore di default è <system>/ramdisk.img
-sdcard <file> Usa <file> come immagine della SD card. Il valore di default è <system>/sdcard.img
-wipe-data Elimina tutti i dati sulla immagine del disco dei dati utente (vedi -data) prima dell'avvio.  
Debug -console Attiva la console shell sul terminale corrente.  
-debug-kernel Invia output del kernel alla console.  
-logcat <logtags> Attiva logcat output con tags dati. Se la variabile dell'ambiente ANDROID_LOG_TAGS è definita e non vuota, verrà usato il suo valore per attivare logcat output di default.
-trace <name> Attiva code profiling (premi F9 per iniziare), scritto per un file specificato.  
-verbose Attiva verbose output.  
-verbose-keys Attiva messaggi verbose key-press.  
-verbose-proxy Attiva messaggi verbose proxy debug.  
Media -mic <device or file> Usa dispositivo o WAV file per input audio.  
-noaudio Disattiva il supporto audio di Android.  
-radio <device> Reindirizza l'interfaccia radio modem a un dispositivo host character.  
-useaudio Attiva il supporto audio di Android. Attivato di default.
Rete -netdelay <delay> Imposta emulazione latente di rete in <delay>. Il valore di default è none. Vedi la tabella in Emulazione del ritardo di rete per i valori <delay> supportati.
-netfast Scorciatoia per -netspeed full -netdelay none  
-netspeed <speed> Imposta l'emulazione per la velocità di rete in <speed>. Il valore di default è full. Consulta la tabella in Emulazione della velocità di rete per i valori <speed> supportati.
-http-proxy <proxy> Rende tutte le connessioni TCP attraverso uno specifico HTTP/HTTPS proxy Il valore di <proxy> può essere uno dei seguenti:
http://<server>:<port>
http://<username>:<password>@<server>:<port>

Il prefisso http:// può essere omesso. Se il comando -http-proxy <proxy> non viene fornito, l'emulatore cerca  la variabile http_proxy e usa automaticamente qualunque variabile che corrisponda al formato <proxy> descritto sopra.

Sistema -image <file> Usa <file> come immagine del sistema. Di default è <system>/system.img
-kernel <file> Usa <file> come kernel dell'emulatore.  
-nojni Disattiva JNI checks nel runtime di Dalvik.  
-qemu Passa argomenti a qemu.  
-qemu -h Mostra qemu help.  
-system <dir> Sistema di ricerca, ramdisk e immagini di dati utente in <dir>.  
UI -flashkeys Flash key presses sul device skin.  
-raw-keys Disattiva Unicode keyboard reverse-mapping.  
-noskin Non usa alcuna skin dell'emulatore.  
-onion <image> Usa immagine overlay sullo schermo. Nessun supporto per JPEG. Solo PNG è supportato.
-onion-alpha <percent> Specifica il valore della transulcenza onion skin (come percentuale). Di default è 50.
-skin <skinID> Avvia l'emulator con la skin specificata. Il SDK include una scelta tra quattro skins:
  • HVGA-L (480x320, landscape)
  • HVGA-P (320x480, portrait) (default)
  • QVGA-L (320x240, landscape)
  • QVGA-P (240x320, portrait)
  • -skindir <dir> Ricerca una skin per l'emulatore in <dir>.

    Usare la console dell'emulatore

    Ogni istanza dell'emulatore in esecuzione include una console che ti permette di interrogare e controllare dinamicamente l'ambiente di simulazione del dispositivo. Per esempio, puoi usare la console per gestire port redirections e caratteristiche della rete e simulare eventi di telefonia. Per accedere alla console e inserire comandi, usa telnet per connetterti al port number (numero di porta) della console.

    Per connettersi alla console di qualsiasi istanza in esecuzione dell'emulatore, in qualsiasi momento, usa questo comando:

    telnet localhost <console-port>

    Un'istanza dell'emulatore occupa un paio di porte adiacenti: una porta di console e una porta di debug. I numeri delle porte differiscono a partire da 1, la porta di debug ha il numero di porta più elevato. La console dell'istanza in esecuzione su una data macchina usa la porta 5554 e la porta di debug è la 5555. Le istanze successive usano numeri di porta aumentati di 2 — per esempio, 5556/5557, 5558/5559, e così via. Possono eseguire una console fino a 16 istanze simultanee.

    Per connettersi alla console dell'emulatore, devi specificare una porta di console valido. Se sono in esecuzione istanze multiple, devi determinare la porta di console dell'istanza a cui vuoi connetterti. Per trovare una porta di console di un'istanza dell'emulatore, puoi avviarla con l'opzione -verbose e cercare nell'output di debug la linea che inizia con "emulator console running on port number". In alternativa, puoi usare il comando adb adb devices, per consultare una lista di istanze dell'emulatore e le porte di debug che stanno usando. Questo è un esempio di un output:

    $ adb devices
    List of devices attached
    1  emulator-tcp-5555  device 0
    2  emulator-tcp-5557  device 0
    3  emulator-tcp-5559  device 0

    Le porte di console per ogni istanza è sempre meno 1 rispetto alla porta di debug elencato. Per esempio, nel caso dell'istanza elencata sopra come 2  emulator-tcp-5557  device  0, la porta di console sarebbe 5556.

    Attenzione: L'emulatore presta attenzione alla connessione sulle porte 5554-5587, da qualsiasi computer. In una distribuzione futura, l'emulatore accetterà connessioni solo da localhost, ma fino ad allora dovresti usare un firewall per bloccare connessioni esterne alla tua macchina su quelle porte.

    Una volta connesso alla console, puoi ora inserire help [command] per vedere una lista di comandi della console e imparare comandi specifici.

    Per uscire dalla sessione della console, usa quit o exit.

    Le sezioni seguenti descrivono le maggiori funzioni della console.

    Port Redirection

    Puoi usare la console per aggiungere e rimuovere port redirections mentre l'emulatore è in esecuzione. Dopo esserti connesso alla console, puoi gestire port redirections in questo modo:

    redir <list|add|del>

    Il comando redir supporta i sottocomandi elencati nella seguente tabella:

    Sottocomando Descrizione Commenti
    list Elenca le port redirections correnti.  
    add <protocol>:<host-port>:<guest-port> Aggiunge una nuova port redirection.
  • <protocol> deve essere o "tcp" o "udp"
  • <host-port> è il port number da aprire sull'host
  • <guest-port> è il port number verso cui convogliare i dati sull'emulatore/dispositivo
  • del <protocol>:<host-port> Elimina una port redirection. Vedi sopra per i significati di <protocol> e <host-port>.

    Condizioni della rete

    Puoi usare la console per controllare le condizioni della rete e le caratteristiche del ritardo corrente e della velocità. Per far ciò connetti la console e usa il comando netstatus. Questo è un esempio del comando e del suo output:

    network status

    Emulazione del ritardo di rete (Network Delay)

    L'emulatore ti permette di simulare vari livelli di latenza della rete, in modo da poter testare la tua applicazione in un ambiente più tipico e reale rispetto alle attuali condizioni in cui verrà eseguito. Puoi impostare un livello o un range di latenza all'avvio dell'emulatore oppure puoi usare la console per cambiare la latenza dinamicamente, mentre l'applicazione è in esecuzione sull'emulatore.

    Per impostare la latenza all'avvio dell'emulatore, usa l'opzione -netdelay con un valore <delay> supportato, come elencato nella tabella sottostante. Questi sono alcuni esempi:

    emulator -netdelay gprs
    emulator -netdelay 40 100

    Per effetture cambiamenti dinamici al network delay mentre l'emulatore è in esecuzione, connettiti alla console e usa il comando netdelay con un valore <delay> supportato come mostra la tabella seguente:

    network delay gprs

    Il formato della rete è uno dei seguenti ( i numeri sono millisecondi):

    Valore

    Descrizione

    Commenti
    gprs GPRS (min 150, max 550)
    edge EDGE/EGPRS (min 80, max 400)
    umts UMTS/3G (min 35, max 200)
    none Nessuna latenza (min 0, max 0)
    <num> Emula una latenza precisa (in millisecondi).  
    <min>:<max> Emula uno specifico range di latenza (min, max millisecondi).  

    Emulazione della velocità di rete (Network Speed)

    L'emulatore ti permette anche di simulare vari tassi di trasferimento (transfer rates) della rete. Puoi impostare un tasso o un range di trasferimento all'avvio dell'emulatore oppure puoi usare la console per cambiare il tasso dinamicamente, mentre l'applicazione è in esecuzione sull'emulatore.

    Per impostare la velocità di rete all'avvio dell'emulatore, usa l'opzione -netspeed con un valore <speed> supportato, come elenco nella tabella sottostante. Questi sono alcuni esempi:

    emulator -netspeed gsm
    emulator -netspeed 14.4 80

    Per effettuare cambiamenti dinamici della velocità di rete mentre l'emulatore è in esecuzione, connetti la console e usa il comando -netspeed con un valore <speed> supportato come mostra la tabella seguente:

    network speed 14.4 80

    Il formato di <speed> di rete è uno dei seguenti (i numeri sono kilobits/sec):

    Valore Descrizione Commenti
    gsm GSM/CSD (Up: 14.4, down: 14.4)
    hscsd HSCSD (Up: 14.4, down: 43.2)
    gprs GPRS (Up: 40.0, down: 80.0)
    edge EDGE/EGPRS (Up: 118.4, down: 236.8)
    umts UMTS/3G (Up: 128.0, down: 1920.0)
    hsdpa HSDPA (Up: 348.0, down: 14400.0)
    full nessun limite (Up: 0.0, down: 0.0)
    <num> Configura un tasso esatto usato sia per l'upload che per il download.  
    <up>:<down> Configura tassi esatti per l'upload e il download separatamente.  

    Emulazione della telefonia

    L'emulatore di Android include il suo proprio modem GSM simulato che ti permette di simulare funzioni di telefonia. Per esempio, puoi simulare chiamate in arrivo e stabilire/terminare connessioni di dati. Il sistema di Android gestisce chiamate simulate esattamente come succederebbe nella realtà. L'emulatore non supporta l'audio delle chiamate in questa distribuzione.

    Puoi usare la console per accedere alle funzioni di telefonia dell'emulatore. Dopo esserti connesso alla console, puoi usare

    gsm <call|cancel|data|voice|status>

    per invocare funzioni di telefonia.

    Il comando gsm supporta i sottocomandi elencati nella tabella seguente:

    Sottocomando Descrizione Commenti
    call <phonenumber> Simula una chiamata in arrivo da <phonenumber>.  
    cancel <phonenumber> Cancella una chiamata in arrivo da <phonenumber>.  
    voice <state> Cambia lo stato di una connessione di voce GPRS in <state>. I valori <state> supportati sono:
  • unregistered -- Nessuna rete disponibile
  • home -- Sulla rete locale, non-roaming
  • roaming -- sulla rete roaming
  • searching -- Ricerca della rete
  • denied -- Solo chiamate di emergenza
  • off -- Uguale a 'unregistered'
  • on -- Uguale a 'home'
  • data <state> Cambia lo stato di una connessione di dati GPRS in <state>. I valori <state> supportati sono:
  • unregistered -- Nessuna rete disponibile
  • home -- Sulla rete locale, non-roaming
  • roaming -- sulla rete roaming
  • searching -- Ricerca della rete
  • denied -- Solo chiamate di emergenza
  • off -- Uguale a 'unregistered'
  • on -- Uguale a 'home'
  • status Riporta lo stato corrente di voce/dati. I valori sono quelli descritti per i comandi voice e data.

    Emulazione di SMS

    La console dell'emulatore Android ti permette di generare un messaggio SMS e dirigerlo ad un'istanza dell'emulatore. Una volta connesso ad un'istanza, puoi generare un SMS in arrivo simulato usando questo comando:

    sms send <senderPhoneNumber> <textmessage>

    in cui <senderPhoneNumber> contiene uno string numerico arbitrario.

    La console inoltra il messaggio SMS al framework di Android, che lo passa attraverso un'applicazione che gestisce il tipo di messaggio.

    Usare le skins dell'emulatore

    Puoi eseguire l'emulatore con una delle quattro skins di default a tua scelta, come descritto dalla tabella sottostante. Per specificare una skin, usa -skin <skinID> quando avvii l'emulatore.

    Per esempio:

    emulator -skin HVGA-L

    Nota che devi inserire <skinID> in lettere maiuscole (se il tuo computer è case-sensitive).

    skinID Descrizione Skin
    HVGA-L 480x320, landscape
    HVGA-P 320x480, portrait (default)
    QVGA-L 320x240, landscape
    QVGA-P 240x320, portrait

    Eseguire istanze multiple

    Puoi eseguire istanze multiple dell'emulatore simultaneamente, se necessario. Ogni istanza usa una memoria user-data separata e una porta di console differente. Ciò ti permette di gestire ogni istanza separatamente.

    Tuttavia, se eseguirai istanze multiple, presta attenzione al fatto che ci sono delle limitazioni riguardo alla capacità di ogni istanza per mantenere i suoi dati utente (user data) persistenti -- impostazioni utente e applicazioni installate -- attraverso le varie sessioni. Nello specifico:

    • Di default, solo la prima instanza ad essere lanciata può mantenere dati utente attravero sessioni diverse. Quando una sessione viene chiusa, l'emulatore immagazzina i dati utente in un file -- di default, nel file ~/.android/userdata.img (su Linux e Mac) o C:\Documents and Settings\<user>\Local Settings\Application Data\Android\userdata.img (su Windows) sul tuo computer.
    • Le istanze dell'emulatore che avvi dopo la prima (che gireranno simultaneamente) immagazzinano i dati utente durante una sessione, ma non li preservano per l sessione successiva, almeno che tu non abbia specificato un file in cui vuoi che i dati vengano immagazzinati.

    Per eseguire istanze multiple e permettere ad ognuna di mantenere i dati utente attraverso le varie sessioni, avvia le istanze con l'opzione -data (vedi Opzioni di avviamento dell'emulatore) e fornisci il percorso di un file per i dati utente.

    Installare applicazioni sull'emulatore

    Per installare applicazioni sull'emulatore, usa l'utility adb.

    Nota che l'emulatore preserva le impostazioni utente e le applicazioni installate attravero vari avviamenti. Di default, l'emulatore salva i dati utente (user data) in un file sul tuo computer. Su Linux e Mac, l'emulatore immagazzina i dati in ~/.android/userdata.img. Su Windows, l'emulatore immagazzina i dati in C:\Documents and Settings\<user>\Local Settings\Application Data\Android\userdata.img.. L'emulatore usa i contenuti del file userdata.img file come la cartella data/.

    Emulazione della SD Card

    Puoi creare una immagine del disco (disk image) e poi caricarla sull'emulatore al suo avvio, per simulare la presenza di una SD card dell'utente nel dispositivo. Le sezioni seguenti descrivono come creare l'immagine del disco, come copiare files in essa e come caricarla sull'emulatore al suo avvio.

    Presta attenzione al fatto che puoi caricare una immagine del disco solo all'avvio dell'emulatore. Similmente, non puoi rimuovere una SD card simulata da un emulatore in esecuzione. Tuttavia, puoi sfogliare, inviare files e copiare/rimuovere files da una SD card simulata sia con adb che con l'emulatore.

    L'emulatore supporta SDHC cards simulate, quindi puoi creare un'immagine SD card di qualunque dimensione fino a 128 gigabytes.

    Creare una immagine del disco

    Puoi usare lo strumento mksdcard, incluso nel SDK, per creare una disk image FAT32 da caricare nell'emulatore al suo avvio. Puoi accedere a mksdcard nella directory tools/ del SDK e creare una disk image in questo modo:

    mksdcard <size> <file>

    Per ulteriori informazioni, consulta Altri strumenti.

    Copiare files in una immagine del disco

    Una volta creata l'immagine del disco, puoi copiare files in essa prima di caricarla sull'emulatore. Per copiare files, puoi montare l'immagine come un dispositivo di loop (loop devide) e poi copiare i files in esso, oppure puoi usare il mtools utility mcopy per copiare i files direttamente nell'immagine. Il pacchetto mtools è disponibile per Linux, Mac, e Windows.

    Caricare l'immagine del disco all'avvio dell'emulatore

    Per caricare una immagine del disco FAT32 nell'emulatore, avvialo con la flag -sdcard e specifica il nome e il percoso dell'immagine (relativa alla directory corrente):

    emulator -sdcard <filepath>

    Risoluzione dei problemi dell'emulatore

    L'utility adb considera l'emulatore come un vero dispositivo: Per questo motivo, potresti avere bisogno di usare la -d flag con alcuni comandi adb comuni, come install.  La -d flag ti permette di specificare quale dei vari dispositivi connessi usare come obiettivo di un comando. Se non specifichi -d, l'emulatore si riferirà al primo dispositivo nella sua lista. Per ulteriori informazioni su adb, consulta Android Debug Bridge.

    Per emulatori che girano su Mac OS X, se riscontri un errore "Warning: No DNS servers found" quando avvi l'emulatore, assicurati che tu abbia un file /etc/resolv.conf. In caso contrario, esegui il seguente comando nella finestra terminale:

    ln -s /private/var/run/resolv.conf /etc/resolv.conf

    Consulta Frequently Asked Questions per ulteriori informazioni sul troubleshooting.

    Limitazioni

    In questa distribuzione, le limitazioni dell'emultore includono:

    • Nessun supporto per effettuare o ricevere vere chiamate. Puoi però simulare una chiamata in arrivo e in uscita attraverso la console.
    • Nessun supporto per la connessione USB.
    • Nessun supporto per fotocamera o video.
    • Nessun supporto per input audio (registrazione). La  riproduzione (output) è supportata.
    • Nessun supporto per auricolari.
    • Nessun supporto per determinare lo stato di connessione.
    • Nessun supporto per determinare il livello di batteria e lo stato di AC charging.
    • Nessun supporto per determinare l'inserimento/espulsione della SD card.
    • Nessun supporto per Bluetooth.