Iniciando o desenvolvimento de aplicações J2ME – Parte 01

 

A cada ano que passa, as aplicações wirelles vão ganhando força e mercado. As pessoas precisam se comunicar onde quer que estejam, seja por necessidade de fazer negócios, por prazer ou por necessidade social.


Através do celular a comunicação com mobilidade é atingida. Talvez isto seja a causa do sucesso mundial da telefonia móvel e também do crescimento de aplicações que permitem, por exemplo, as pessoas a controlar seus negócios em qualquer hora e em qualquer lugar.

 

Com este artigo, você terá um conhecimento básico para desenvolver uma aplicação para celular. O objetivo deste não é desenvolver uma aplicação complexa e nem ensinar a utilizar as ferramentas aqui indicadas, e sim, iniciar o desenvolvimento de uma simples aplicação para que você possa se familiarizar com este tipo de desenvolvimento.

Inicialmente, serão apresentados alguns conceitos e as ferramentas de desenvolvimento que serão utilizadas. Logo após, será apresentado como instalar as ferramentas e desenvolver a aplicação.

 

Alguns conceitos

 

J2ME (Java 2 Micro Edition) – Consiste de uma plataforma JAVA para desenvolvimento de aplicações para sistemas embarcados. Na verdade, como o próprio nome indica, é uma micro edição da plataforma JAVA.

 

O J2ME tem como alvo dois grupos distintos de produtos:

- dispositivos pessoais, móveis e conectados à informação (information connected): telefones celulares, pagers e PDAs.

- dispositivos compartilhados, fixos e conectados à informação (information connected): são as Internet TVs, telefones com Internet, comunicadores high-end e sistemas de navegação de carros.

 

O tamanho da tela e a disponibilidade de memória de programa fez com que existisse esta divisão entre os dois grupos.

Embora todos esses dispositivos tenham coisas em comum, eles diferem na forma, função e características. Para isso existe o conceito de configuração. Há dois tipos de configuração:

 

Connected, Limited Device Configuration (CLDC) – Especificação de uma configuração mínima em termos de hardware e bibliotecas padrão para os dispositivos do primeiro grupo.

 

Connected Device Configuration (CDC) - Especificação de configuração para os dispositivos do segundo grupo de produtos.

 

Há também o conceito de perfil (profile). Um perfil é um conjunto de bibliotecas que são muito mais específicas a uma categoria de dispositivos do que as bibliotecas disponíveis pela configuração. Perfis são implementados ao topo da configuração.

A figura 1 ilustra as camadas J2ME.

 

wm-24-03-2008pic09.JPG 

Figura 1 - Camadas J2ME

A CLDC (Connected, Limited Device Configuration)

 

As características desta configuração são:

-      160kB a 512kB de memória disponível para a plataforma Java

-      processador de 16 a 32 bits

-      baixo consumo de energia, freqüentemente usando energia de baterias

-      conectividade a algum tipo de rede, em geral sem-fio. Conexão intermitente e banda limitada (em geral 9600bit/s ou menos)

 

A especificação CLDC não suporta as seguintes características da linguagem Java:

 

-      Pontos flutuantes

-      Finalização de objetos

-      Hierarquia da classe java.lang.Error

 

Devido as bibliotecas CLDC serem mais limitadas, algumas características foram eliminadas da JVM. São elas:

 

-      Java Native Interface (JNI)

-      class loaders definidas pelo usuário

-      reflexão

-      thread groups e daemon threads

-      finalização (Object.finalize())

-      referências fracas

 

Bibliotecas CLDC

 

O objetivo das bibliotecas CLDC é o de prover o conjunto mínimo necessário para o desenvolvimento de aplicações e definição de perfis para uma variedade de pequenos dispositivos. Dados a memória restrita e as características variadas dos dispositivos, é impossível de se ter um conjunto de bibliotecas que agrada a todos.

Na definição das bibliotecas, foi usada a especificação Java original como base, dando-se bastante ênfase na conectividade.

 

A maioria das bibliotecas CLDC são um subconjunto das edições Java maiores (J2SE e J2EE) para garantir compatibilidade e portabilidade de aplicações. Embora compatibilidade seja um objetivo muito desejado, as bibliotecas J2SE e J2EE possuem fortes dependências internas que dificultam a formação de subconjuntos destas bibliotecas. Por esta razão, algumas bibliotecas foram modificadas, especialmente na área de rede e I/O.

 

