Você está na página 1de 11

Programação Java ME

Parte 2: Ferramentas e Primeiros Passos

E
ste artigo continua a série e os plug-ins para Eclipse MTJ e Eclipse-
iniciada na edição anterior, ME. Vamos explorar as funcionalidades
na qual introduzimos toda disponíveis nestes programas, a sua
a complexa variedade de confi- configuração, e usar um projetinho “alô
gurações, perfis e APIs que fazem mundo” para nos ambientarmos. No pró-
parte da plataforma Java, Micro ximo artigo da série, cobriremos também
Edition. (Note que este artigo é o NetBeans Mobility Pack, e construiremos
bastante independente do anterior, uma MIDlet completa (mas sem depender
podendo ser acompanhado inteira- de nenhum IDE ou plug-in específico,
mente tendo-se apenas conhecimen- somente do WTK).
to inicial sobre Java ME.)
Como anunciado, daqui em diante Trabalhando com o Java Wireless
iremos nos concentrar na configu- Toolkit
ração CLDC e no perfil MIDP, O WTK é o “JDK do Java ME”, por dois
por serem os mais populares – e motivos. Primeiro, contém ferramentas
de aplicabilidade mais provável essenciais para desenvolvimento para
– devido à enorme disponibili- Java ME, como o pré-verificador (bin/pre-
dade dos dispositivos que imple- verify), o emulador de dispositivos CLDC
mentam este perfil, os telefones (bin/emulator), e as bibliotecas necessárias
celulares. para compilar e testar seus programas. Se-
Aliás, se você tem um celular gundo, ferramentas mais avançadas, como
razoavelmente recente, este é um plug-ins de IDEs, costumam depender do
aparelho tão poderoso que usá-lo WTK. Se você instalar algum IDE ou mes-
para fazer ligações de voz parece mo um plug-in Java ME que não exige uma
um desperdício! Algo como usar instalação prévia do WTK, tipicamente é
uma Ferrari para ir comprar pão na porque o WTK já vem embutido.
esquina. Vamos, então, pôr as mãos O WTK pode ser baixado de java.sun.
à obra e dar um bom uso à surpreen- com/products/sjwtoolkit. Neste artigo apre-
dente capacidade de processamento sentamos o WTK 2.5, cujo release final
que carregamos no bolso. foi recentemente disponibilizado. Este
release necessita do Java SE 5.0 ou supe-
Ferramentas para MIDP rior. Se você já usou versões anteriores
O programador Java moderno está do WTK, veja o quadro “As novidades do
habituado a ferramentas de desenvol- WTK 2.5”.
vimento de alto nível, e se precisamos Após a instalação, execute o Wireless To-
delas para criar sofisticadas GUIs olkit (ktoolbar). Ao contrário do JDK, que só
(interfaces gráficas) ou gigantescos oferece ferramentas de linha de comando, o
servidores “Enterprise Edition”, não WTK inclui muitas ferramentas gráficas. A
é porque o Java ME é “micro” que nos Figura 1 mostra a principal delas, o emulator,
contentaremos com ferramentas rudi- em ação, logo após compilar e executar um
mentares. Pelo contrário, existe hoje uma projeto. Para fazer esta execução de teste,
boa variedade de IDEs com bom suporte selecione Open Project, abra um projeto (é
para esta variante do Java. apresentada uma lista com todos os demos
Conheceremos três destas ferramentas incluídos no WTK), e execute-o com Run.
aqui: o Wireless Toolkit (WTK) da Sun, Você verá um emulador de celular, como

8 Java Magazine • Edição 45

Java45.indb 8 25.03.07 20:42:54


Comece a programar
para a plataforma Java
ME, com o Wireless
Toolkit e o Eclipse, MTJ
e EclipseME

OSVALDO PINALI DOEDERLEIN

mostrado na Figura 2. As teclas do aparelho


emulado podem ser acionadas pelo teclado
ou clicando sobre as mesmas com o mouse.
Após a execução, serão exibidas algumas
estatísticas de desempenho.
Finalmente, o botão Settings permite
visualizar e modificar a configuração de
um projeto. A Figura 3 mostra uma das pá-
ginas do extenso diálogo de configuração.
Este diálogo configura tanto as opções de
compilação (que ficam num project.proper-
ties no diretório-raiz do projeto) quanto os
descritores de deployment (MANIFEST. Figura 1. Tela principal do WTK.
MF) que as MIDlets exigem.
Não investiremos tempo criando pro-
gramas com o WTK, que não é, sozinho, encontrados no seu diretório bin, cujo
um IDE completo. Mas apresentaremos conhecimento é útil mesmo que na maior
uma visão geral das suas ferramentas. parte do tempo você use IDEs. Os IDEs,
A Tabela 1 lista todos os programas em grande parte, irão automatizar o uso

