giovedì 13 dicembre 2012

Debugging Android in VirtualBox

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

Screenshot effettuato con DDMS

Screenshot effettuato con DDMS

martedì 11 dicembre 2012

Luna e Venere - Reale e Virtuale



Debian ed Ubuntu Full Screen in VirtualBox

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

Ubuntu 
sudo apt-get install virtualbox-guest-dkms

e poi riavviare la macchina virtuale

Debian
ovviamente con Debian e' piu' complicato
apt-get install build-essential module-assistant
m-a prepare

in seguito si monta il cd delle Guest Addition e si lancia VBoxLinuxAdditions.run
si riavvia ed il gioco e' fatto

con Gnome3 della Debian Testing la macchina virtuale funziona piuttosto male...non ci sono problemi per gli altri DE

venerdì 7 dicembre 2012

Driver ADB su Windows


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

giovedì 6 dicembre 2012

Text to Speech (TTS) con Pico

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
---------------------------------------------------------------

package com.example.tts2;

import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
import android.speech.tts.TextToSpeech;
//import android.speech.tts.TextToSpeech.OnInitListener;
import android.util.Log;
import android.view.Menu;
import android.widget.Button;
import android.widget.EditText;
import android.view.View;

public class MainActivity extends Activity implements TextToSpeech.OnInitListener {

private Button pulsante;
private EditText txtv;
private TextToSpeech tts;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

pulsante = (Button) findViewById(R.id.button1);
txtv = (EditText) findViewById(R.id.editText1);

tts = new TextToSpeech(this, this);

pulsante.setOnClickListener(new View.OnClickListener(){

            @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();
            }

        } else {
            Log.e("TTS", "Initilization Failed!");
        }

}

private void speakOut() {
// TODO Auto-generated method stub
String text = txtv.getText().toString();
 
        tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);

}

}
--------------------------------------------------------

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginBottom="66dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/editText1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="46dp"
        android:text="Button" />

</RelativeLayout>

Android su HTC TyTN II

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

mercoledì 5 dicembre 2012

Installazione NDK per Android



L'nstallazione dell' NDK per Android e' quanto mai semplice e' molto piu' lineare rispetto a quella del corrispettivo SDK.

E' sufficiente scarica il file zip della piattaforma per cui e' richiesto lo sviluppo dal sito android ndk e successivamente decomprimerlo in una directory a piacere. Si aggiorna quindi la Path con il comando

export PATH=${PATH}:/home/luca/android_ndk

ed il gioco e' fatto

Marida Marine Debris Archive

Sto provando ad utilizzare Marida, un archivio di immagini supervisionate di Sentinel 2, raccolte in area non mediterranea con 15 categorie ...