jueves, 22 de abril de 2010

Kindle SDK

De todas las plataformas a las cuales me dedique a desarrollar aplicaciones, creo que Kindle es una de las que mas trabajo me costo. Con solo poner Kindle SDK en google, veremos los pocos resultados utiles que obtenemos.


Hasta el día de hoy (3 meses después de anunciada la beta del SDK) no conozco un foro dedicado al tema... solo un par de threads sueltos en www.mobileread.com


Vamos a la parte tecnica:


La maquina virtual de java corre la versión 1.4, y para desarrollar aplicaciones utilizaremos la API Java Personal Basis Profile (PBP) JSR-000217. El mismo puede ser descargado de aqui.



Ciclos de vida del kindlet:


Loading: Se llama al constructor de la clase (La cual debe heredar de AbstractKindlet) y posteriormente al método create(final KindletContext context).


Ready to run: Una vez que finaliza el método create, y también cada vez que la aplicación pasa a segundo plano, el kindlet entra en este estado. Cuando la aplicacion vuelve a ser visible, se llama al método start(). Si la aplicación va finalizar su ejecución, se llama al método destroy().


Running: La aplicación esta en primer plano. Al único estado que puede pasar es a Ready to run (Aun cuando se quiere finalizar la ejecución), antes de pasar a este estado, se llama al método stop().




Implementando los cuatro métodos anteriormente señalados, podemos comenzar a desarrollar nuestra 
aplicación
. El sdk de Kindle (Tambien conocido como KDK) implementa muchos componentes (basados en AWT) para desarrollar la interfaz, por lo cual no debería suponer mucho tiempo de investigación tener una GUI funcionando. A modo de recomendación, el Kindle simulator es muy útil, sobretodo a la hora de debuggear, pero tiene muchas diferencias en cuanto a velocidad y/o capacidad de renderizado de pantalla. Por ende va a ser necesario ir ejecutando cada tanto la aplicación en el dispositivo, para saber si todo marcha como nosotros esperamos.

viernes, 18 de septiembre de 2009

Brew: Manejo de Eventos vs Loop

Comenzando a desarrollar en brew, me encontre con el siguiente problema: Todo se maneja por eventos. Al contrario de J2ME, donde generabamos la tipica estructura de loop infinito con un sleep en el medio, la unica opcion en brew es setear un timer.

Si el SO del telefono detecta (o mejor dicho sospecha) que la aplicacion deja de responder, para la ejecucion y fuerza un reinicio. Debido a esto es imposible utilizar while (true) o algo por el estilo...

Para setear un timer, utilizamos la funcion:

int ISHELL_SetTimer
(
IShell * pIShell,
int32 dwMSecs,
PFNNOTIFY pfn,
void * pUser
);


Los parametros serian: un puntero a la interface iShell, cantidad de milisegundos del timer, un puntero a la funcion callback que sera llamada por el timer, y por ultimo un void pointer que sera pasado como parametro cuando se llame al callback.

Los valores de retorno son AEE_SUCCESS, AEE_EBADPARM, AEE_ENOMEMORY.

La funcion que definamos como callback, debe tener, obviamente, como unico parametro un void * y no retornar ningun valor.

Una cosa mas a tener en cuenta, es que la llamada al callback es por unica vez, asi que si necesitamos que se ejecute constantemente, debemos re setear el timer adentro del mismo callback.


La mayoria de los telefonos despues de permanecer cierto tiempo sin que se presione alguna tecla, entran en un estado de IDLE o SLEEP. Si necesitamos evitar esto necesitamos handlear el evento de la siguiente manera:



case EVT_APP_NO_SLEEP:
//Don't want to sleep
return TRUE;

lunes, 14 de septiembre de 2009

Como configurar el SDK de Android en MAC OS X



Descargamos el Eclipse y el sdk de Android. Descomprimimos ambos programas en la carpeta que consideremos oportuna. Abrimos una ventana de terminal y ejecutamos el siguiente comando:

>pico .bash_profile


Esto nos abre el archivo .bash_profile un editor de texto (Creandolo en caso de ser necesario). Ahi dentro ingresamos el siguiente comando:

export PATH=${PATH}:"Android SDK path"/tools


Reemplazando obviamente el path del SDK. si bien este paso no es necesario, nos vas a ser de gran utilidad para ejecutar el debugger posteriormente.

Ejecutamos Eclipse, y realizamos lo siguiente:



1) Vamos a Help>Software Updates
2) En el tab Available Software cliqueamos en Add site
3) En el cuadro de dialogo tipeamos https://dl-ssl.google.com/android/eclipse/
4) Pulsamos OK, y tildamos en la lista Developer Tools
5) Pulsamos install y posteriormente
6) Volvemos a ingresar a Help>Software Updates
7) Instalamos Android DDMS
8) Reiniciamos Eclipse
9) En Preferencias Navegamos hasta la seccion Android y seleccionamos el path del SDK
10) Aplicamos la configuracion



Los pasos estan redactados para la version 3.4.0 (GANYMEDE) . En la 3.5.0 (GALILEO) el menu Help>Software Updates cambio por Help > Install New Software

Para chequear que todo este bien instalado, probamos con uno de los proyectos incluidos en la carpeta Samples del SDK.
Una vez compilado el programa, para ejecutarlo, necesitamos crear un Android Virtual Device (AVD).

Para ello vamos a Window > Android AVD Manager. Ahi veremos la lista de devices vacia. Creamos el device seleccionando el Target y el Skin que queramos. Con esto ya podemos hacer clic en el boton de play del eclipse y seleccionar el AVD que hayamos creado.