Ferramenta Descrição
Seleciona o dispositivo default que será usado pelo emulator, caso seu parâmetro
DefaultDevice
-Xdevice: não seja usado.
Emulador de Java Card. Necessário para rodar aplicações que interagem com smart-
cref
cards, através do package APDU da SATSA (JSR 177).
Simula um dispositivo Java ME. Ver Figura 2. Tem várias opções de diagnóstico e
pode simular dispositivos variados. Os dispositivos são definidos por arquivos sob
emulator wtklib/devices, o principal destes sendo um .properties que determina vários aspectos
do dispositivo como o tamanho da tela, mapeamento de teclas, fontes disponíveis e
outros aspectos.
Gerenciador de recursos de internacionalização (I18N). Também disponível pelo
i18ntool
launcher utils.
ktoolbar GUI principal do WTK. Ver Figura 1.
Variante do keytool do JDK, específico para Java ME. Necessário para aplicações que
mekeytool
trabalham com criptografia, assinaturas digitais etc.
Seleciona opções de funcionamento dos dispositivos: servidor de proxy, velocidade
prefs de emulação, confiabilidade da rede, perfis de segurança, propriedades para várias
APIs específicas.
Faz a pré-verificação de bytecode já compilado pelo javac. Isto enriquece os arquivos
preverify
.class com informações adicionais exigidas pelas JVMs ME.
Servidor e Registrar de SIP (Session Initiation Protocol). Ver Figura 5. Também disponível
siptool
pelo lançador utils.
Permite lançar 12 diferentes utilitários para dispositivos: monitores de memória ou
utils rede, gerenciamento de certificados e recursos, geradores de stubs para web services,
serviços de rede móvel etc. Ver Figura 4.
wscompile Compilador de WSDL específico para Java ME.
Tabela 1. Programas executáveis do WTK 2.5. Figura 2. Emulador de celular, exibindo o demo JBricks.

Edição 45 • Java Magazine 9

Java45.indb 9 25.03.07 20:42:55


Programação Java ME - Parte 2

destas ferramentas, portanto os concei- emulados irão se “enxergar” e se comuni- O suporte para Java ME é um ponto fra-
tos e capacidades são um aprendizado car, como se fosse via Bluetooth. co histórico do Eclipse, que até há pouco
reusável. Outra capacidade do WTK que devemos tempo nem tinha subprojetos específicos
Um fato que já podemos deduzir desta destacar é seu extenso suporte a monitora- para as plataformas “micro”, deixando
relação de ferramentas, ainda mais se você ção de rede. Com o utilitário prefs, página seus usuários dependentes de soluções
executá-las e explorá-las um pouco, é que Monitor, você pode ativar diversas opções de terceiros. Felizmente havia o projeto
o desenvolvimento de aplicações para ce- de monitoração. Após a ativação, inicie EclipseME, também open source, porém
lulares, seja com Java ou outra plataforma, novamente o BluetoothDemo no emulador não muito avançado. Isso além de outras
pode ser bastante complexo, porque não para ver o Network Monitor. Testando com soluções comerciais.
envolve somente o aparelho. Muitas APIs o SIPDemo, podemos examinar o tráfego Ainda que com atraso, a Fundação Eclipse
e operações necessitam também da infra- do protocolo SIP na rede móvel emulada. acordou para a demanda, disparando em
estrutura da rede móvel. Veja isso na Figura 6: o monitor faz uma 2006 uma série de projetos para construir
Por exemplo, o projeto SIPDemo ilustra exibição detalhada e bem estruturada não ferramentas que suportem plataformas
comunicação P2P com o protocolo SIP só desse, mas de doze protocolos (afinal, limitadas. O projeto-master é o Device Sof-
(Session Initiation Protocol). Mas isso só vai o ponto forte de um celular é a comuni- tware Development Platform (DSDP), que
funcionar se houver um Registrar – uma cação, não?). contém os subprojetos Device Debugging,
espécie de serviço de nomes do SIP – na No quesito de desempenho, podemos eRCP, Mobile Tools for Java (MTJ), Native
rede. Isso será tipicamente implementado ativar também um profiler muito com- Application Builder e Target Management.
pela própria operadora ou por parceiros pleto (também ativado em prefs>Monitor). Note que nem todos estes projetos se ocu-
que operem na sua rede privada. Já no am- Veja o quadro “Primeiras palavras sobre pam exclusivamente de Java ME, pois o
biente de desenvolvimento, tudo precisa desempenho”. escopo da Fundação Eclipse é mais amplo
ser emulado: o fone, a rede, e quaisquer do que a plataforma Java ou, ainda que
serviços de rede de que necessitemos. Os Trabalhando com o Eclipse, opção 1: usando apenas Java, mais amplo do que as
diversos utilitários lançados pelo progra- Mobile Tools for Java APIs abençoadas pelo JCP. Mas neste artigo
ma utils (Figura 4) fazem isso; na Figura Apesar de todas as capacidades do WTK, inicial vamos examinar somente o MTJ, que
5, vemos o servidor de SIP. precisamos de um ambiente de desen- é o principal: uma extensão do JDT para
Funcionalidades de rede que dependem volvimento mais completo: com editor, desenvolver aplicações Java ME.
somente dos dispositivos não exigem pro- depurador e outras ferramentas, tudo isso O MTJ ainda está em desenvolvimento,
gramas adicionais; por exemplo, se você integrado às facilidades do WTK. Investi- sendo a versão 1.0 esperada para junho de
carregar o projeto BluetoothDemo, pode garemos em primeiro lugar o suporte para 2006 (data do release do “Europa” – Eclipse
executá-lo duas vezes, e os dois celulares Java ME do IDE Eclipse. 3.3). Na data em que escrevo, o melhor
release estável do MTJ é o 0.7, que ainda
é compatível com o Eclipse 3.2.x. Testei o
MTJ 0.7 com o Eclipse 3.2.2.

Instalando e configurando o MTJ


Para instalar, basta descompactar o
mtj-runtime-<versão>.zip sobre a sua ins-
talação do Eclipse. Ao reiniciar o Eclipse
você verá um novo menu MTJ na barra de
menu principal, mas isso só contém duas
opções, para deployment e gerenciamento
de segurança. A configuração principal
do MTJ fica em Window>Preferences, veja
a Figura 7.
O MTJ precisa de pelo menos uma “de-
finição de plataforma Java ME”; isto é, o
Wireless Toolkit. Na página Mobile Tools
for the Java Platform>Device Platform, acione
Add e selecione o diretório de instalação do
WTK, que deverá finalmente aparecer na
Figura 4. O lançador utils, mos- lista de Device Platforms. Abaixo desta, será
trando várias ferramentas e serviços exibida a lista de Devices suportados pela
Figura 3. Propriedades de um projeto do WTK. de rede móvel. plataforma selecionada. Deveremos ver as

