Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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.
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
...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.
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.
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