29
Desenvolvimento para dispositivos móveis JavaME Marcio Seiji Oyamada Aula 1 UNIOESTE – Universidade Estadual do Oeste do Paraná Curso de Informática Cascavel - Brasil

Desenvolvimento para dispositivos móveis JavaMEmarcio/JavaME/JavaMEAula1.pdf · – Conceituação de mobilidade e tipos de dispositivos móveis. Tecnologias e ferramentas para desenvolvimento

Embed Size (px)

Citation preview

Desenvolvimento para dispositivos

móveis

JavaME

Marcio Seiji Oyamada

Aula 1

UNIOESTE – Universidade Estadual do Oeste do Paraná

Curso de Informática

Cascavel - Brasil

IWS'2009 - Buenos AiresPage � 2

Introdução

� Ementa– Conceituação de mobilidade e tipos de dispositivos

móveis. Tecnologias e ferramentas para desenvolvimento de aplicações móveis, CLDC e CDC. Persistência e Comunicação de Dados.

� Objetivos– Capacitar o aluno a desenvolver aplicações em

dispositivos móveis utilizando a plataforma Java.

� Carga horária:– 24 horas

IWS'2009 - Buenos AiresPage � 3

Conteúdo programático

I – Mobilidade

II - Plataforma J2ME – CLDC, CDC, MIDP

III – Persistência

IV – Comunicação de Dados

IWS'2009 - Buenos AiresPage � 4

Introdução

�Plataformas Java

– J2ME (Java ME): versão Java para dispositivos móveis

• Poucos recursos

IWS'2009 - Buenos AiresPage � 5

Profiles J2ME

IWS'2009 - Buenos AiresPage � 6

Configurações- CDC

�Define a capacidade da JVM e as API que fazem parte do núcleo destas

�CDC (Connected Device Configuration)– 512 kilobytes (mínimo) de memória para execução Java

– 256 kilobytes (mínimo) para alocação em tempo de execução

– Conectividade, possivelmente persistente e em banda larga

– Ex: set-top box, sistema de navegação automotiva

IWS'2009 - Buenos AiresPage � 7

Configurações - CLDC

�CLDC – Connected limited device configuration

– 128 kilobytes memória para executar o Java

– 32 kilobytes memória para execução e alocação em tempo de execução

– Interface com usuário restrita

– Low power, normalmente usando bateria

– Conectividade, normalmente sem fio, com acesso de baixa velocidade e intermitente

– Ex: telefones, pagers

IWS'2009 - Buenos AiresPage � 8

Configurações CLDC (2)

�KVM– Implementação de referência para o CLDC

– Restrições

• Nenhum método nativo pode ser adicionado em tempo de execução. Métodos nativos são definidos em tempo de projeto na KVM

• O verificador de bytecode não implementa todas as funcionalidades (afeta a segurança)

– CLDC 1.0

– CLDC 1.1: suporte ponto flutuante

IWS'2009 - Buenos AiresPage � 9

Profiles

�É uma “extensão” de uma configuração

�Define um conjunto de APIs e bibliotecas para o desenvolvimento de aplicações em uma família de dispositivos

�MIDP: mobile information device profile– Componentes de interface com o usuário

– Entrada e manipulação de eventos

– Armazenamento persistente

– Rede e timers

IWS'2009 - Buenos AiresPage � 10

MIDP

�MIDP 2.0 (JSR118)

– Mínimo de 256 KB de ROM para o MIDP(adicionalmente ao requerido pelo CLDC)

– Mínimo de 128KB de RAM para a execução da máquina virtual

– Mínimo de 8KB de memória não volátil (dados persistentes)

– Tela de no mínimo 96×54 pixels

– Alguma capacidade para entrada de dados

– Conexão de rede, possivelmente intermitente

IWS'2009 - Buenos AiresPage � 11

Camadas Java ME

Sistema Operacional

JVM

Aplicação

Sistema Operacional

Máquina virtual – KVM

Configuração - CLDC

Profile - MIDP

Aplicação

IWS'2009 - Buenos AiresPage � 12

Aplicação Java ME

IWS'2009 - Buenos AiresPage � 13

JTWI

�Profusão de configurações, profiles e API opcionais

�Qual é a configuração básica de um dispositivo móvel?

�JTWI- Java Technology for Wireless Industry

– CLDC 1.0

– MIDP 2.0

– WMA: Wireless message API JSR 120

– Mobile Media API (se tiver som e video)

MIDLETS

IWS'2009 - Buenos AiresPage � 15

MIDlet

�Aplicações MIDP são chamadas de MIDlet

�Em ultima análise: é Java!!

�Ciclo de vida de um MIDlet

– startApp()

– pauseApp()

– destroyApp()

IWS'2009 - Buenos AiresPage � 16

MIDlet(2)

IWS'2009 - Buenos AiresPage � 17