10 Java Magazine • Edição 45

Java45.indb 10 25.03.07 20:42:56


quatro definições de dispositivos que são funcionalidades, especialmente capacidades de do pelo MTJ. Pelo menos para mim, o
incluídas no Sun WTK 2.5. depuração no aparelho real (que pode exigir mais MTJ selecionou por default a opção MTJ
Em seg u ida, vá à pág i na Runtime plug-ins, cabos seriais e novas configurações, Security Manager for IBM’s JRE (v.5.0.0)
Platform e selecione Add. Dessa vez detalhes que não cobriremos aqui). Keytool. Isso só é boa idéia se você estiver
você não escolherá um diretório, e sim utilizando a JVM da IBM para executar o
uma das Device Platform já cadastradas. Na página Security, podemos escolher Eclipse. Se você é como 95% dos usuários
A diferença é que a Device Platform é qual gerenciador de segurança será usa- do Eclipse e usa a JVM da Sun, selecione
utilizada para compilar os projetos, e a
Runtime Platform é usada para executá-
los. Na lista de Device Platform, o botão
Info permite visualizar detalhes de cada
plataforma, ou seja as APIs suportadas.
Já na lista de Runtime Platform, o botão
correspondente Edit permite visualizar
e também customizar o runtime selecio-
nado, como na Figura 8.

Se você tiver feito o download dos SDKs para


Java ME específicos para algum fornecedor de
aparelhos – como Nokia, SonyEricsson etc. – estes
costumam conter versões customizadas do WTK
(provavelmente do WTK 2.2, pois o 2.5 ainda é
muito recente na data em que escrevo). A vanta-
gem destes WTKs customizados é que eles possuem
definições de dispositivo que correspondem mais
fielmente a todos os modelos de celulares daquele
fornecedor. Se quiser, você pode configurar o MTJ
para utilizar também estas definições. Verifique a
documentação do SDK do celular quanto a outras
Figura 5. O serviço SIP Proxy & Registrar, necessário para executar aplicações SIP.

Figura 6. O Network Monitor, destacando a aba do protocolo SIP.

Edição 45 • Java Magazine 11

Java45.indb 11 25.03.07 20:42:57


Programação Java ME - Parte 2

a opção MTJ Security Manager for SUN’s Criando um projeto Project. Na primeira página de proprieda-
JRE (v.1.4.2) Keytool. Da mesma forma, na Tudo configurado, na perspectiva Java (o des do projeto, escolha algum nome, como
página Signing, se você não usa a JVM da MTJ não cria uma perspectiva específica “AloMundoMTJ”. Na segunda página
IBM, selecione o MTJ Signing Provider for para Java ME), crie um novo projeto do tipo (Java ME Runtime Platform), escolha uma
SUN’s WTK(v2.2)jadtool. Mobile Tools for the Java Platform>MIDlet plataforma. A terceira página também

Primeiras palavras sobre Desempenho

...ah não, lá vem o Osvaldo com sua obsessão por A Figura Q1 mostra o resultado do profiling desprezível. Mas no Java ME não é bem assim. e
desempenho, mal começou a série e ainda nem do demo JBricks (Figura 2), o milésimo clone do Muitos celulares já têm boa aceleração de gráficos d
vimos uma linha de código! Bem, neste caso isso é clássico jogo Breakout*. O resultado do profile é 2D, mas isso não é algo com que você possa contar, G
justificado. Os dispositivos não são chamados “limi- extremamente revelador: parece que o programa especialmente nos aparelhos mais baratos. (E só
tados” devido ao seu tamanho, e sim devido à falta está gastando nada menos que 47% do tempo os modelos de última geração, ainda muito caros,
de gigahertz, gigabytes, e gigabits-por-segundo. Pro- de processamento (cycles) num único método de têm aceleração 3D.) Então, essa forma de desenhar J
gramadores habituados com técnicas, ferramentas e API, Graphics.drawArc(). Suspeitei, e verifiquei nos a bolinha do jogo é absurdamente ineficiente**. p
frameworks de altíssimo nível – que fazem tudo ficar fontes (Ball.java), que o jogo usa este método para Ineficiente e sem nenhuma justificativa: a bolinha f
mais fácil, porém maior e mais lento – têm dificulda- desenhar a bolinha, o único elemento animado na nunca muda, e quanto à qualidade, veja a Figura q
de em entrar no mundo do Java ME, onde não existe maior parte dos frames. Se fosse numa VM Java Q2: é péssima, pois algoritmos de rasterização f
nenhum “giga”. Será preciso ter parcimônia ao gastar SE, cujas operações gráficas são aceleradas pela de curvas são notoriamente ruins com tamanhos P
tempo, espaço e banda. O exemplo que se segue é Java 2D e por modernas placas de vídeo, isso não muito pequenos e especialmente sem antialiasing.
um primeiro pontapé para acordar seus instintos de teria importância: desenhar uma bolinha com Esta bolinha certamente teria um aspecto muito S
hacker escovador de bits! uma dúzia de pixels de diâmetro teria um custo melhor se fosse desenhada à mão, pixel por pixel, m

