3 de abril de 2011

Crear una libreria para una aplicacion Java ME

En mi ignorancia en aplicaciones mobiles ( y en java ), pensaba que el procedimiento para crear y agregar una libreria propia a un proyecto nuevo, era el mismo para la version de Java SE y ME. Pero estaba equivocado. 

Generalmente, cuando se quiere crear una libreria, solo se toma un proyecto, se construye (build), esto nos genera un archivo con extension ".jar" que es el que contiene las clases listas para ser agregardas a otro proyecto a manera de libreria. Entonces lo que hariamos en nuestro proyecto de Java SE seria agregar la libreria. Si estamos en Netbeans, bastaria con dar clic derecho en la carpeta de librerias de nuestro proyecto y seleccionar "add library". Y con esto podriamos hacer uso de nuestra libreria. 

Quise hacer este procedimiento para una aplicacion mobile que actualmente desarrollo (PipaApp). El compilador me decia que todo estaba correcto,  pero al momento de correr la aplicacion en el emulador obtenia este error:


java.lang.NoClassDefFoundError: com/blogspot/pplouis/saludo/Saludo
        at hello.PipaApp.getFormPrincipal(+2)
        at hello.PipaApp.startMIDlet(PipaApp.java:50)
        at hello.PipaApp.startApp(PipaApp.java:183)
        at javax.microedition.midlet.MIDletProxy.startApp(MIDletProxy.java:43)
        at com.sun.midp.midlet.Scheduler.schedule(Scheduler.java:374)
        at com.sun.midp.main.Main.runLocalClass(Main.java:466)
        at com.sun.midp.main.Main.main(Main.java:120)



Y es que no se puede agregar un archivo .jar creado con Java SE a un proyecto Java ME ( sin antes hacer unos cambios en un archivo de configuracion ), aunque se trate de solo una clase, que no haga ningun import y que solo imprima un hola mundo.  Un archivo .jar asi deberia de funcionar en ambar versiones de Java, pero no lo hace porque en el archivo META-INF, que se encuentra dentro del .jar, dice lo siguente:


Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.1
Created-By: 1.6.0_14-b08 (Sun Microsystems Inc.)
X-COMMENT: Main-Class will be added automatically by build


mientras que un archivo .jar creado para una app mobile de Java Me, tiene lo siguiente:


Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.1
Created-By: 1.6.0_14-b08 (Sun Microsystems Inc.)
MIDlet-Vendor: Vendor
MIDlet-Name: SaludoLibreriaMobile
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.1


y se observa que hay especificaciones acerca de la configuracion y el perfil de la libreria.

 Para crear una libreria para Java Me es necesario que sea especificamente para un proyecto Java Me. Para esto haremos lo siguiente:

Primero creamos nuevo proyecto de tipo Java Me, dentro de las categorias que nos muestra ponemos que sea un "Mobile Class Library"


Despues se escoje la configuracion que y perfil que le queremos dar a nuestra libreria. Esto es importante, ya que esta libreria tendra mejor compatibilidad con las aplicaciones que tengan la misma configuración.


Ya creado el proyecto, solo necesitamos escribir nuestro codigo:




darle en netbeans "clean" o "clean and build".




 Esto nos genera el archivo distribuible, que para este caso sera un .jar, el cual es nuestra libreria, y que se encuentra en la carpeta dist de nuestro proyecto. 


La carpeta lib viene vacia, y el archivo Demos.jad, es basicamente un archivo de informacion, que generalmente se ocupa cuando se va a descar la aplicaciocion de algun sitio y sirve para dar informacion acerca de la version, tamaño del archivo, configuracion , etc.

Y ya por ultimo solo basta agregarla a nuestro proyecto Java Me. Para eso damos clic derecho en la carpeta de "Resources", despues en "add jar/zip" y agregarmos el archivo .jar generado previamente.