Exemplo de MIDlet

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class AlertExample extends MIDlet {

public void startApp() {

Displayable d = new TextBox("TextBox", "Commander", 20, TextField.EMAILADDR);

Command c = new Command("Exit", Command.EXIT, 1);

d.addCommand(c);

d.setCommandListener(new CommandListener() {

public void commandAction(Command c, Displayable s) {

System.out.println(c.getLabel());

notifyDestroyed();

}

} );

Display.getDisplay(this).setCurrent(d);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

}

IWS'2009 - Buenos AiresPage � 18

Exemplo de MIDLET (1)

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class AlertExample extends MIDlet {

public void startApp() {

Displayable d = new TextBox("TextBox", "Commander", 20, TextField.EMAILADDR);

Command c = new Command("Exit", Command.EXIT, 1);

d.addCommand(c);

d.setCommandListener(new CommandListener() {

public void commandAction(Command c, Displayable s) {

System.out.println(c.getLabel());

notifyDestroyed();

}

} );

Display.getDisplay(this).setCurrent(d);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

}

Imports das APIs Midlet

IWS'2009 - Buenos AiresPage � 19

Exemplo de MIDlet(2)

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class AlertExample extends MIDlet {

public void startApp() {

Displayable d = new TextBox("TextBox", "Commander", 20, TextField.EMAILADDR);

Command c = new Command("Exit", Command.EXIT, 1);

d.addCommand(c);

d.setCommandListener(new CommandListener() {

public void commandAction(Command c, Displayable s) {

System.out.println(c.getLabel());

notifyDestroyed();

}

} );

Display.getDisplay(this).setCurrent(d);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

}

A classe deve herdar da classe MIDlet

IWS'2009 - Buenos AiresPage � 20

Exemplo de MIDlet(3)

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class AlertExample extends MIDlet {

public void startApp() {

Displayable d = new TextBox("TextBox", "Commander", 20, TextField.EMAILADDR);

Command c = new Command("Exit", Command.EXIT, 1);

d.addCommand(c);

d.setCommandListener(new CommandListener() {

public void commandAction(Command c, Displayable s) {

System.out.println(c.getLabel());

notifyDestroyed();

}

} );

Display.getDisplay(this).setCurrent(d);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

}

Métodos padrão para iniciar, pausar e finalizar a

MIDlet

IWS'2009 - Buenos AiresPage � 21

Compilando um MIDlet

�Cross-compiler: compilação em uma arquitetura e execução em outra

�No caso do JAVA: devido a portabilidade, o processo é muito semelhante a compilação de uma aplicação local

�Porém, um MIDlet utiliza classes específicas JavaME, que são diferentes das classes JavaSE

�javac –bootclasspath /midp/classes AlertExample.java

IWS'2009 - Buenos AiresPage � 22

Pré-verificação do código

�Na JVM toda classe Java é pré-verificada antes de ser carregada, para evitar ataques a máquina virtual

�A pré-verificação é complexa, e inviável de ser realizada online em dispositivos móveis

�Desta forma, os MIDlet devem ser pré-verificados em 2 passos:– Passo offline (desktop): um pré-verificador é utilizado, e adiciona

alguns dados na classe para informar a KVM que o mesmo foi pré-verificado

– Passo online (dispositivo): durante a carga da aplicação no dispositivo móvel um verificador de menor complexidade é utilizado, baseando-se nos dados gerados previamente durante a pré-verificação

• Se uma aplicação não foi pré-verificada, a execução é rejeitada

IWS'2009 - Buenos AiresPage � 23

Preverifier

�Preverifier –classpath /midp/classes;. . AlertExample

�O pré-verificador utiliza como entrada um arquivo class e gera um outro arquivo class, com o código pré-verificado

IWS'2009 - Buenos AiresPage � 24

Empacotando um MIDlet

�Um MIDlet deve ser empacotado em um arquivo JAR (Java Archive)

– Ex: jar cvmf extra.mf Test.jar Test.class

�Manifesto: arquivo contendo informações sobre o pacote

– MIDlet-1: Test, , Test

– MIDlet-Name: Test

– MIDlet-Vendor: Joao

– MIDlet-Version: 1.0

– MicroEdition-Configuration: CLDC-1.0

– MicroEdition-Profile: MIDP-2.0

IWS'2009 - Buenos AiresPage � 25

Empacotando um MIDlet(2)

�Descritor do MIDlet: arquivo do .jad– Contém informações sobre o MIDlet, porém em um arquivo separado

– Basicamente as mesmas informações sobre o MIDlet

• MIDlet-1: Test, , Test

• MIDlet-Jar-Size: 2347

• MIDlet-Jar-URL: Test.jar

• MIDlet-Name: Test

• MIDlet-Vendor: Joao

• MIDlet-Version: 1.0

• MicroEdition-Configuration: CLDC-1.0

• MicroEdition-Profile: MIDP-2.0

IWS'2009 - Buenos AiresPage � 26

Ofuscador de código

� Utilizado originalmente para complicar a tarefa de disassembler

1) Renomeação de classes, atributos e métodos para nomes mais compactos

2) Remove classes não utilizadas, métodos e atributos

3) Insere dados ilegais ou questionáveis para confundir o disassembler

� Auxilia na construção de código compacto (devido a 1 e 2)

� Utilizar somente na versão de distribuição. Durante o desenvolvimento dificultará o debug

IWS'2009 - Buenos AiresPage � 27

Instalando aplicativos

�Cabo (serial/usb)

�Infravermelho/Bluetooth

�OTA: Over-the-air

– Armazenar o midlet no servidor Web: arquivos Jar e Jad

– Configurar no servidor os tipos Jar e Jad• JAR: application/java-archive• JAD: text/vnd.sun.j2me.app-descriptor

– Acessar a página através do browser do dispositivo

IWS'2009 - Buenos AiresPage � 28

Desenvolvimento em JavaME

�Código compacto: – simplicidade

– utilizar somente as classes necessárias

�Minimizar o uso da memória– Utilizar tipos escalares

– Auxiliar o garbage collector (aponte objetos para null, quando não mais necessário)

– Instancie objetos somente quando necessário

– Libere recursos rapidamente

IWS'2009 - Buenos AiresPage � 29

Desenvolvimento em JavaME (2)

�Concentrar o processamento no servidor

�Utilizar variáveis locais

�Evitar concatenação de strings

�Utilizar threads para realizar E/S

�Sempre testar no dispositivo final!