Figura Q1. Profiler de métodos. No lado esquerdo vemos a árvore de invocações de métodos, com o tempo relativo gasto por cada um. No lado direito, estatísticas detalhadas de execução de
todos os métodos dentro do nó selecionado na árvore.

12 Java Magazine • Edição 45

Java45.indb 12 25.03.07 20:42:57


não apresenta novidades e não exige cus- o perfil (mantenha o default MIDP-2.0) e plate disponível: Hello_World_MIDP. Este
tomizações. A quarta página (Configure configuração (mantenha CLDC-1.1). Na template fará o projeto já ser preenchido
MIDlet Suite) apresenta várias proprie- quinta e última página (Templates), você com o mínimo de código exigido para uma
dades descritivas da MIDlet, como nome tem a opção de selecionar um template de MIDlet. Acione Finish.
do JAR, autor e versão, e principalmente, projeto; faça isso, escolhendo o único tem- O template Hello_World_MIDP gera um

e gravada numa imagem estática como resource


do programa, exigindo apenas um (eficiente)
Graphics.drawImage() a cada frame.
Morais da história:
1. As plataformas mais limitadas suportadas pelo
Java ME nos obrigarão a esquecer alguns vícios de
programação para desktop e servidores, como
ficar muito à vontade com técnicas tão lentas
quanto desenho de curvas, parsing de XML, ou
frameworks ultra-abstratos que parecem teses de
PhD em design patterns.
2. Use os programas de monitoração do WTK.
São ferramentas excepcionais, e irão poupá-lo de
muita dor de cabeça.

Figura Q2. A bolinha do jogo JBricks, ampliada. Como


descobrimos, o programa desenha esta bolinha, incluindo
efeitos de sombra e brilho, com várias operações gráficas,
inclusive a drawArc() que consome quase metade de
Figura 7. Configuração do Mobile Tools for Java no Eclipse.
toda a CPU usada pelo programa. E tudo isso para um
resultado imperfeito.
As Novidades do WTK 2.5
* De 1976, da Atari. Onde trabalhava um tal Steve
Jobs, que contratou o amigo Steve Wozniak para pro-
jetar o hardware. ‘Woz’ fez o projeto em quatro dias
– só lógica discreta TTL, sem processadores – e usan-
A pós um longo período sem releases es-
táveis – o WTK 2.3 nunca saiu de beta, e
a versão anterior foi o 2.2 no final de 2004 – a
novas classes no classpath. Ferramentas do
WTK, em especial o emulador, precisam ser
modificadas para dar suporte a muitas das
do muito menos chips do que a Atari estimara. Isso
rendeu um bônus de US$ 5.000, que Jobs embolsou versão 2.5 restaura o status de produção ao novas APIs, e algumas dessas APIs precisam de
quase todo. (O que nos ensina que só programar bem toolkit do Java ME. A lista de novidades, com- ferramentas novas (ex.: a SIP API necessita da
não garante nada.). E o design premiado de Wozniak?
Era tão compacto que a Atari não conseguiria fabricá-lo parando com o WTK 2.2, é extensa. siptool). Por isso, a adição de novas APIs Java ME
em quantidade. Por isso acabou fazendo outro design Muitos itens são suporte para novas APIs: Secu- costuma exigir novas versões do WTK.
muito mais “feio”, com mais que o dobro de chips, e foi rity and Trust Services (JSR 177), Location (JSR 179), A ktoolbar, que pode ser considerada um
um sucesso. (O que nos ensina que time-to-market é
mais importante do que purismo técnico.) SIP (JSR 180), Content Handler (JSR 211), Scalable mini-IDE – não possui editor de código ou
2D Vector Graphics (JSR 226), Payment (JSR 229), depurador, mas inclui facilidades de gerencia-
** Pelo menos no emulador, que não necessaria- Advanced Multimedia Supplements (JSR 234), mento de projeto, compilação e testes – foi re-
mente tem as mesmas características de desempenho
que o hardware real. Mas isso não invalida o exemplo. Mobile Internationalization (JSR 238), Java Binding construída sobre a NetBeans Platform. Também
Observe que o desenho de arcos e círculos não exige for the OpenGL ES (JSR 239). (Veja o artigo anterior há melhoras no emulador e em praticamente
ponto flutuante, pois há algoritmos que fazem isso só desta série para mais sobre estas APIs.) todas as demais ferramentas.
com aritmética inteira (procure na web por “Digital Di-
fferential Analyzer” e “Bresenham”). Mas até mesmo estes O suporte às APIs da plataforma ME costuma Outra novidade importante é o suporte à
algoritmos são muito mais lentos do que o simples “ca- ser mais difícil que em Java SE/EE: normalmente MSA. Veja o quadro “JTWI e MSA: As novas
rimbo” de uma imagem já pronta na tela. não basta apenas adicionar um JAR com as especificações da plataforma CLDC”.

Edição 45 • Java Magazine 13

Java45.indb 13 25.03.07 20:42:58


Programação Java ME - Parte 2

package hello_world_midp_package com uma As partes da listagem em negrito são o


classe Hello_World_MIDP; nomes bastante código que adiconei. Observe que, para
inadequados e fora do padrão de estilo tratar o evento de command, fiz a própria
do Java, sem dúvida de propósito para classe de MIDlet implementar a interfa-
lembrar-nos de começar a customizar o ce CommandListener. Num programa Java
código. A Listagem 1 mostra esta classe SE com uma GUI Swing, normalmente
já um pouco alterada: adicionei código criaríamos uma inner class para isso; mas
para criar um Command (acionado por uma embora seja possível usar inner classes
soft-key do celular), que quando acionado, em Java ME, este não é o procedimento
adiciona uma nova mensagem ao form. normal. Uma inner class aumenta o tama-

