L'emulatore di Android e' decisamente troppo lento su alcune piattaforme e qualche volta per il debugging e' meglio utilizzare direttamente un telefono
Una soluzione per velocizzare lo sviluppo e' quello di non utilizzare l'emulatore contenuto nell'SDK ma impiegare una macchina virtuale Virtualbox
Per fare cio' si deve scaricare una versione di Android compilata per x86 e piu' in particolare una versione ottimizzata per VirtualBox. Una ottima macchina si puo' scaricare da questo link
In seguito si imposta la macchina virtuale come segue
non sono necessarie modifiche alla scheda di rete virtuale
Una volta avviata la macchina virtuale si deve formattare la partizione virtuale in ext3 tramite fdisk
Una volta lanciata la macchina virtuale questa puo' essere interrogata via adb (tutte le funzionalita' sono funzionanti). Per sviluppare si puo' indirizzare Eclipse ad utilizzare la macchina VirtualBox che viene vista come se fosse un telefono
Schermata di Command con comando ADB in esecuzione
Una volta installato Debian ed Ubuntu dentro una macchina virtuale Debian purtroppo la risoluzione massima dello schermo e' bloccata al 1024x768 e con i monitor moderni non e' certo un bel vedere
Debian Testing Lxde 1680x1050
per godere della modalita' Full-Screen si deve procedere come segue
Dato che uso normalmente Linux ho scoperto solo adesso che per programmare Android in Windows e' necessario installare i driver Adb prima di poter interagire con il telefono
Per i telefoni Android i driver sono contenuti all'interno del software Kies che include sia i driver che il software per l'aggiornamento del firmware e la gestione del telefono
Per altri telefoni, come l'Ideos della Huawei, sono disponibili i driver presso il sito del costruttore
Una delle funzioni meno utilizzate (ma anche delle piu' interessanti) e' quella di poter utilizzare delle API per poter enunciare una stringa
Il motore di TTS di default su Android e' Pico e non sempre ci sono tutti i linguaggi installati ..quindi se si vuole che il telefono parli in inglese non ci sono problemi ma se si vuole una lingua un po' piu' esotica va scaricata a parte
Gli esempi su come usare Pico sono gia' inclusi negli esempi dei developer di Android quindi non c'e' molto da fare se non usare il sistema
La voce e' piuttosto metallica e robotica rispetto ad altri motori TTS ma c'e' da dire che i file sono estremamente compatti
un primo metodo per testare TTS e' il seguente ma di fatto non e' utile in casi reali di programmazione
---------------------------------------------------------------
package com.example.tts; import android.os.Bundle; import android.app.Activity; import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; public class MainActivity extends Activity implements OnInitListener{ private TextToSpeech talker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); talker = new TextToSpeech(this, this); say("Luca Innocenti"); } public void say(String text2say){ talker.speak(text2say, TextToSpeech.QUEUE_FLUSH, null); } public void onInit(int status) { //say("Luca Innocenti"); } @Override public void onDestroy() { if (talker != null) { talker.stop(); talker.shutdown(); } super.onDestroy(); } }
---------------------------------------------------------------
Il secondo metodo e' decisamente piu' interattivo
---------------------------------------------------------------
@Override public void onClick(View arg0) { speakOut(); }
}); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public void onInit(int status) { // TODO Auto-generated method stub if (status == TextToSpeech.SUCCESS) { int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e("TTS", "This Language is not supported"); } else { pulsante.setEnabled(true); speakOut(); }
Avevo gia' montato Android su un HTC TyTN II oltre tre anni fa ma all'epoca conoscevo molto poco di Android e quindi non avevo apprezzato la cosa anche perche' con un processore Arm da 400 MHz Android funziona piuttosto male,mettiamoci anche uno schermo nato per il pennino e non per il touch per rendere il tutto ingestibile
Il telefono era, quando usci' nel 2007, un ottimo oggetto rilasciato pero' con Windows Mobile 6 (aggiornabile al 6.1) con GPS, Bluetooth, WiFi, SdCard ed altro con uno schermo da 240x320 da 2.8 pollici. Non so quale fosse il prezzo (a me e' arrivato come rotto e sono riuscito a renderlo funzionante) ma doveva essere comparabile all'IPhone di oggi
Per inserire Android sul telefono si possono seguire le istruzioni riportate a questo link
Una volta lanciato il file haret. compare il boot di Android che sostituisce completamente Windows Mobile
Il tempo di boot e' piuttosto lento (oltre 2 minuti) ed al termine si entra in Android 2.1
Interrogato via Adb il sistema operativo funziona completamente (si entra in shell e si puo' fare il pull dei file) , si denota solo molto ritardo sensibile sull'interfaccia touch tale da renderlo sostanzialmente inservibile. La rete Wireless ed il GPS funzionano
Purtroppo non e' disponibile la funzione di screenshot mediante DDMS per cui sono dovute ricorrere ad una fotocamera