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