JTWI e MSA: As novas especificações da plataforma CLDC

N o artigo anterior comentamos todas as


configurações, perfis e extensões do Java
ME, o que é um panorama confuso, pois mesmo
agregando o CLDC 1.0 e MIDP 2.0 (ou versões
superiores) a uma coleção um pouco maior de
APIs obrigatórias: JSR 135 (Mobile Media) e 205
mas felizmente, o CLDC 1.1 já é padrão de fato
no mercado, e na prática já não precisamos nos
preocupar com dispositivos CLDC 1.0).
havendo API padronizadas para quase tudo, os (Wireless Messaging). Em cima disso, a MSA torna seis extensões
dispositivos variam no número de APIs que cada Mais que exigir novas APIs, a JTWI também obrigatórias: as duas do JTWI e mais as JSRs
um implementa. Em alguns casos a variação é inclui esclarecimentos de algumas questões de 75 (FileConnection & PIM), 82 (Bluetooth), 184
inevitável devido à fragmentação do próprio interoperabilidade e segurança, e exigências (M3G) e 226 (SVG). Também relaciona mais oito
hardware: por exemplo, não adianta obrigar maiores de capacidade dos dispositivos. Por APIs opcionais: 172 (Web Services), 177 (Security
todos os dispositivos CLDC/MIDP a implementar exemplo, a tela deve ter no mínimo 128x128 pi- & Trust), 179 (Location), 180 (SIP), 211 (Content
a JSR 82 (Bluetooth & OBEX), pois nem todos os xels com 4.096 cores / tons de cinza. (O MIDP 2.1 Handler), 229 (Payment), 234 (Multimedia Sup-
aparelhos possuem as interfaces físicas corres- ainda se contenta com 96x54, preto e branco.) plements) e 238 (I18N).
pondentes. E a maioria dos que não possuem Também há exigências de comportamento Um dispositivo “MSA” deve conter todas estas
nem permite adicioná-las – celulares e PDAs mais estritas para algumas API: por exemplo, a 14 APIs extra; um dispositivo “MSA Subset”
em geral não são uma arquitetura aberta como resolução do clock deve ser de pelo menos 40 deve conter as seis obrigatórias. Comparando
os PCs, onde milhares de periféricos podem ser milissegundos; cada aplicação deve poder criar com os aparelhos hoje no mercado, a maioria
adquiridos posteriormente e conectados a slots pelo menos cinco Record Stores, e pelo menos dos aparelhos intermediários já possui as APIs
PCI, portas USB e outras interfaces. cinco timers simultâneos... e por aí vai. Estas da MSA Subset, pois Bluetooth, MMAPI, SVG e
No entanto, os dispositivos estão em constante exigências extra significam que os dispositivos mesmo M3G já são amplamente suportadas. Já
evolução, e também os serviços e protocolos identificados como compatíveis com a espe- a MSA “full” inclui várias APIs ainda raras em apa-
utilizados nas redes wireless. E há muitas APIs cificação JTWI oferecerão ao desenvolvedor relhos mais comuns. Em compensação, daqui a
que não são dependentes de capacidades uma quantidade maior de APIs e capacidades 1-2 anos quando a maioria dos aparelhos já for
específicas de hardware, e só não são obriga- padronizadas, melhorando a portabilidade das aderente à MSA “full” com todas estas 14 APIs
tórias hoje devido a fatores como o tamanho aplicações. além de outras exigências, os desenvolvedores
(consumo adicional de ROM). Além disso, existe A JTWI, agora com quatro anos de idade, já poderão contar com uma oferta muito maior
uma necessidade de maior padronização de pode ser considerada como nível mínimo de de APIs cuja presença poderá ser presumida em
comportamentos detalhados: por exemplo, compatibilidade para qualquer aparelho MIDP qualquer aparelho.
quais variações do formato de arquivo JPEG fabricado nos últimos dois anos. A MSA é uma extensão da JTWI, pois além
são obrigatoriamente suportadas, ou qual de exigir as mesmas APIs e mais outras 12, a
a resolução mínima do clock (usada por A MSA MSA também inclui as mesmas clarificações e
System.currentTimeMillis() e Timer, e importante A JTWI foi um bom tapa-buraco para deficiên- exigências de comportamentos de APIs. E inclui
para qualquer manipulação de mídia ou jogo cias das especificações CLDC 1.0 e MIDP 2.x. Mas ou aumenta outras. Por exemplo, a tela deve
animado). Para melhorar esta situação existem para a nova geração de aparelhos a partir deste suportar pelo menos 65.536 cores, o número
duas especificações de plataforma adicionais, ano, há uma nova especificação mais ambiciosa, mínimo de Record Stores por aplicação sobe
a JTWI e MSA, que por motivo de espaço não a MSA – Mobile Systems Architecture (JSR 248)* de cinco para 10, etc. Veja muito mais detalhes
comentamos no artigo anterior. – cujo release final saiu em dezembro de 2006. nesta edição, no artigo de Marlon Luz.
A primeira boa notícia é que a MSA exige a
A JTWI CLDC 1.1 e a MIDP 2.1, enterrando de vez o CLDC
* Também há uma especificação paralela, MSA Ad-
A JTWI procurou reduzir a fragmentação do 1.0 (que não suporta números float e double, vanced (JSR 249), que difere principalmente por usar a
mercado de dispositivos por volta de 2003, um enorme impedimento para portabilidade; configuração CDC e não CLDC.

14 Java Magazine • Edição 45

Java45.indb 14 25.03.07 20:42:59


nho do programa, muito mais do que um Na árvore de projetos, vemos que além META-INF/MANIFEST.MF. (Não adianta
novo método na mesma classe. Vá se acos- da pasta de fontes (src), META-INF e re- editar o MANIFEST.MF que aparece no
tumando com estas novas regras... caso sources (res), que são elementos comuns projeto, pois o MTJ o recria sem a linha
contrário, suas aplicações nem vão instalar em projetos Java SE ou EE (ainda que o “MIDlet-1...”.)
nos dispositivos reais (muitos rejeitam layout dos projetos em IDEs possa variar),
qualquer JAR com mais de 300 Kb1). temos alguns novos elementos. A pasta Depuração
Para executá-lo, você poderá se surpreen- verified contém classes que já passaram Para executar a MIDlet no depurador do
der porque o menu do projeto Run As não pelo pré-verificador (o MTJ invoca o Eclipse, você terá primeiro que modificar
apresenta nenhuma opção para MIDlet ou programa preverify do WTK). E a pasta algumas configurações default do Eclipse,
Java ME, só as opções convencionais como deployed contém os arquivos finais para para contornar limitações do emulador do
Java Application, que não funcionarão. Pode instalação num celular (ou execução num WTK: Em Window>Preferences>Java>Deb
ser uma limitação ou bug da versão 0.7 do emulador). Resumindo, o fluxo de depen- ug, desative as opções Suspend execution
MTJ. Então, me acompanhe: Acione Run dências dos de arquivos é: src (código-fon- on uncaught exceptions e Suspend execution
As>Run, e no final da lista de configurações te Java editado por você) _ bin (arquivos on compilation errors, e aumente Debugger
de lançamento, selecione o nó MTJ Applica- .class compilados pelo Eclipse) _ verified timeout (ms) para 15000 ou mais.
tion e escolha New no seu menu de contexto. (arquivos .class processados pelo MTJ, que Estas instruções são baseadas na docu-
Isso cria a configuração de lançamento apro- aciona o preverify) _ deployed (arquivos mentação do EclipseME, mas se aplicam
priada, já configurada para o seu projeto e JAR e JAD gerados pelo MTJ). a ambos os plug-ins cobertos neste artigo,
classe de MIDlet. Modifique somente o nome No sistema de deployment das MIDlets, e provavelmente a qualquer outro depu-
da configuração, que deve ser algo como temos sempre um arquivo JAR e um arqui- rador para Java ME que use o WTK. Se
“New Configuration”; veja a Figura 9. vo JAD, sendo que este último é um descri- você tentar utilizar o depurador sem ter
tor que os aparelhos lêem antes de baixar executado estes “preparativos”, o resultado
Execução e Deployment o JAR – para quem já conhece os arquivos será uma variedade de erros, de crashes da
Execute Run na configuração. O resul- JNLP do WebStart, é algo
tado não será muito surpreendente: o já parecido. (No seu sistema
familiar emulador de celular em execução, operacional, ao clicar no
exibindo uma tela em branco exceto pelo arquivo JAD, o emulator
título, e o item de comando “Clique-me!”, será lançado, desde que o
que quando acionado exibe uma mensa- JAR correspondente esteja
gem. Se ao acompanhar a seção sobre o no mesmo diretório.) A
WTK você ativou os monitores de rede ou Figura 10 também mostra
de memória, estes serão lançados junto com o editor de arquivos JAD do
o emulador. Assim, todo o poder das princi- MTJ. Se você quiser instalar
pais ferramentas do WTK fica disponível a o programa AloMundoMTJ
partir do nosso IDE. Mas como o MTJ ainda no seu celular para testá-lo
não possui páginas de configuração ou ações “pra valer”, só precisa do
correspondentes a todas as opções e ferra- AloMundoME.jar.
mentas do WTK, você às vezes pode ter que A configuração mínima
acionar o WTK diretamente, por exemplo, que devemo s fa z er no
lançando o programa prefs para habilitar arquivo JAD é adicionar,
ou desabilitar os monitores. na página MIDlets, uma
A Figura 10 mostra o ambiente de de- ent rada como: Name =
senvolvimento completo, com o programa Alô Mundo, Class = alo.
AloMundoMTJ sendo executado no emu- AloMIDP. A coluna Icon
lador; a view Output do Eclipse mostrando pode ficar em branco. Isto
mensagens do emulator, e outras views deveria fazer o MTJ gerar
comuns de depuração (veja a subseção u m M ETA - I N F/M A N I -
“Depurando” a seguir). FEST.MF com uma linha
como “MIDlet-1: Alô Mun-
do, alo.AloMIDP”, só que
1 300 Kb é a capacidade mínima especificada pela es-
pecificação MSA, que embora recentemente completada, isso não funciona. Se você
já é atendida em certos pontos por muitos dispositivos (a gerar os arquivos de de-
JTWI só exigia 64Kb). A maior parte dos produtos recen-
ploy, terá que abrir o JAR
tes aceitará JARs maiores, mas isso não é um comporta-
mento portável e padronizado. e acrescentar esta linha ao Figura 8. Customizando uma definição de runtime do MTJ.

Edição 45 • Java Magazine 15

Java45.indb 15 25.03.07 20:43:00


Programação Java ME - Parte 2

KVM2 até breakpoints sendo ignorados. o programa passo-a-passo, ver variáveis e MTJ: Em construção...
Para fazer um teste, crie um breakpoint no pilha de invocações etc., como mostrado na Já verificamos que o MTJ suporta as
método comandAction() e acione o comando Figura 10. Surpreendentemente, até alguns funcionalidades essenciais para criar
“Clique-me!” no emulador. A execução recursos avançados como breakpoints con- aplicações MIDP, mas este é um projeto
deverá ser interrompida, permitindo rodar dicionais funcionam. Mas nem tudo; por ainda em desenvolvimento. Na versão
exemplo, a facilidade “hot code replace” (edi- preliminar que testamos (0.7), o MTJ ainda
2 A JVM para Java ME da Sun, onde ‘K’ significa Kilobyte,
em referência ao modesto consumo de memória do Java tar-e-continuar) não funciona – já seria exigir tem algumas limitações:
ME. Como o nosso ambiente de desenvolvimento é emu- demais da KVM, otimizada para dispositi- • O MANIFEST.MF não é gerado corre-
lado, o programa emulator lança duas VMs que trabalham vos enxutos. (Como estas são limitações da tamente. Isso não impede o lançamento
em conjunto: a JVM Java SE normal (um processo java ou
javaw), e um processo com o curioso nome de zayit que máquina virtual, não adianta procurar outro do programa a partir do IDE / emulador,
contém componentes da KVM. IDE ou plug-in para Java ME.) mas um arquivo JAR sem este arquivo cor-
reto será rejeitado por dispositivos reais.
Pode-se contornar o problema editando os
manifestos à mão.
• Não há suporte para funcionalidades e
ferramentas externas importantes, como
ofuscadores de bytecode, Mobile JUnit ou
Antenna (comentados adiante, na seção do
EclipseME).
• Não existe editor visual de GUIs.
• Para aborrecimento dos entusiastas que
gostam de acompanhar os mais recentes
releases de desenvolvimento do Eclipse, o
MTJ ainda não é compatível com o Eclipse
3.3 (testei com o 3.3M5eh). Será necessário
usar o Eclipse 3.2.

Como o MTJ 0.7 é de novembro de 2006


e escrevo em março, é bem possível que,
quando você ler este artigo, uma versão
Figura 9. Criando uma configuração de lançamento para o projeto AloMundoME. melhor esteja disponível (o release 1.0 é
esperado para junho). Mas até lá, se você já
Listagem 1. Código completo da MIDlet AloMundoME. tiver passado da fase de investigação e qui-
ser trabalhar seriamente em projetos Java
package alo;
import javax.microedition.lcdui.Command; ME, pode ser melhor procurar uma ferra-
import javax.microedition.lcdui.CommandListener; menta alternativa como o EclipseME.
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
Trabalhando com o Eclipse II: EclipseME
import javax.microedition.midlet.MIDletStateChangeException; O EclipseME é um projeto open source
public class AloMIDP extends MIDlet implements CommandListener {
protected Form form;
independente, disponível em eclipseme.
protected void startApp () throws MIDletStateChangeException { org, e que tradicionalmente tem servido às
Display d = Display.getDisplay(this);
d.setCurrent(getForm()); necessidades dos usuários do Eclipse que
} precisam de suporte à plataforma Java ME.
protected void pauseApp () {
} Assim, enquanto o MTJ não fica pronto,
protected void destroyApp (boolean flag) throws MIDletStateChangeException { podemos usar o EclipseME.
}
protected Form getForm () { Os dois plugins são parecidos, por isso
if (form == null) { descreveremos rapidamente a configu-
form = new Form(“Título da Form”);
form.addCommand(new Command(“Clique-me!”, Command.ITEM, 1)); ração do EclipseME. (Ambos podem ser
form.setCommandListener(this); instalados simultaneamente no Eclipse; fiz
}
return form; isso e não tive problemas.) No Update Ma-
}
public void commandAction (Command c, Displayable d) {
nager, utilize a URL http://www.eclipseme.
form.append(“Alô... tem alguém aí?\n”); org/updates para instalar o EclipseME.
}
}
Vá então em Window>Preferences>J2ME.
Na página principal, no grupo Antenna

16 Java Magazine • Edição 45

Java45.indb 16 25.03.07 20:43:01


Settings, sete o WTK Root para o diretório- mendado para MIDlets. Mesmo que você não EclipseME não oferece templates. Crie um
raiz do WTK, e Antenna JAR para o arquivo precise de proteção contra descompiladores, source folder src e copie para lá os mesmos
antenna-bin-<versão>*.jar (que você obterá a redução de tamanho dos JARs proporciona- fontes do projeto do MTJ.
de antenna.sourceforge.net). Esta biblioteca da por ofuscadores é importante. A Figura 11 Edite também o arquivo JAD para registrar
Antenna é uma coleção de tasks do Ant para mostra as páginas de configuração do Eclip- a nossa MIDlet. O EclipseME não tem o mes-
Java ME, que é suportada pelo EclipseME. seME, destacando as opções de ofuscador mo bug do MTJ, e irá gerar o MANIFEST.MF
Seu uso não é obrigatório, mas é muito (muitas podem ser sobrepostas nas páginas corretamente nos arquivos JAR criados.
conveniente para os fãs de scripts do Ant (o de propriedades de cada projeto).
EclipseME gera os scripts de build). Testando
Na página Device Management, clique Im- Criando o projeto Para executar a MIDlet com o Eclipse-
port, forneça o diretório do WTK e acione Crie um projeto do tipo J2ME>J2ME ME, também será preciso criar à mão a
Refresh; aguarde a detecção dos devices e MIDlet Suite; aceite os defaults para as configuração de lançamento, só que o
confirme com Finish. propriedades específicas ao EclipseME. tipo será Wireless Toolkit Emulator. Note
Na página Packaging / Obfuscation, forneça O projeto criado será semelhante ao do que nesta configuração, na aba Midlet, o
o diretório de instalação do ProGuard, um MTJ, com as mesmas pastas res, verified e default da opção Executable é Over-the-Air;
ofuscador e otimizador de bytecode open deployed (este último criado sob demanda isto significa que o emulador é lançado
source (baixe de proguard.sourceforge.net). O quando for feito o primeiro build). Não com uma opção que simula a instalação da
ofuscamento não é obrigatório, mas é reco- haverá fontes nem source folder, pois o MIDlet através da rede móvel. Mas eu tive

Figura 10. O Eclipse & MTJ em ação.

Edição 45 • Java Magazine 17

Java45.indb 17 25.03.07 20:43:01


Programação Java ME - Parte 2

problemas com esta opção. Com Executable a edição visual de GUIs MIDP, que tam- serão resolvidas porque componentes do
= Midlet <classe>, tudo funcionou corre- bém falta no EclipseME. JDT, como o editor de código, compilador
tamente. A execução em modo de debug Uma das vantagens da absorção destes Java, outliner e outros, serão modificados
exige as mesmas configurações do Eclipse projetos de terceiros pela Fundação é a para dar suporte a pré-processamento. Isso
que comentamos ao discutir o MTJ. maior integração entre todos os seus com- não quer dizer necessariamente que o JDT
ponentes. Se a equipe do MTJ precisar de passe a suportar fontes Java com diretivas
Escolhendo seu plug-in Java ME para um aperfeiçoamento no núcleo do Eclipse de pré-processador; basta que os plug-ins
Eclipse ou em seus frameworks (Platform, JDT, do JDT, como o editor, outliner, depurador
Apesar do atual status – o MTJ em pré- VE...), este pedido será atendido com uma e outros, disponibilizem “pontos de exten-
release com algumas limitações e bugs presteza bem maior do que seria para são” estratégicos que permitem que um
importantes, e o EclipseME mais maduro uma solicitação externa (a não ser que o outro plug-in, como o MTJ, faça isso.
(sem contar outros plug-ins / IDEs comer- interessado implementasse a melhoria
ciais baseados no Eclipse), não tenha dúvi- por conta própria, o que é possível pois o Conclusões
da: o MTJ é o futuro do desenvolvimento Eclipse é open source – mas não necessa- No primeiro artigo desta série, apre-
Java ME na plataforma Eclipse, pois faz riamente fácil!). sentamos e analisamos a impressionante
parte de um plano mais abrangente, e é Comprovando isso, já existem discussões amplitude de tecnologias, especificações
suportado pela Fundação Eclipse. sobre algumas destas melhorias. Por exem- e APIs que formam a plataforma (ou mais
Há semelhanças entre os dois proje- plo, muitos desenvolvedores de aplicações precisamente, família de plataformas) Java
tos, ex.: o editor de JAD é exatamente Java ME utilizam ferramentas de pré-pro- ME. Neste artigo, começamos a pôr as mãos
igual. Isso não é coincidência, pois o cessamento e compilação condicional. Esta na massa, vendo que esta plataforma exige
código-fonte do EclipseME foi uma das é uma facilidade de linguagens como C/ um arsenal de ferramentas que não fica
contribuições iniciais para o projeto MTJ. C++ que foi banida do design do Java, mas devendo nada aos IDEs para aplicações
(Outra foi o Carbide.J da Nokia.) O autor é importante tanto para reduzir o tamanho Enterprise Edition. (Quem eles estão tentan-
do EclipseME, Craig Setera, também faz dos programas quanto para conviver com do enganar com esse termo “dispositivos
parte da equipe do MTJ, assim como uma oferta de dispositivos nem sempre limitados”? Podem ser um pouco limitados
desenvolvedores da Nokia, SonyErics- tão compatíveis quanto deveriam com as em CPU e memória, mas certamente, nem
son, IBM, e vários outros fornecedores especificações Java ME. O EclipseME já tanto em funcionalidades!)
de IDEs e/ou tecnologia de dispositivos suporta isso – igual a C/C++, com diretivas Espero ter ajudado o leitor a vencer a
móveis. O MTJ (ou mais precisamente o #include, #define, #ifdef etc. Mas não é um barreira inicial de tantas definições, espe-
Device Software Development Platform suporte ideal, por exemplo as diretivas de cificações e ferramentas novas, e a partir
como um todo) é mais um “rolo compres- pré-processamento precisam ser colocadas daqui, começar a desenvolver aplicações
sor” da Fundação Eclipse, unificando os dentro de comentários “//”, ferramentas do para dispositivos MIDP, o perfil de foco da
esforços de praticamente toda a comu- JDT como o outliner não reconhecem as di- série deste artigo em diante. No próximo
nidade e que certamente resultará num retivas, a compilação exige um novo folder artigo completaremos o assunto de IDEs
ferramental extremamente completo. Os oculto com os fontes pré-processados e é com o NetBeans Mobility Pack, e começa-
planos do MTJ incluem, especialmente, mais lenta, etc. Já no MTJ, estas restrições remos a programar para valer.

java.sun.com/javame
Página oficial do Java ME
java.sun.com/products/midp
Página oficial do perfil MIDP
java.sun.com/products/cldc
Configuração CLDC

Osvaldo Pinali Doederlein


(opinali@gmail.com)
é Mestre em Engenharia de
Software Orientado a Objetos,
membro individual do Java Community
Process e trabalha na Visionnaire Informática como
arquiteto e desenvolvedor.
Figura 11. Configuração do ofuscador ProGuard, suportado pelo EclipseME.

18 Java Magazine • Edição 45

Java45.indb 18 25.03.07 20:43:02