As bibliotecas CLDC podem ser divididas em duas categorias:

 

-      as que são subconjunto das bibliotecas J2SE padrões

-      as que são específicas do CLDC (mas que podem ser mapeadas para J2SE)

 

Classes pertencentes à primeira categoria estão localizadas nos pacotes java.lang.*, java.util.* e java.io.*. Estas classes são derivadas do J2SE. Classes pertencentes à segunda categoria estão localizadas no pacote java.microedition.*.

 

Mobile Information Device profile (MIDP)

 

O MIDP é a definição de uma arquitetura e APIs associadas necessárias para prover um ambiente de desenvolvimento aberto para MIDs (mobile information devices). O MIDP foi feito para rodar em cima do CLDC. Portanto, um MID deve possuir as seguintes características mínimas de hardware (além daquelas que são requeridas pelo CLDC):

 

- Display:

 

-      Tamanho da tela: 96x54;

-      Profundidade: 1 bit;

-      Formato do pixel (proporção de aspecto): 1:1;

- Input:

-      One handed keyboard” ou

-      Two handed keyboard” ou

-      Touch Screen;

 

- Memória:

 

-      128Kbytes para os componentes MIDP;

-      8Kbytes para dados das aplicações;

-      32Kbytes para o JAVA runtime;

 

- Rede:

 

-      Duplex, sem fio, possivelmente intermitente e com largura de banda limitada.

 

Os MIDs possuem uma grande variedade de softwares de sistema. Por essa razão, o MIDP estabeleceu alguns requisitos mínimos de sistema:

 

-      Um kernel para controlar o hardware, que possua uma entidade escalonável para rodar a Máquina Virtual Java;

-      Um mecanismo para ler e escrever na memória para suportar as APIs;

-      Acesso de leitura e escrita à rede sem fio;

-      Um mecanismo que provenha um tempo-base utilizado no timestamping nas escritas na “persistent storage”;

-      Capacidade de escrever num display bit-mapped;

-      Um mecanismo para capturar entrada de um input device;

 

Como os MIDs possuem uma grande quantidade de potencialidades, o MIDPEG (grupo que elaborou o MIDP) limitou o conjunto de APIs necessárias para apenas aquelas necessárias para alcançar uma grande portabilidade. São as seguintes:

 

-      Aplicação;

-      Interface do Usuário (UI);

-      Persistent Storage;

-      Rede;

-      Temporizadores (timers);

 

O MIDP herda a conectividade do CLDC e suporta um subconjunto do HTTP, que pode ser implementado com protocolos IP (TCP/IP) e não-IP (WAP e i-mode).

 

A interface HttpConnection possui funcionalidades que permitem a realização de funções específicas do HTTP. Qualquer aparelho que implemente MIDP deve suportar o HTTP 1.1, requisições HEAD, GET, POST e forms.

 

O MIDP disponibiliza um mecanismo para que as MIDlets possam guardar dados e lê-los mais adiante. É a chamada Record Management System (RMS).

 

- Record Stores:

 

É uma coleção de registros que permanece o mesmo durante múltiplas chamadas do MIDlet. A plataforma é responsável por manter a integridade desses registros, mesmo após reboots ou trocas de baterias.

 

- Records:

 

São vetores de bytes. Utilizados para armazenagem de diferentes tipos de dados. Eles são unicamente identificados pelo seu recordId, um valor inteiro.

 

Há duas versões do MIDP, MIDP1.0 e MIDP2.0. Esta última é uma versão revisada da primeira. Inclui novas características para interface do usuário (UI) permitindo as aplicações mais interativas e fáceis de usar. Outras característica marcante é que MIDP2 fornece funcionalidades para construção de games que simplificam o desenvolvimento e provêm maior controle sobre gráficos e performance. Sem contar as funcionalidades para maior conectividade,  Over The Air (OTA) e segurança.

 

MIDlet

 

È um modelo de aplicação definido pelo MIDP. Portanto, a aplicação J2ME tem quer ter pelo menos uma classe derivada da classe javax.microedition.midlet.MIDlet. Esta classe representa o ciclo de vida de um MIDlet. Alguns métodos desta classe:

 

startApp – Este método será chamado toda vez que o usuário da aplicação solicitar a execução do MIDlet.

notifyDestroyed –  Este método destrói o MIDlet.

 

MIDlet Suite

 

Conjunto de MIDlets. Uma aplicação J2ME poderá conter um ou mais MIDlets empacotados em um arquivo JAR.