Convertendo aplicações Java ME para Android

Para muitos, nos dias de hoje, desenvolvimento de Software para dispositivos móveis se resume a uma palavra : Android. E não é para menos, pois este é a bola da vez, seja por suas interfaces magníficas, ou por recursos fantásticos, fácil integração com recursos do aparelho, entre outros. Mas, no meu trabalho, a necessidade imediata de migração para a plataforma Android veio principalmente por causa de aparelhos. Em um ambiente onde é necessário ter centenas de aparelhos, não se pode dar ao luxo de trabalhar com equipamentos escassos no mercado. Além disso, de tempos em tempos, é necessário trocá-los, seja por causa de bateria viciada, ou principalmente pelos Softwares que vão ficando cada vez mais pesados, ao ponto de novos requisitos chegarem ao status de “colocar uma Uberlândia dentro de Araguari”, como diz o meu chefe. Para se ter uma idéia, o nosso Software de vendas, com o dispositivo atual (A1200 da motorola), trava com certa frequência (outofmemoryerror), além de possuir lentidões para alguns tipos de buscas, gerando transtornos para os vendedores, especialmente em cotações de pedidos, onde, segundos de lentidão podem custar caro. ( Antes que coloquem a culpa no desenvolvedor, a cada nova versão, muito tempo é dedicado para refatorações e otimizações, ao ponto de me sentir como se estivesse fazendo um jogo com gráficos de playstation 3 para hardware de playstation 1, ou seja, sempre tentando enxugar ao máximo o Hardware com algoritmos otimizados, caches, etc.., mas, obviamente, tudo tem um limite ).

Com a necessidade de se trabalhar com aparelhos novos, mais potentes, custo relativamente baixo, e com alta disponibilidade no mercado, todas as opções se voltaram para aparelhos com Android. Porém, estes aparelhos não rodam aplicações Java ME, gerando um problemão para a nossa equipe, já que, neste caso, nossa aplicação não seria compatível com estes aparelhos. Com isso, surgiu uma necessidade imediata (lê-se “urgente”, “para ontem”, “se vira nos 30”, etc..) de migrar nossa aplicação para Android. Obviamente, converter um sistema de automação de vendas para uma nova plataforma, mesmo envolvendo a mesma linguagem (Java), leva bastante tempo, no qual a empresa não podia esperar. Então, comecei a procurar algumas alternativas para que, de alguma forma, ou o Android consiga rodar a nossa aplicação Java ME ou nossa aplicação seja convertida para Android, por algum Software milagroso. Entre várias pesquisas e fracassos, a solução encontrada foi o projeto MicroEmulator, que pode ser visto em

http://microemu.blogspot.com/2009/08/converting-javame-applications-to.html

Este projeto com código fonte Java recebe como entrada os arquivos .jar e .jad do projeto Java ME e entrega como saída os binários Android (arquivo .apk). Como o link acima mostra, basta baixar os fontes do SVN, executá-lo com o Maven para baixar suas dependências e montar o projeto, editar o arquivo build.xml para mapear corretamente onde estão seus arquivos .jad e .jar (seu projeto Java ME) e a SDK do Android, executar o build com o Ant e pegar o arquivo .apk gerado dentro de microemulator/microemu-android/bin . Este arquivo .apk é o seu projeto em Java ME convertido para Android, bastando instalá-lo no novo aparelho.

Em nossa empresa, foi necessário editar o projeto MicroEmulador para atender apenas a duas particularidades: obter o número de série do aparelho (IMEI) e o número do telefone do mesmo. Para isso, foi necessário editar o arquivo microemulator/microemu-android/src/org/microemu/android/MicroEmulator.java, acrescentando as linhas abaixo (adicionadas a partir da linha 158 do arquivo):


TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
System.setProperty(“imei”, telephonyManager.getDeviceId());
try {
System.setProperty(“tel”, telephonyManager.getLine1Number());
} catch (Exception e) {
System.setProperty(“tel”,””);
}

As linhas abaixo apenas adicionam as propriedades “imei” com o número de série do aparelho e “tel” com o número de telefone do aparelho. Se o aparelho estiver sem cartão SIM, será lançada uma exceção, que está sendo capturada, gerando o valor vazio (“”) para o número do telefone.

E, na aplicação Java ME que está sendo convertida, foram adicionadas as linhas abaixo logo na inicialização do aplicativo


/* Recebe o número de série e o telefone pelo MicroEmulator do Android */ ParametroSistema.NUMERO_SERIE.setString(System.getProperty(“imei”)); ParametroSistema.NUMERO_TELEFONE.setString(System.getProperty(“tel”));

Basicamente a aplicação está lendo as propriedades e alimentando os parâmetros do sistema.

Com a aplicação convertida, conseguimos fazer com que esta execute em aparelhos Android. Obviamente, foi apenas um mero port, não estamos utilizando os recursos do Android. O teclado que aparece em cada campo de texto, por exemplo, é o que está embutido na nossa aplicação, e não o do aparelho, como mostra a figura abaixo

Porém, mesmo não convertendo o código, alcançamos os requisitos desejados. A necessidade inicial da empresa era a troca imediata de aparelhos. Se tivéssemos convertido todo o código fonte para Android, provavelmente os vendedores estariam utilizando novos aparelhos apenas no ano que vem, gerando mais e mais transtornos conforme mencionado no primeiro parágrafo. Com o nosso trabalho, estes já utilizam os novos aparelhos, nos deixando tranquilos para trabalhar com calma na conversão do código fonte, incrementando seus recursos. Obviamente, esta calma irá acabar quando descobrirem do que este novo aparelho é capaz…..

obs: para garantir melhor segurança no código gerado, não tente converter códigos obfuscados.

About CarlosEduardoXP

Especialista em desenvolvimento de Sistemas Distribuídos, sempre aplicando boas práticas e padrões difundidos na comunidade. Auto didata, fanático por refatoração e performance, sempre buscando reutilização e testes automatizados cada vez mais eficazes.
This entry was posted in Software Development. Bookmark the permalink.

One Response to Convertendo aplicações Java ME para Android

  1. sandro says:

    cara que ideia genial, gostei muito, estou em uma situação parecida e nao tenho muito conhecimento em android, por mais que todos falem que o programar sabe programar em qlq linguagem, sabemos que na prática para um trabalho mais elegante é necessário um bom conhecimento de linguagem com no minimo 200 horas de programação na linguagem.. vou tentar conversa minhas aplicações simples em java para android.. vou procura alguma coisa parecida de c# para android tambem!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s