Download pdf - Mono Graf i a Android

Transcript

Nome da RevistaVol. X, N. N, Ano YYYY

ANDROID GOOGLE UMA VISO GERAL PARA DESENVOLVIMENTO JAVA

Pedro Vtor de Abreu Anhanguera [email protected]

RESUMOO presente trabalho apresenta uma introduo ao aspectos principais para o desenvolvimento de aplicativos em Java com a plataforma Android, desenvolvida pela Google para dispositivos mveis. Palavras-Chave: Sistema Operacional Android, Google Android, Desenvolvimento Java Mobile.

ABSTRACTThis paper presents an introduction to key aspects to developing applications in Java with the Android platform developed by Google for mobile devices. Keywords: Android, Google Android, Java Mobile Development.

Anhanguera Educacional S.A.Correspondncia/Contato Alameda Maria Tereza, 2000 Valinhos, So Paulo CEP. 13.278-181 [email protected] Coordenao Instituto de Pesquisas Aplicadas Desenvolvimento Educacional - IPADE Artigo Original Recebido em: dd/mm/yyyy Avaliado em: dd/mm/yyyy Publicao: dd de mmm de 2008 1 e

2

Android Desenvolvimento Java

1. INTRODUO AO ANDROIDSegundo a agncia de telecomunicaes da ONU (U.N.T.A.), o nmero de celulares no mundo atingir em 2010 a quantidade de cinco bilhes de aparelhos habilitados e o nmero de subscries em banda larga para celulares atingir um bilho de contratos. (CBSNEWS, 2010) Assim como o mercado pessoal, o mercado mvel corporativo de celulares se incrementa com a mesma acelerao. Para abrigar estes dois nichos de mercado satisfazendo os usurios, as operadoras, os fabricantes, as empresas e os desenvolvedores surgiu o Android, a resposta do Google e da O.H.A. (Open Handset Alliance) a tal desafio. (LECHETA, 2010) O Android uma plataforma de software para dispositivos mveis, que inclui um sistema operacional Linux com diversos aplicativos embarcados e um robusto e flexvel ambiente de desenvolvimento. A seguir temos algumas de suas principais caractersticas: sistema operacional Linux kernel 2.6; . (LECHETA, 2010) mantido, desenvolvido, avalizado e padronizado pela OHA, um grupo que hoje, agosto/2010, conta com 78 grandes empresas lideradas pela Google, e composto entre outras por Motorola, HTC, LG, Sansung, Telecom Italia, Telefnica, Lenovo, Sony Ericson, Toshiba, Sharp, Sprint Nextel, China Mobile, Intel, ASUS, Acer, Dell, Texas; (OHA, 2010) rico conjunto de APIs (Application Programming Interface) e servios tais como: rica interface visual, backup e recuperao de dados, GPS, criptografia ; (ANDROID DEVELOPERS. WHAT IS ANDROID, 2010) as aplicaes rodam sobre a mquina virtual Dalvik que permite, alm de implementar programas na linguagem Java, usar cdigo nativo de fontes compiladas em C ou C++, utilizando plenamente, por exemplo, headers como: libc, libm, JNI, libz, liblog ; (ANDROID DEVELOPERS. WHAT IS ANDROID , 2010) o Android uma plataforma completamente livre, tem seu cdigo fonte aberto e uma forte e participativa comunidade, alm da OHA, o que permite aos fabricantes, ou a quem quer que seja, personalizar e customizar seus produtos, regido pela Apache Software License, 2.0 e o kernel est submetido licena GPLv2, o que permite uma absoluta flexibilidade, liberdade e abertura do mundo do desenvolvimento de dispositivos mveis. (ANDROID DEVELOPERS. WHAT IS ANDROID , 2010) possui plug-ins para os principais ambientes de desenvolvimento de software tais como Eclipse, Netbeans ou IntelliJ IDEA. O eclipse o IDE preferencial contemplado pela Google/OHA com seu plug-in denominado ADT (Andorid Development Tools) que alm de um ambiente de desenvolvimento, testes e compilao, possui um emulador com recursos de depurao neste ou em qualquer celular conectado em porta USB. (LECHETA, 2010)

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 3

2. ARQUITETURA ANDROIDO seguinte diagrama, figura 1, mostra os componentes principais do sistema operacional Android compartimentados em suas respectivas sesses.

Figura 1. Diagrama de arquitetura com os componentes principais da plataforma Android. (ANDROID DEVELOPERS. WHAT IS ANDROID, 2010)

Descreve-se a seguir, sinteticamente, cada uma das sees da plataforma conforme constam na Figura 1.

2.1.

Aplicaes chaves (Applications)O Android vem embarcado com um conjunto chave de aplicaes todas

escritas em Java, tais como: cliente de email, programa SMS, calendrio, mapas, browser, contatos, etc. (ANDROID DEVELOPERS. APPLICATION FUNDAMENTALS, 2010)

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

4

Android Desenvolvimento Java

2.2.

Framework para aplicaes (Application Framework)O Framework para aplicaes tem o objetivo de fornecer aos desenvolvedores

de aplicativos a possibilidade de construes ricas e inovadoras, para tanto prov total acesso s mesmas APIs utilizadas pelas aplicaes chaves colocadas na seo anterior. A arquitetura de aplicaes foi projetada para simplificar o reuso de componentes, por exemplo, qualquer aplicao tem a capacidade de publicar suas capacidades e qualquer outra aplicao pode, ento, fazer uso de tais capacidades. Pode o desenvolvedor, ainda, fazer livre uso de vantagens proporcionadas por drive de hardware, uso das informaes locais, rodar servio em background, configurar alarmes, adicionar notificaes para a status bar, e muitas outras coisas. (ANDROID DEVELOPERS. ANDROID APPLICATION FRAMEWORK, 2010) Servindo todas as aplicaes est presente um conjunto de servios e sistemas, que inclui: Um rico e extensvel conjunto de Views que inclui listas, grids, caixa de textos, botes e um web browser embarcado. Provedor de contedo que permite uma aplicao acessar dados de outra, ou compartilhar seus prprios dados. Um gerenciador de recursos que prov acesso a recursos extra cdigo, tais como localizar strings, grficos e arquivos de layout. Um gerenciador de notificaes que permite a toda aplicao disparar um alerta customizado na barra de status. Um gerenciador de atividades que gerencia o ciclo de vida de uma aplicao e prov uma pilha subjacente de navegao comum.

2.3.

Bibliotecas (Libraries)O Android inclui um conjunto de bibliotecas C/C++ usadas por diversos

componentes do seu sistema. Os desenvolvedores podem fazer uso destas atravs do Framework de Aplicaes descrito no item anterior. Algumas bibliotecas chaves so listadas a seguir: (ANDROID DEVELOPERS. ANDROID APPLICATION FRAMEWORK, 2010)

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 5

Bibliotecas de Sistema C implementa o sistema de biblioteca padro da linguagem C (libc), necessria para componentes embarcados do Linux. Biblioteca de Mdia baseada no pacote de vdeio do OpenCORE, esta biblioteca suporta a gravao e reproduo dos mais abrangentes formatos de udio e vdeo. Gerenciador de camadas gerencia as camadas de componentes grficos em 2D e 3D para mltiplas aplicaes. Bibliotecas para WEB uma moderna mquina de navegao web que ativa ambos, um Android Browser e views web embarcadas. SGL uma mquina para grficos 2D. Bibliotecas 3D uma implementao baseada no OpenGL ES 1.0 APIs, esta bibliotecas usam tanto a acelerao de hardware 3D, se disponvel, quanto uma alta otimizao 3D para softwares rasterizados. Free Type fonte de mapa de bits e vetores para renderizaes. SQLite um poderoso e leve banco de dados relacional disponvel para todas as aplicaes.

2.4.

Android em tempo de execuo (Android Runtime)O Android inclui um conjunto de bibliotecas chaves que prov as maiores

funcionalidades existentes nas bibliotecas chaves da linguagem de programao Java. Em vez de utilizar a soluo padro para a linguagem Java, que seria a JME (Java Micro Edition), o Google/OHA optaram por construir sua prpria mquina virtual Dalvik Virtual Machine (DVM). Cada aplicao Android roda em um processo nico com sua prpria instncia da Dalvik Virtual Machine (DVM), que foi escrita para uma grande eficincia ao rodar com mltiplas instncias prprias. A Dalvik VM executa arquivos no formato .dex (Dalvik Executable) que so otimizados para obter um uso mnimo de memria. A DVM uma mquina virtual baseada em registros e roda classes compiladas por um compilador Java que so transformadas para o formato .dex. Tais arquivos so posteriormente compactados, junto com arquivos outros como de recursos e configuraes, num nico pacote de distribuio para aplicaes, com extenso .apk. (ANDROID DEVELOPERS. WHAT IS ANDROID, 2010)

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

6

Android Desenvolvimento Java

2.5.

Dalvik Virtual MachineDiferente da maioria das mquinas virtuais e das Java Virtual Machines que

so mquinas de arquitetura em pilhas, a Dalvik VM possui uma arquitetura baseada em registros. A diferena fundamental entre estas duas arquiteturas que as mquinas em pilha devem usar instrues para carregar e manipular dados na pilha, e isto requer mais instrues que uma mquina baseada em registros implementando um mesmo cdigo de alto nvel, Java VM, por exemplo, implementa em pilha; em contrapartida as mquinas com arquitetura em registro precisam codificar a fonte e o destino nos registros, que tendem a ocupar um maior tamanho nos dados. Esta diferena muito importante para interpretadores VMs em que a expedio de opcodes so de processamento caros, alm de outros fatores relevantes para a compilao JIT, alm do que a Dalvik Virtual Machine (DVM) baseia-se no kernel do Linux para obter funcionalidades subjacentes, tais como gerenciamento de threads e de memria. Uma ferramenta chamada dx usada para converter parte de um arquivo Java.class para o formato .dex, mltiplas classes so includas em um simples arquivo .dex. Strings duplicadas e outras constantes usadas em mltiplas classes so includas apenas uma vez num arquivo .dex com objetivo de poupar espao; um arquivo .dex no compactado normalmente menor que o equivalente Java compactado, .jar. Alm disto a Dalvik VM teve seu tamanha reduzido para economizar espao de implantao, todos os seus ndices so fixos em 32 bits para agilizar e simplificar a interpretao, ele usa seu prprio bitcode, baseado na implementao Java Harmony da Apache, e no o do Java, e por fim a mquina Dalvik foi projetada para rodar mltiplas instncias dela prpria de uma maneira muito eficiente. (DALVIK, 2010)

2.6.

O Ncleo do Linux (Kernel Linux)O Android se estrutura sobre o Linux verso 2.6 onde obtm servios chave

do sistema operacional, tais como: segurana, gerenciamento de memria, gerenciamento de processos, pilha de rede e modelagem de drives. O ncleo do Linux tambm permite obter uma camada de abstrao entre o hardware e todos os componentes de software. (ANDROID DEVELOPERS. WHAT IS ANDROID, 2010)

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 7

3. NVEIS DE DESENVOLVIMENTOPor se tratar, a plataforma Android, de um software livre e de cdigo aberto, baseado no ncleo do Linux e possuir um framework e mquina virtual para rodar programas em Java, a possibilidade bvia de construo de aplicativos e sistemas em trs nveis de desenvolvimento se faz presente, a saber: Edio do cdigo fonte. Programao em linguagem nativa C/C++. Programao em Java utilizando o framework de aplicaes. A seguir uma breve descrio de cada um destes tpicos. Na prxima seo iniciaremos a abordagem do desenvolvimento Java que o tema principal deste trabalho.

3.1.

Edio do cdigo fonte.Sendo o Android uma plataforma de cdigo aberto construda sobre a licena

e sistema GNU/Linux, seu cdigo fonte est acessvel a qualquer pessoa, que poder modific-lo e criar sua prpria plataforma Android, ou ser um participante ativo da comunidade de desenvolvedores auxiliando a corrigir erros de cdigo ou construindo novos aspectos do mesmo. O cdigo fonte que tem cerca de 2Gb de tamanho, a pgina de repositrio web a http://android.git.kernel.org/ sob gerenciamento do sistema de verses Git, que prov o cdigo fonte do ncleo Linux, framework, bibliotecas, aplicaes, devices e recursos. Os cdigos fonte esto escritos em C/C++ e Java, e necessria uma mquina Unix/Linux para sua total compilao. (ANDROID OPEN SOURCE PROJECT, 2010) Desenvolver utilizando o cdigo fonte a maneira mais complexa das trs possibilidades e, normalmente, restrita a desenvolvedores da comunidade ou fabricantes de hardware. (BRIGHT HUB,2010)

3.2.

Programao em linguagem nativa C/C++O Android prov um kit de desenvolvimento nativo NDK (Android Native

Development Kit) que acompanha e complementa o kit de desenvolvimento padro SDK, com o objetivo de desenvolver partes crticas de uma aplicao em cdigo nativo em C/C++, este kit foi desenvolvido para uso conjunto com o Android SDK.

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

8

Android Desenvolvimento Java

Basicamente o NDK prov: (ANDROID DEVELOPERS. NATIVE DEVELOPMENT TOOLS, 2010) Um conjunto de ferramentas para construir bibliotecas nativas C/C++. Um caminho para embutir tal biblioteca nativa dentro de um pacote de aplicaes (.apk) Um conjunto nativo de bibliotecas e arquivos header que sero suportadas em todas as futuras verses da plataforma Android, a partir da 1.5. Documentaes, exemplos e tutoriais.

3.3.

Programao Java utilizando o framework de aplicaes.A programao para aplicativos Android se concentra absolutamente no

desenvolvimento baseado na linguagem Java, raramente acrescidos de cdigo nativo em C ou C++. Tal desenvolvimento utiliza intensamente dos recursos oferecidos pelo framework para aplicaes, muitos destes totalmente escritos em Java. Portanto, trataremos com mais extenso do desenvolvimento Java a partir da prxima seo.

4. DESENVOLVIMENTO EM JAVAA seguir descrevem-se as caractersticas bsicas para o desenvolvimento de aplicativos em linguagem de programao Java, separando-as em tpicos distintos, como segue.

4.1.

Configurando Ambiente e IDE (Eclipse)

Para o desenvolvimento em Java de uma aplicao Android deve-se ter um ambiente mnimo configurado que o SDK (Standard Development Kit), o software para desenvolvimento que prov a API das classes Java necessrias, ferramentas utilitrias e um emulador para simular um celular genrico com vista a testes e experimentos. Alm deste ambiente mnimo possvel carregar um plug-in para o IDE Eclipse que permite integrar no seu ambiente desenvolvimento o emulador, ou ainda um celular real e especfico via carga de um drive USB para o celular em questo. O SDK e os demais complementos esto aptos aos seguintes sistemas operacionais: Windows XP ou superior, MAC OS X10 ou superior, Linux. (ANDROID DEVELOPERS. INSTALLING THE SDK, 2010) A seguir os passos bsicos instalao de cada aspecto supra colocado:

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 9

JDK: deve estar instalado o kit de desenvolvimento Java JDK 5 ou JDK 6 e configuradas corretamente as variveis de ambiente PATH e JAVA_HOME, apenas a JRE (Java Runtime Enviroment) no suficiente. SDK: para instalar o SDK, verso r7, basta baix-lo em http://developer.android.com/sdk descompactando em um diretrio desejado, que contm vrias pastas e em especial trs, a saber: tools: contm ferramentas utilitrias e o emulador. Deve-se apontar a varivel de ambiente path com este diretrio. Maps. add-ons: pacotes externos Java do Android, por exemplo a API Google

platforms: armazenar as diversas plataformas do sistema Android e estas devem ser baixadas separadamente. (prximo item) Plataformas: As diversas plataformas, ou uma especfica desejada, devem ser baixadas para o diretrio platforms, para tanto utilize o aplicativo Setup.exe na pasta tools do SDK, e escolha a(s) verso(es) desejadas. Verses do Android: cada verso do Android possui um cdigo identificador (API Level), correspondente a cada plataforma as mais utilizadas so as 1.5, 1.6, 2.1 e 2.2, como segue: (LECHETA, 2010) o o o API Level 1: Platarfoma Android 1.0 API Level 2: Platarfoma Android 1.1 API Level 3: Platarfoma Android 1.5, esta uma plataforma bsica e muito utilizada (o Android Developer Challenge a prescreve como padro) API Level 4: Platarfoma Android 1.6 API Level 5: Platarfoma Android 2.0 API Level 6: Platarfoma Android 2.0.1 API Level 7: Platarfoma Android 2.1 API Level 8: Platarfoma Android 2.2 E sucessivamente para as prximas plataformas.

o o o o o o

Google Maps: ao carregar uma plataforma, via setup.exe, a API do Google Maps ser inserida na pasta add-ons. (cdigo proprietrio Google) Driver USB: ao carregar uma plataforma, via setup.exe, um repositrio de drivers ser carregado na pasta usb_driver, pode ser necessrio baixar o drive de um fabricante de hardware especfico. Eclipse: baixe uma verso do Eclipse, 3.4 ou maior, descompacte-a no diretrio desejado. Plug-in ADT Eclipse: abra o eclipse, eclipse.exe na pasta em que foi descopmpactado, e no menu help->install new software->add insira o diretrio https://dl-ssl.google.com/android/eclipse/ e instale o ADT. (atualmente na verso ADT 0.9.8) NDK: para desenvolvimento de cdigo nativo em C/C++ deve-se baixar o NDK, hoje na verso 4rb, conforme colocado no item 3.2, pode ser baixado no link http://developer.android.com/sdk/ndk/index.html

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

10 Android Desenvolvimento Java

4.2.

Diretrios e arquivos de projeto.

Como a utilizao do IDE Eclipse se tornou um padro para o desenvolvimento Android vamos focar na estrutura de projeto gerado pelo seu plug-in ADT. Obviamente, podemos desenvolver o projeto utilizando um simples editor de texto, neste caso teramos que ignorar a classe R.java e apontar os recursos diretamente via cdigo, perderamos os recursos de depurao e do emulador integrados no ambiente. Aps, no Eclipse, efetuar File->New->Other->Android->Android Project e no caso da figura 2 abaixo, criado o projeto de.vogella.android.temperature por L. Vogella (VOGELLA,2010), obtemos a seguinte estrutura de diretrios e arquivos:

Figura 2. Estrutura tpica de um projeto Android (VOGELLA,2010)

Notamos cinco pastas principais, que so: pacotes. src: pasta que contm as classes Java do projeto em seus respectivos

gen: contm a classe Java para atribuies de recursos, a classe R.java, que gerenciada pelo ADT do Eclipse, e aponta como atributos os recursos especificados na pasta res e suas subpastas. Android x.x: Contem o arquivo .jar da plataforma utilizada. customizada. assets: contem arquivos extras ao projeto, por exemplo uma fonte

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 11

res: pasta de recursos da aplicao, possui trs sub-pastas: drawable, layout, values, como segue: drawable: armazena recursos de imagens, para os trs padres de resoluo de tela existentes no mercado: ldpi, mdpi, hdpi. A resoluo setada automaticamente conforme o hardware utilizado, por isto existem as trs pastas drawable: drawable-ldpi, drawable-mdpi e drawable-hdpi cada uma com as imagens na resoluo apropriada. layout: contm os arquivos de construo de tela, quando em XML. values: contem arquivos XML simples, apenas chave=valor, utilizados para internacionalizao, apontamento de strings, cores e outras configuraes.

Alm das pastas supra colocadas, encontramos no diretrio raiz, dois arquivos: AndroidManifest.xml: o arquivo principal do projeto, centraliza e configura todos os parmetros e configuraes do projeto. Default.properties: arquivo gerado automaticamente pelas ferramentas android e seta propriedades bsicas do projeto, tais como a plataforma alvo.

Alm destes cabe citar, como exemplo, os seguintes arquivos em suas respectivas pastas: /res/layout/main.xml: arquivo para uma View bsica em XML, que pode ser alterado, eliminado e substitudo. /res/values/string.xml: arquivo bsico para atribuio de Strings utilizadas no aplicativo, que podem ser facilmente internacionalizadas. Nota sobre o Eclipse: os arquivos e artefatos sob os diretrios layout e values so gerenciados e acessveis ao programador pelo SDK Android no Eclipse de duas maneiras: diretamente via XML ou via um editor grfico (rich editor), totalmente intercambiveis entre si. /gen/R.java: arquivo com a classe R com atributos de constantes de recursos, todo arquivo sob a pasta res apontada automaticamente por esta classe como uma constante com um id nico, no deve ser manipulada diretamente pelo desenvolvedor.

4.3.

Ciclo de vida de uma aplicao e a classe Activity.De vrias maneiras cada aplicao vive em um mundo exclusivo, porm com

possibilidades imensas de compartilhamento com e de outras aplicaes, por exemplo: Toda aplicao roda em seu prprio processo Linux Android, que inicia um processo quando cada aplicao precisar ser executada e termina este processo quando no for mais necessria, ou quando os recursos do sistema so requisitados por uma outra aplicao. Cada processo tem sua prpria mquina virtual, o que conduz a um isolamento do bitcode entre todas as aplicaes. Por default, cada aplicao apontada a um nico ID de usurio Linux, ou seja a aplicao, seus recursos e arquivos so visveis a ela prpria e apenas ao ID do usurio, no entanto possvel compartilhar o mesmo ID do usurio entre duas

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

12 Android Desenvolvimento Java

aplicaes desde que se mantenha um processo Linux nico e compartilhem a mesma mquina virtual. O aspecto central das aplicaes Android que uma aplicao pode fazer uso de elementos de outras aplicaes, desde que estas o permitam. Importante notar que todas as aplicaes so armazenadas em uma pilha e s a ltima a visvel, podendo outras ou estarem pausadas ou rodando em segundo plano. Segundo a documentao do Andoid existem trs nveis aninhados que definem o ciclo de viga de uma aplicao dentro de uma classe Activity ou suas derivadas, coloca-se a seguir a classe Activity e os respectivos nveis de ciclo de vida: A ClasseActivity: a classe android.app.Active representa uma tela de aplicao, similar, por exemplo, ao JFrame do Swing. Toda aplicao que seja uma interface com usurio derivada da classe Active. Alm da tela da aplicao, onde sero inseridos diversos objetos da classe View, a classe Active ainda faz o controle do estado da aplicao, a passagem de parmetros entre aplicaes, definio de mtodos vinculados a eventos, a outras particularidades gerenciais e ao ciclo de vida da activity. Uma activity deve ser sempre registrada no aquivo AndroidManifest.xml Entire lifetime: ciclo de vida completo entre o incio e a destruio, na pilha, da aplicao. Este ciclo iniciado pelo mtodo onCreate() e finalizada pelo mtodo onDestroy(). Este sub-ciclo de vida ocorre apenas uma vez. Visible lifetime: ciclo de vida visvel, este sub-ciclo ocorre entre os mtodos onStart e s onStop, a Activity pode estar visvel ou rodando em segundo plano. Este ciclo fechado e recorrente e se d na ordem onStart()-> onResume()-> onPause()-> onStop()-> onRestart()-> onStart() que pode se repetir por indefinidas vezes. Foreground lifetime: ciclo de vida em primeiro plano, a activiy est no topo da pilha, interagindo e visvel ao usurio. um ciclo fechado e recorrente apenas com os mtodos onResume() -> onPause()-> on Resume(). Um exemplo seria uma aplicao que ao atender um telefonema chama onPause() e ao final do telefonema chama onResume(), permitindo tomar aes que previnam, por exemplo, perda de dados. O sistema operacional controlar o ciclo de vida de uma aplicao. A qualquer tempo o Android poder parar ou destruir uma aplicao. H vrios mtodos que podem, e alguns devem, ser implementados na Classe derivada de Activity para controlar o ciclo de vida da aplicao: (ROGER,2009) onCreate(bundle) um mtodo obrigatrio e chamado uma nica vez no incio da aplicao. Neste mtodo deve-se chamar o mtodo setContentView(view) que exibe uma view na tela. O objeto bundle da classe android.os.Bundle utilizado como um Hash Table que pode ser utilizado como um objeto de transferncia de parmetros entre Activities. onStart() deve ser sempre chamado aps o mtodo onCreate() ou onRestart() para iniciar ou reiniciar o ciclo de vida Visible lifetime.

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 13

onResume() deve ser sempre chamado aps onStart() e coloca a aplicao no foreground lifetime. O mtodo onResume() representa a Activity em seu estado funcional. onPause() ser chamado quando de uma interrupo qualquer, seja diretamente do sistema operacional, como uma ligao telefnica por exemplo, ou se uma uma Intent seja processada, aplicao entrar em pausa mas se manter no topo da pilha. A aplicao poder ser retomada pelo mtodo onResume(). onSaveInstanceState() chamado quando uma Activity parada, utilizado para salvar os dados para que a Activity possa restaurar seu estado se e quando for reiniciada. onStop() ser chamado se a aplicao for encerrada ou sobreposta na pilha por outra aplicao. A aplicao poder ser reiniciada pelo mtodo onRestart(). onDestroy() ser chamado no encerramento, retirada da pilha, de uma aplicao. Pode ser chamado pelo sistema operacional ou pelo mtodo finish() da classe Activity.

Figura 3. Ciclo de vida de uma Activity

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

14 Android Desenvolvimento Java

4.4.

Classes bsicas.Service, BroadcastReceiver,

Alm da Activity outras como Context View,

ContentProvider, ListActivity e Intent so consideras classes chave de uma aplicao Android. A seguir colocada uma breve descrio de cada uma destas classes, como segue: (ANDROID DEVELOPERS. APPLICATION FUNDAMENTALS) Context: a classe android.content.Context uma classe raiz que prov a conexo direta com o sistema operacional Android. O seu mtodo getSystemService permite receber um objeto de gerenciamento dos diferentes setores de hardware. As classes bsicas Activity, Services e BroadcastReceiver se estendem da classe Context, ou seja, podem-se acessar os mtodos de Context diretamente destas outra classes vias this. View: a classe android.view.View representa os objetos grficos que devem ser inseridos na classe Activity, normalmente atravs do mtodo Active.setContentView(view), alm de objetos convencionais tais como botes, checkbox, labels, imagens, etc, a classe View poder prover um mecanismo de gerenciamento de layout onde poder se agrupar vrios conjuntos de views organizadamente. Service: a classe android.app.Service no possui, necessariamente, uma interface visual como a Active, e pode rodar em segundo plano por tempo indefinido. Todo servio derivado da classe Service. Normalmente um servio iniciado por um componente BroadcastReceiver. Servios so atividades que rodam em segundo plano sem uma interface com o usurio. A plataforma Android prov um conjunto de servios pr-definidos, usualmente expostos via uma classe de gerenciamento. BroadcastReceiver: a classe android.content.BroadcastReceiver utilizada para reagir a um evento enviado pelo sistema operacional, ou indiretamente reagindo a uma Intent iniciada por outra aplicao. Reaes possveis so, por exemplo, a ativao de uma nova Activity, um servio ou uma notificao ao usurio. Intent: a classe android.content.Intent responsvel pelo centro de integrao de todo o sistema Android provendo a mensagem para que algo seja realizado, de uma aplicao para o sistema operacional. Por exemplo a aplicao chama via uma Intent uma aplicao de contatos. Uma aplicao registra a si prpria via IntentFilter no arquivo AndroidManifest.xml. Dois mtodos da classe Activity so utilizados para enviar um objeto Intent para o sistema operacional: startActivity(intent) e startActiviyForResult(intent), o primeiro simplesmente envia uma inteno ao sistema, por exemplo abrir uma nova Activiy/Tela, o segundo alm disto recupera um valor de retorno desta chamada. ListActivity: a classe android.app.ListActivity se estende da classe Activity e simplifica a exposio e gerenciamento de vrios objetos numa lista.

4.5.

O arquivo AndroidManifest.xml

Cada aplicao deve ter um arquivo AndroidManifest.xml no seu diretrio raiz. Este arquivo no formato xml prov informaes essenciais da aplicao para o sistema

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 15

operacional que devem ser lidas antes de rodar qualquer cdigo, entre outras coisas este arquivo estabelece os seguintes quesitos principais: O nome do pacote Java para a aplicao. Descreve os componentes da aplicao: Activities, Services, Broadcast Recivers e Content Providers, nomeando as classes que implementam tal componente e provendo capacidades interativas de resposta, permitindo ao ANDROID saber em que condies tal aspecto deve ser disparado. Determina quais processos sero compartilhados. Declara as permisses e proteo da aplicao e suas partes, e sua interao com as APIs e as demais aplicaes. Declara um nvel mnimo requerido para a API Android. Pode implementar uma lista de instrumentao de classes auxiliares para a fase de desenvolvimento e testes. Lista as bibliotecas que a aplicao precisa estar ligada. Os componentes chave de uma aplicao, tais como: Activities, Services, Broadcast Receivers, so ativados por um objeto Intent que possui um conjunto de informaes descrevendo para o Android a ao desejada e os dados vinculados. O elemento tag colocada dentro dos componentes chave que permite que o Android reconhea qual componente deve ser utilizado para responder a um objeto Intent, dentro desta tag pode ser definida o tipo de android.intent.action a ser respondida, bem como estabelecer uma categoria aplicada em android.intent.category, por exemplo os atributos MAIN e LAUNCHER, respectivamente que permitiriam a uma activity iniciar sem dependncias de outras e estar presente na tela de aplicativos do aparelho. (ANDROID DEVELOPERS. THE ANDROID MANIFEST.XML FILE)

4.6.

Interface com o usurio.A interface grfica de usurio definida via classes Activity e organizada

atravs de layouts. O Layout define o elemento de interface com usurio, suas propriedades e suas caractersticas grficas. Um layout pode ser definido via um arquivo XML ou via cdigo Java em tempo de execuo, o padro de desenvolvimento sugerido pelo Android Developer prioriza o uso do XML em vez de cdigo Java, seu objetivo separar o mximo possvel o aspecto visual da regra de negcio, no entanto tal posio deve render-se a necessidade de se ter ou no um layout fixo com o uso do XML, ou um dinmico com o uso do cdigo Java. As duas maneiras de codificar podem ser misturadas e dosadas em uma mesma aplicao conforme a necessidade e o sentimento do programador. Toda interface grfica montada em forma de rvore

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

16 Android Desenvolvimento Java

por Views/Widgets e ViewGroups/LayoutObjects, onde o n raiz deve ser chamado pelo mtodo setContentView() da Activity. (ANDROID DEVELOPERS. USER INTERFACE, 2010)

Figura 4. Estrutura em rvore tpica de uma inteface grfica (ANDROID DEVELOPERS. USER INTERFACE, 2010)

ViewGroups ou LayoutObjects: a seguir alguns exemplos: o FrameLayout: o mais simples objeto de layout, um espao em branco onde pode ser inserido um simples objeto, por exemplo uma imagem. Um uso interessante deste layout seu acoplamento com a classe android.widget.ScrollView, que permite a rolagem na tela. LinearLayout: alinha todos os objetos filhos em uma s direo, horizontal ou vertical, conforme a definio do atributo orientation. Tablelayout: posiciona os objetos filhos, views ou ViewGroups em uma tabela de linhas e colunas. Relativelayout: posiciona os objetos filhos entre eles prprios AbsoluteLayout: permite posicionar os elementos atravs de coordenadas absolutas no plano x,y.

o

o o o

Views ou widgets so so componentes simples derivados da classe View, e servem para interao com o usurio, tais como: Button, ImageView, TextView, CheckBox, EditText e outros. Obviamente possvel tanto customizar quando criar novos objetos com estas caractersticas, seja estendendo a classe View ou os prprias classes pr-definidas. Eventos: uma vez inserido um layout e neste outros layouts ou alguns views, para se obter a informao de um evento iniciado pelo usurio existem trs caminhos: o Definir um event listener e registr-lo numa View, esta maneira corrente de ouvir eventos, as classes View possuem uma coleo de interfaces do tipo OnListener

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 17

que contm um mtodo callback com nome On() onde pode-se definir a ao desejada relativa ao evento. o o Sobrecarregar um mtodo callback existente, usado para view customizadas onde se deseja posicionar a forma do evento. Alguns objetos podem definir um evento apontando um mtodo Handler a partir do layout em xml, botes por exemplo.

Menus: o uso mais comum de menus numa aplicao para ativar funes e configuraes da mesma, isto normalmente feito atravs do boto menu do aparelho, mas tambm pode ser feito por menus de contexto quando o usurio pressionar algum item. Os menus tambm so estruturados usando a hierarquia de View, mas sem uma definio fixa, para este propsito devem ser definidos os mtodos callback onCreateOptionsMenu() ou onCreateContextMenu() para a respectivia Activity e declarar os itens que se deja inculi nos menus. Estilos e Temas: um estilo um conjunto de formataes, tais como cores, fontes, que pode-se aplicar a uma unidade individual que pertena ao layout. Temas um conjunto de com um ou mais atributos de formatao que pode ser aplicado a uma ou todas as Activities de uma aplicao. Ambos so mantidos em arquivos xmls semelhantes ao css do html. Notificao: a classe android.app.Notification, utilizada para enviar e interagir com o usurio atravs da colocao de uma notificao na barra de status do aparelho, chamando a ateno do usurio para a mesma. Alertas: a classe android.widget.Toast utilizada para exibir alertas com uma durao especfica para o usurio.

4.7.

Persistncia de dados e provedores de contedo.O Android possui dois escopos distintos de informaes, um pblica

acessvel a todas as aplicaes o Provedor de Contedo (Content Provider), e outro atravs da persistncia de dados privativos aplicao, este ltima possui trs formas para persistncia de dados: arquivos, um hasch table chamado persistncia e um banco de dados leve, o SQLite., segue uma breve descrio sobre os mesmos: (LECHETA, 2010) Arquivos: cada arquivo criado por uma aplicao s pode ser utilizado pela mesma e armazenado na pasta /data/data/pacote/arquivo. Para a criao dos arquivos a classe base do Android a android.content.Context possui mtodos especficos de criao, abertura e fechamento de arquivos. Para a manipulao destes basta utilizar as classes Java convencionais do pacote java.io Preferncias: a classe android.content.SharedPreferences trabalha como uma Hash Table, um conjunto de chave e valor para tipos primitivos que podem ser persistidos para a aplicao mesmo que esta seja retirada da pilha de aplicaes. Uma boa opo para persistir de forma simples uma quantidade pequena de dados.

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

18 Android Desenvolvimento Java

Banco de dados: o Andoid possui nativa e integradamente um leve e pleno, banco de dados, o SQLite. Outros bancos de dados, igualmente, podem ser utilizados, de preferncias arquiteturas leves como os bancos puro Java, por exemplo o HSQLDB, para tanto basta baixar o respectivo jar e incluir no caminho das bibliotecas utilizando o JDBC , por exemplo, para sua administrao. Tomando como foco o banco nativo, o SQLite, pode-se criar um banco de dados de duas formas distintas, atravs de ferramentas cliente livres, tais como SQLiteExpertPersonal, ou via cdigo Java utilizando a API do Android. Normalmente vantajoso criar o banco diretamente no cdigo, pois tal aspecto fica vinculado completamente aplicao. A classe android.database.sqlite.SQLiteOpenHelper prov todos os aspectos necessrios para criao de um banco de dados, basicamente passando ao seu construtor, alm das informaes de descritivas, um array de string contendo um script SQL padro, que sero processadas linha a linha pelo mtodo execSQL(scriptSQL[i]). A classe android.database.sqllite.SQLiteDatabase a classe principal para manipulao de dados, a seguir alguns mtodos teis da mesma: (ANDROID DEVELOPERS. DATA STORAGE, 2010) o openOrCreateDatabase(String name,int modo,CursorFactory cursor): utilizado para abrir ou criar um banco de dados, com opo de se criar um cursor de busca personalizado. insert(tableName, nullColumHack, values) : insere um registro na tabela tableName usando um String, nullColumHack uma coluna opcional para que um registro no seja completamente nulo, e values um objeto de android.content.ContentValues que como j vimos funciona como um Hash Table com as chaves como colunas. update(tableName, values, where, whereArgs[]): atualiza um registro, tableNames e values so iguais os definidos para insert(), where uma String com a clusula where utilizada para identificar o registro e whereArgs um array de Strings que contero parmentros definidios em where com um ?, como utilizado em JDBC. delete(tableName,where,whereArgs[]): apaga um registro, os parmetros so os mesmos esclarecidos em update(). query(boolena distinct, String tableName, String colums[],String selects[],String selectArgs[],String groupBy,String orderBy): retorna um objeto android.database.cursor que similar a um resultSet do JDBC, que permite percorrer e retornar todos os valores selecionados, os parmetros so os mesmos definidos em um comando select em SQL, com exceo de que se columns for um null retorna todas as colunas e selectArgs[] um array de Strings que contero parmentros definidos em where com um ?, como utilizado correntemente em JDBC.

o

o

o o

Cursor: esta classe permite navegar e retornar valores como um resultSet em JDBC aps uma consulta query(), alguns mtodos teis: o o getCount(): retorna o nmero de registros da consulta. moveToFirst(): posiciona o cursor no primeiro registro da consulta.

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 19

o

moveToNext(): move para o prximo registro, retorna false caso no exista e true caso contrio, e outros mtodos move semelhantes como: moveToLast(), moveToPosition(pos), moveToPrevious() getLong(i), getString(i), etc.: retorna os valores pelo ndice do registro do cursor. getColumIndex(Table.Colums): retorna o ndice da coluna. close(): fecha o cursor, desnecessrio caso a Activity o gerencie.

o o o o

Provedores de contedo: a classe android.content.ContentProvider usada para prover dados de uma aplicao para outra, ela no armazena dados, tarefa delegada a arquivos,preferncias ou banco de dados, mas prov uma interface para outra aplicao acessar dados da aplicao a qual pertence. A classe android.net.Uri utilizada em conjunto com a ContentProvider para identificar uma informao, registro(s) ou arquivos, com uma nica e amigvel String, que tem o formato: prefix://authority/path/Record/[ id], dois exemplos de uso comum: content://com.android.contacts/contacts/1 retorna um objeto Cursor com o contato cadastrado no celular com id=1, content://com.android.contacts/contacts retorna um Cursor com todos os contatos do celular, isto mostra que a aplicao contacts estende a classe ContentProvider e , ento, um provedor de contedo.

4.8.

GPS, localizaes e Mapas.O Android totalmente integrado com o Google Maps e possui recurso

nativo para GPS (Global position System), o que permite com muita facilidade construir aplicativos integrando tais aspectos. O pacote com.google.android.maps inclui todas as classes para utilizao de mapas, tal pacote deve ser baixado separadamente da plataforma Android pois seu cdigo no aberto e pertence a Google que define uma licena especfica para sua utilizao. Duas permisses devem estar no AndoridManifest.xml, android.permission.ACCES_FINE_LOCATION e .INTERNET para aplicativos que usem, respectivamente, GPS e Google Maps, bem como obter uma chave para uso deste ltimo, baseado no certificado digital da aplicao, que pode ser gerado pelo Eclipse. Toda classe que usa um mapa deve ser derivada da com.google.android.maps.MapActivity e sua view gerada por um objeto da classe MapView. A implentao para o GPS segue outro caminho, basta a qualquer Activity implementar a inteface LocationListener e o mtodo onLocationChanged(location) ser chamado sempre que a localizao for alterada. (LECHETA, 2010)

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

20 Android Desenvolvimento Java

4.9.

Multimdia.

A API Android possui suporte nativo de encoding/decoding para uma variedade de tipos de mdia, por exemplo, para Audio: mp3, midi, 3gp, ogg, m4a, wav, para Vdeo: mp4 e 3gp; a classe android.media.MediaPlayer prov recursos para tais tarefas seja lendo ou gravando arquivos ou stream de mdia. A classe android.media.MediaRecorder utilizada para gravao ou captura de udio e vdeo atravs do aparelho celular. (ANDROID DEVELOPERS. AUDIO AND VIDEO, 2010)

4.10. Classes e estruturas teisA seguir descreve-se algumas classes que so muito teis para o sistema Android: AlarmManager: a classe android.app.AlarmManager permite agendar que uma aplicao seja chamada por um objeto Intent pelo sistema operacional em uma data e hora especficos, tal chamada ser nica ou repetida vrias vezes durante um determinado perodo de tempo. (LECHETA, 2010) Handler: a classe android.os.Handler permite agendar uma mensagem android.os.Message ou um Java.lang.Runnable para ser enviada ou executada em um determinado tempo futuro, ou para serem processados em uma thread diferente da atual. (LECHETA, 2010) Grficos: Grficos Android so providos por uma poderosa biblioteca grfica 2D customizada, ou pela biblioteca OpenGL ES1.0 para altas performances em grficos 3G. No caso de aplicaes grficas 2G dois aminhos so possveis: desenhar sua aplicao grfica ou animao dentro de um objeto View, ou desenhar diretamente para um objeto Canvas, a primeira deve se dar para aplicaes estticas e a segunda para dinmicas. (ANDROID DEVELOPERS. GRAPHICS, 2010) App Widges: so aplicaes visuais pequenas que podem ser embutidas em outras aplicaes, como a da tela Home, por exemplo. Comunicao com um servidor: a comunicao com um servidor remoto pode se dar atravs dos protocolos: sockets, http ou web services. Para uso de comunicao com internet duas particularidades devem ser colocadas: a permisso de uso de internet pela aplicao no arquivo AndroidManifest.xml atravs da tag dentro do elemento aplicao, e o uso de uma thread separada para esta utilizao, isto evita o travamento da tela enquanto o processo de comunicao ocorre, usando uma thread separada, alm de implementar a interface Runnable deve-se utilizar um objeto Handler para ter acesso a tela/Activity atual. A seguir algumas questes especficas aos protocolos: (LECHETA, 2010) o Sockets: usando a classe Java tradicional java.net.Socket possvel comunicar-se remotamente, via internet ou blutooth, a uma aplicao num servidor que esteja a espera uma conexo atravs de uma porta especfica. Http: o protocolo de comunicao http pode ser utilizado para comunicar-se com um servidor web via internet, onde o

o

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 21

aplicativo do celular se comportar como um cliente convencional. As requisies se do atravs de post e get da mesma forma que um aplicativo cliente Java convencional. A classe para utilizao dos recursos do protocolo http a convencional Java java.net.HtppUrlConnection, mas o Android vai alm e incorpora nativamente tambm a biblioteca HttpClient da Jakarta Apache o que prov a possibilidade de manipulao de requisies complexas que envolvam autenticaes de segurana. o Web services: para construo de um cliente para web services conveniente o uso de um framework especfico que possua as atribuies de criao e manipulao de um objeto SOAP para manipulao de comunicao xml via transporte http. Um framework indicado o org.ksoap, alm disto uma bibioteca de manipulao bsica de xml faz-se necessria, como por exemplo org.xmlpull para derivao de objetos de exceo.

Bluetooth: a plataforma Android inclui suporte para comunicao utilizando bluetooth atavs do pacote android.bluetooth, sua API permite: encontrar outros aparelhos com bluetooth, estabelecer canais de rdio frequncia RF COMM, conectar com outros aparelhos atravs de servio de busca, transferir dados de e para outros aparelhos, gerenciar conexes mltiplas, etc. (ANDROID DEVELOPERS. BLUETOOTH, 2010) Telefonia e SMS: as classes do pacote android.telephony provm mecanismos de manipulao telefnica e de mensagens SMS, no Android uma aplicao no precisa estar em primeiro plano, nem mesmo ativa, para ser ativada ao receber um telefonema ou um SMS, para tanto se faz uso de um objeto da classe BroadcastReceiver. Como sempre permisses especficas devem ser colocadas no AndroidManifest.xml para permitira que uma aplicao possa utilizar tais recursos como, por exemplo, a android.permission.CALL_PHONE que habilita a uma aplicao o privilgio de fazer uma ligao telefnica.. (LECHETA, 2010) Buscas: o Android possui um framework especfico para buscas que incorpora todos os aspectos da plataforma, isto permite ao usurio sem interroper a Activiy atual, que est no topo da Activity Stack, empreender buscas de quaisquer dados seja no prprio aparelho ou na intenet. (ANDROID DEVELOPERS. SEARCH, 2010) Log: o Android direciona a sada System.out para a pasta dev/null em vez de para o console, para verificao em console use a classe android.util.Log, similar a Log4J da Jakarta. Para visualizar basta abrir no console a janela LogCat. (LECHETA, 2010)

4.11. Construindo e distribuindo uma aplicao. altamente recomendado o uso do IDE Eclipse em conjunto com o plugin ADT para o desenvolvimento, depurao, testes e empacotamento de uma aplicao Android, no entanto, a mesma poderia ser desenvolvida como qualquer aplicativo Java, ou em outro IDE ou at mesmo num simples editor de texto, sem o Eclipse/ADT ser necessrio manipular algumas ferramentas providenciadas pelo SDK Android, como:Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

22 Android Desenvolvimento Java

android: para criar e atualizar projetos Android e para criar, mover ou apagar AVDs. Android Emulator: para rodar uma aplicao Android em um emulador em uma das verses da plataforma Android. Android Debug Bridge: ferramenta ponte entre aplicao e o emulador ou com um dispositivo conectado via usb. Alm destas ferramentas providas pelo Android SDK, ser necessrio ainda:

Ant: ferramenta em Java para mltiplas funcionalidades, neste caso utilizada para compilar, construir e empacotar um projeto em um arquivo instalvel *.apk. arquivo .apk Keytool: para gerar uma chave particular para assinar digitalmente o Jarsigner: para assinar .apk gerada por Keytool. zipalign: ferramenta utilizada para otimizao final, aps aiinatura digital, do pacote .apk V-se que a quantidade de ferramentas individuais necessrias para criar uma aplicao significativa, todas elas esto integradas no ambiente Eclipse/ADT. O sistema Android usa um certificado assinado digitalmente para identificar o autor de uma aplicao, toda aplicao deve ser assinada, o sistema no instalar uma aplicao sem assinatura. Os seguintes passos so recomendados como uma checklist antes de se distribuir uma aplicao: (ANDROID DEVELOPERS. PREPARING TO PUBLISH, 2010) Antes de considerar uma aplicao pronta para o uso: 1. Teste a aplicao extensivamente no dispositivo atual. 2. Considere adicionar uma licena de uso para ser aprovada pelo usurio. 3. Considere adicionar um suporte para a licena. 4. Especifique um cone e um label no arquivo manifest da aplicao. 5. Desligue os componentes de log e debug e apague os dados de teste. Antes de compilar a aplicao: 6. Versione a aplicao. 7. Obtenha a chave criptogrfica para assinatura digital. 8. Registre a chave de API no caso do uso de elementos MapView. 9. Compile a aplicao Depois de compilar a aplicao: 10. Assine a aplicao usando a chave criptogrfica.

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 23

11. Teste a aplicao compilada

4.12. Android MarketO Android Market, ambiente de distribuio de aplicativos, grtis e pagos, da Google, prov um servio de licenciamento de aplicativos que permite que a aplicao possa ser buscada, categorizada e possua mecanismos de restries em funo do status do licenciamento. O servio de licenciamento uma forma segura de controle ao acesso de uma aplicao. (ANDROID DEVELOPERS. PUBLISHING YOUR APPLICATIONS, 2010)

4.13. ConclusoO Android, como uma plataforma que embarca de uma forma muito inteligente e intuitiva um conjunto amplo de softwares de cdigo aberto, entre eles um sistema operacional Linux, um sistema de bibliotecas em C, bibliotecas de mdia, gerenciadores grficos para 2D e 3D com renderizao em bitmap e vetoriais, bibliotecas para web, um banco de dados e a linguagem Java como um meio prtico de se construir aplicativos, muito integrados a aspectos dinmicos presentes na web em funo da Google. O Android possui uma comunidade ativa de desenvolvedores e o aval da Handset Alliance, ter, certamente, uma ampla utilizao no mercado de dispositivos mveis, sejam eles celulares, smartphones, pads, readers, etc. com um amplo mercado para desenvolvimento de aplicativos, no apenas voltados ao usurio individual, mas igualmente ao mercado corporativo onde a plataforma Java j uma tecnologia dominante. Nota-se por este breve trabalho a amplitude do escopo de possibilidades inerentes a esta plataforma e a maneira inteligente e prtica como foi construda, um aspecto relevante que no h exceo, uma regra no Android tem validade para todo o conjunto, por exemplo todas as caractersticas de segurana, acesso, parametrizaes vlidas para um aplicativo nativo so igualmente vlidos para um aplicativo a ser desenvolvido. Apesar de no utilizar uma Java Virtual Machine, mas sim uma mquina Dalvik, possui presente todos os aspectos da linguagem Java, e muito mais, incorpora uma srie de frameworks, leves e tradicionais, nativamente. A definio da Open Handset Alliance em sua carta pblica de 5 de novembro de 2007 explicita de forma sinttica o porqu do Android:Esta Aliana partilha uma meta comum de inovao em dispositivos mveis e de fornecimento aos consumidores de uma experincia de usurio muito superior a de muitos

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

24 Android Desenvolvimento Java

produtos disponveis em plataformas mveis da atualidade. Fornecendo aos desenvolvedores um novo nvel de abertura que permite um trabalho mais colaborativo, o Android acelerar o ritmo em que novos servios mveis e competitivos sero disponibilizados aos consumidores. (ROGER,2009)

4.14. Um aplicativo exemploEm anexo a este trabalho se encontra o arquivo exemploJavaAndroid.txt que contem o cdigo fonte em Java e XML, de uma aplicao exemplo comentada para esclarecer o uso de alguns tpicos deste trabalho. O aplicativo, que pode ser parte de uma interface bsica para vrios projetos de engenharia, fornecer caractersticas geomtricas: rea, permetro externo, momento esttico, momento de inrcia, posio do baricentro e raios de girao, de vrias sees usuais na engenharia civil. O programa no foi totalmente implementado, o ser no futuro junto com um programa para dimensionamento de sees, mas mostra de uma forma bsica como construda uma aplicao.

Figura 5. Tela de Aplicativos do Android

Figura 6. Tela Inicial do Aplicativo Exemplo

A figura 5 mostra a tela de aplicaes do Android, nesta tela est destacado o cone Geometric Sections que, quando tocado, chama a aplicao exemplo, para tanto este cone foi configurado no arquivo AndroidManifest.xml que aponta a respectiva imagem dentro da pasta /res/drawable/imgapp.png.

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 25

A figura 6 representa a tela inicial da aplicao, esta possui um grupo de botes de rdio e dois botes convencionais, os botes de rdio permitem escolher o tipo de seo desejada, os botes Create New Section e Search a Section chamam respectivamente as aes de clculo de uma nova seo ou o resgate de uma seo j calculada e armazenada, no presente esto implantados os dois primeiros botes de rdio e o boto para o clculo da nova seo. Para o clculo de sees foi criada uma classe abstrata Section de onde as demais classes filhas, tais como SectionI, SectionR,etc, derivam. Como pode-se notar toda interface com o usurio foi construda em Ingls, como recomenda as diretrizes do Android Developer, alm disto todas as Strings foram atribudas no arquivo res/values/strings.xml para posterior internacionalizao, bastaria, por exemplo, contruir um arquivo sres/values-pt-br/strings em portugus e o sistema de localizao habilitaria todas as telas automaticamente em portugus. (ANDROID FOR BEGINNERS, LOCALIZATION & INTERNATIONALISATION, 2010) Note que no h um boto VOLTAR , isto porque os devices Android o possuem em hardware e numa tela pequena no se deseja redundncias.

Figura 7. Tela de Clculo antes de inserir dados

Figura 8. Tela de Clculo aps Clculo

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

26 Android Desenvolvimento Java

A figura 7 apresenta a tela de clculo antes da insero dos dados, os campos editveis apresentam um testo auxiliar (hint) explicativo do respectivo dado. Aps a colocao dos dados nos quatro campos teclando-se o boto CALCULATE obtm-se a tela calculada como mostra a figura 8, nesta pode-se notar os resultados, uma rea onde ser desenhada a figura conforme os dados fornecidos e trs botes, um para salvar a seo no banco de dados a ser implementado, outro para limpar todos os campos e outro boto para editar os resultados manualmente e posterior gravao.

AGRADECIMENTOSAgradeo aos meus filhos Pedro, Carol e Vtor e aos amigos Volnei dos Santos, Ricardo Barbosa e Leonardo Tavares pelo incentivo e fora, aos professores da FAC, em especial aos professores Humberto Zanetti e Thiago Tel, e a minha companheira muito especial, Marta.

REFERNCIASANDROID DEVELOPERS. ANDROID APPLICATION FRAMEWORK .Net, Disponvel em: . Acesso em: 30 ago. 2010 ANDROID DEVELOPERS. THE ANDROID MANIFEST.XML FILE .Net, Disponvel em: . Acesso em: 15 out. 2010 ANDROID DEVELOPERS. APPLICATION FUNDAMENTALS .Net, Disponvel em: . Acesso em: 30 ago. 2010. ANDROID DEVELOPERS. AUDIO AND VIDEO .Net, Disponvel em: . Acesso em: 22 out. 2010 ANDROID DEVELOPERS. BLUETOOTH .Net, Disponvel em: < http://developer.android.com/guide/topics/wireless/bluetooth.html >. Acesso em: 23 out. 2010 ANDROID DEVELOPERS. DATA STORAGE .Net, Disponvel em: . Acesso em: 22 out. 2010 ANDROID DEVELOPERS. GRAPHICS .Net, Disponvel em: . Acesso em: 25 out. 2010 ANDROID DEVELOPERS. INSTALLING THE SDK .Net, Disponvel em: . Acesso em: 30 out. 2010 ANDROID DEVELOPERS. NATIVE DEVELOPMENT TOOLS CODE .Net, Disponvel em: . Acesso em: 24 out. 2010 ANDROID DEVELOPERS. PREPARING TO PUBLISH .Net, Disponvel em: . Acesso em: 25 out. 2010

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 27

ANDROID DEVELOPERS. PUBLISHING YOUR APPLICATIONS .Net, Disponvel em: < http://developer.android.com/guide/publishing/publishing.html>. Acesso em: 26 out. 2010 ANDROID DEVELOPERS. SEARCH .Net, Disponvel em: < http://developer.android.com/guide/topics/wireless/bluetooth.html >. Acesso em: 23 out. 2010 ANDROID DEVELOPERS. USER INTERFACE .Net, Disponvel em: . Acesso em: 15 out. 2010 ANDROID DEVELOPERS. WHAT IS ANDROID .Net, Disponvel em: . Acesso em: 25 ago. 2010. ANDROID FOR BEGINNERS, LOCALIZATION & INTERNATIONALISATION.Net, Disponvel em: . Acesso em: 02 nov. 2010. ANDROID OPEN SOURCE PROJECT. GET ANDROID SOURCE CODE .Net, Disponvel em: . Acesso em: 3 out. 2010. BRIGHT HUB. How-to work with Android source Code .Net, Disponvel em: . Acesso em: 15 out. 2010. CBSNEWS. .Net, Disponvel em: . Acesso em: 15 jul. 2010. DALVIK. .Net, Disponvel em: < http://www.dalvikvm.com/>. Acesso em: 18 set. 2010. LECHETA, R. R. Google Android. So Paulo: Novatec Editora, 2a Edio, 2010. OHA. .Net, Disponvel em: . Acesso em: 25 out. 2010. ROGER, R. et al. Android Desenvolimento de Aplicaes Android. So Paulo: Novatec Editora, 1a Edio, 2009. VOGELLA, L. Android Development Tutorial .Net, Disponvel em: . Acesso em: 27 out. 2010

Pedro Vtor de AbreuEng. Civil formado pela PUC-Campinas, com diversos cursos de especializao, extenso e ps-graduao pela USP e UNICAMP, trabalho no desenvolvimento de projetos estruturais na PVA Engenharia & Software. (RA: 9081210997)

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

28 Android Desenvolvimento Java

CDIGO FONTE COMENTADO DO PROGRAMA GEOMETRIC SECTIONS COLOCADO NA MONOGRAFIA SOBRE O SISTEMA ANDROID POR PEDRO VTOR DE ABREU SOB ORIENTAO DO PROFESSOR HUMBERTO ZANETTI.

INCIO DO ARQUIVO: AndroidManifest.xml FIM DO ARQUIVO: AndroidManifest.xml

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 29

INCIO DO ARQUIVO: startsectionsview.xml

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

30 Android Desenvolvimento Java

FIM DO ARQUIVO: startsectionsview.xml

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 31

INCIO DO ARQUIVO: StartSectionsView.java /* * * */ Este cdigo atribui as funcionalidades para a tela inicial da aplicao criando a classe StartSectionsView estende a Activity que uma tela numa aplicao Android *

package br.eng.pva; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RadioGroup; import android.widget.Toast; /** * @author pedrotiv * @version 0.1 * */ public class StartSectionsView extends Activity { private String rb; //o campo rb ser o que define o tipo de perfil utilizado @Override //sobrescrita obrigatria de um dos mtodos de Activity, o onCreate(). public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.startsectionsview); //carrega o contedo do startsectionsview.xml interna: // aponta os objetos para os criados no arquivo de layout xml atravs od id referenciado pela classe R final RadioGroup rg = (RadioGroup) findViewById(R.id.groupSections); final Button btN = (Button) findViewById(R.id.buttonNewSection); final Button btS = (Button) findViewById(R.id.buttonSearch); // um objeto Toast criado para um aviso s instrues no implementadas. final Toast t = new Toast(this).makeText(this,"Under Implementation",Toast.LENGTH_SHORT); /* Vicula-se o boto btN a um listener com o mtodo cujo parmetro um objeto * annimo da classe derivada da interface OnClickListener implementada a seguir * como uma classe interna */ btN.setOnClickListener(new OnClickListener(){ // nico mtodo da interface OnClickListener chamado ao clicar o boto public void onClick(View v) { // verifica-se qual boto est com check on e atribui a rb uma string representativa if(R.id.shape_I==rg.getCheckedRadioButtonId())rb="I"; if(R.id.shape_R==rg.getCheckedRadioButtonId())rb="R"; if(R.id.shape_C==rg.getCheckedRadioButtonId())rb="C"; if(R.id.shape_L==rg.getCheckedRadioButtonId())rb="L"; if(R.id.shape_U==rg.getCheckedRadioButtonId())rb="U";

arquivo

// variveis locais com atributos final para poderem ser utilizadas dentro de uma classe

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

32 Android Desenvolvimento Java

if(R.id.shape_T==rg.getCheckedRadioButtonId())rb="T"; if(R.id.shape_P==rg.getCheckedRadioButtonId())rb="P"; /* cria-se um objeto Bundle que um hash table para atrnasferncia de informes * entre Activities */ Bundle bnd = new Bundle(); /* Log usado para envio ao console de informaes de depurao * o primeiro parmetro uma categoria para filtragem o segundo * a respectiva mensagem */ Log.i("S","Tipo de perfil: "+ rb); // inserindo no objeto Bundle a informao desejada como chave, valor. bnd.putString("shape",rb); /* Cria-se um objeto Intent cujo construtor tem como parmetro, neste caso, * uma string que reconhecida como um action dentro de um intent-filter * de uma Activity configurada com tal string em todas as aplicaes */ Intent it = new Intent("OpenFormSection"); // Insere-se o Bundle na Intent. it.putExtras(bnd); if(rb.equals("I")||rb.equals("R")) /*Inicia uma nova Activiy chamda por um objeto it (Intent) * neste caso a que est setada com intent-filter com a string * "OpenFormSection" que representa a classe FormSectionView * */ startActivity(it); else t.show(); // Mostra um aviso em implentao em andamento } }); // Listener vinculado ao boto btS a ser implementado. btS.setOnClickListener(new OnClickListener(){ public void onClick(View v) { t.show(); } }); } } FIM DO ARQUIVO: StartSectionsView.java

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 33

INCIO DO ARQUIVO: formsectionsview.xml

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

34 Android Desenvolvimento Java

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

36 Android Desenvolvimento Java

FIM DO ARQUIVO: formsectionsview.xml

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 37

INCIO DO ARQUIVO: FormSectionView.java /* * * */ Este cdigo atribui as funcionalidades para a tela de clculo da aplicao criando a classe FormSectionView que estende a Activity que uma tela numa aplicao Android *

package br.eng.pva; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; /** * @author pedrotiv * */ public class FormSectionView extends Activity { /* O objeto "s" da classe Section da qual derivam as * especficas para o clculo de cada tipo de seo * */ private Section s; /* O Campo shp que receber via Bundle o * tipo de seo para o clculo */ private String shp = null; @Override //sobrescrita obrigatria de um dos mtodos de Activity, o onCreate(). public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* * variveis locais com atributos final para poderem * ser utilizadas dentro de uma classe interna: */ final TextView tvH; final TextView tvB; final TextView tvTf; final TextView tvTw; final TextView tv; final TextView tvA; final TextView tvPe; final TextView tvMx; final TextView tvMy; final TextView tvSx; final TextView tvSy; final TextView tvCgX; final TextView tvCgY; final TextView tvRx; final TextView tvRy; final Button btCalc;

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

38 Android Desenvolvimento Java

final Button btClear; final Button btEdit; final Button btSave; final ImageView iv; // Objetos para avisos ao usurio: final Toast t = new Toast(this).makeText(this, "Under Implementation", Toast.LENGTH_SHORT); final Toast t0 = new Toast(this).makeText(this,"All fiels must be greater then zero", Toast.LENGTH_SHORT); //carrega o contedo do arquivo formsectionsview.xml setContentView(R.layout.formsectionsview); /* * aponta os objetos para os criados no arquivo de * layout xml atravs od id referenciado pela classe R */ tvH = (TextView) findViewById(R.id.field_h); tvB = (TextView) findViewById(R.id.field_b); tvTf = (TextView) findViewById(R.id.field_tf); tvTw = (TextView) findViewById(R.id.field_tw); tv = (TextView) findViewById(R.id.textForm); tvA = (TextView) findViewById(R.id.area); tvPe = (TextView) findViewById(R.id.pe); tvMx = (TextView) findViewById(R.id.momX); tvMy = (TextView) findViewById(R.id.momY); tvSx = (TextView) findViewById(R.id.estX); tvSy = (TextView) findViewById(R.id.estY); tvCgX = (TextView) findViewById(R.id.cgX); tvCgY = (TextView) findViewById(R.id.cgY); tvRx = (TextView) findViewById(R.id.rX); tvRy = (TextView) findViewById(R.id.rY); btCalc = (Button) findViewById(R.id.buttonCalc); btClear = (Button) findViewById(R.id.buttonClear); btEdit = (Button) findViewById(R.id.buttonEdit); btSave = (Button) findViewById(R.id.buttonSave); iv = (ImageView) findViewById(R.id.iv); /* * Um objeto Intent j existente com informaes * provindas da chamada Activity refernciado * por it, caso exista um Bundle recupera as informaes * nele contidas carregando shp com a string correlata * ao valor "shape" do Bundle. Desta forma transfere-se * informaes entre as Activities. */ Intent it = getIntent(); if (it != null) { Bundle par = it.getExtras(); if (par != null) { shp = par.getString("shape"); if (shp.equals("I")) { tv.setText("Enter Data to I element:"); } else if (shp.equals("R")) { tv.setText("Enter Data to Rectangular Hollow Element:"); iv.setImageResource(R.drawable.q125); } } }

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 39

/* * Vincula-se o boto btCalc a um listener com o mtodo cujo parmetro um objeto * annimo da classe derivada da interface OnClickListener implementada a seguir * como uma classe interna, tal classe produz todo o clculo chamando atravs do * objeto "s" que cria um objeto especfico a cada classe de sees implementadas. */ btCalc.setOnClickListener(new OnClickListener() { public void onClick(View v) { Double h, b, tf, tw; h=b=tf=tw=0.; try { h = (Double) Double.parseDouble((String) tvH.getText() .toString()); b = (Double) Double.parseDouble((String) tvB.getText() .toString()); tf = (Double) Double.parseDouble((String) tvTf.getText() .toString()); tw = (Double) Double.parseDouble((String) tvTw.getText() .toString()); } catch (NumberFormatException e) { // tratar e return; } if (h > 0 & b > 0 & tf > 0 & tw > 0) { if (!shp.equals(null)) { if (shp.equals("I")) { s = new SectionI("SectionI", 1, h, b, tf, tw); } else if (shp.equals("R")) { s = new SectionRect("SectionR", 2, h, b, tf, tw); } else finish(); } // Atribui os resultados aos objetos TextView tvA.setText(s.getArea().toString()); tvPe.setText(s.getPe().toString()); tvMx.setText(s.getIx().toString()); tvMy.setText(s.getIy().toString()); tvSx.setText(s.getWx().toString()); tvSy.setText(s.getWy().toString()); tvCgX.setText(s.getX().toString()); tvCgY.setText(s.getY().toString()); tvRx.setText(s.getRx().toString()); tvRy.setText(s.getRy().toString()); } else t0.show(); } }); // Listener vinculado ao boto btClear a ser implementado. btClear.setOnClickListener(new OnClickListener() { public void onClick(View v) { t.show(); } }); // Listener vinculado ao boto btSave a ser implementado. btSave.setOnClickListener(new OnClickListener() { public void onClick(View v) { t.show();

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

40 Android Desenvolvimento Java

} }); // Listener vinculado ao boto btEdit a ser implementado. btEdit.setOnClickListener(new OnClickListener() { public void onClick(View v) { t.show(); } }); } } FIM DO ARQUIVO: FormSectionView.java

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 41

INCIO DO ARQUIVO: Section.java /* * Esta classe abstrata funciona quase como uma interface * sem implentar mtodos, exceto o construtor, os mtodos * abstratos sero implemntados em suas classes filhas que * representaro uma seo real da regra de negcio */ package br.eng.pva; public abstract class Section { protected String name; protected Integer type; protected Double h,b,tf,tw; protected Double A,Pe,Ix,Iy,Wx,Wy,rx,ry,x,y;//Area,MomsIner,MomsEst,RaiosGir,xyCG public Section(String name, Integer type, Double h, Double b, Double tf, Double tw) { super(); this.name = name; this.type = type; this.h = h; this.b = b; this.tf = tf; this.tw = tw; } protected abstract Double getArea(); protected abstract Double getPe(); protected abstract Double getX(); protected abstract Double getY(); protected abstract Double getIx(); protected abstract Double getIy(); protected abstract Double getRx(); protected abstract Double getRy(); protected abstract Double getWx(); protected abstract Double getWy(); } FIM DO ARQUIVO: Section.java

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

42 Android Desenvolvimento Java

INCIO DO ARQUIVO: SectionI.java /* * Classe SectionI que implementa atributos e mtodos para seesI * Esta classe derivada da classe abstrata Section e implementa * os seus mtodos abstratos. * Ser implemntado os mtodos set e get para os seus campos quando * do amrazenamento dos objetos em um banco de dados */ package br.eng.pva; /** * @author pedrotiv * */ public class SectionI extends Section { /* * From super class: private String name; private Integer type; private * Double h, b, tf, tw; * private Double A, Ix, Iy, Wx, Wy, rx, ry, x, y; * //Area,MomsIner,MomsEst,RaiosGir,xyCG */ public SectionI(String name, Integer type, Double h, Double b, Double tf, Double tw) { super(name, 1, h, b, tf, tw); this.A = getArea(); this.Ix = getIx(); this.Iy= getIy(); this.Wx= getWx(); this.Wy= getWy(); this.rx= getRx(); this.ry= getRy(); this.x = getX(); this.y = getY(); } @Override protected Double getPe() { return 2*h+4*b+2*tf-2*tw; } @Override protected Double getIx() { Double f = h - 2 * tf; return (tw * Math.pow(f, 3) + ((Math.pow(h, 3) - Math.pow(f, 3)) * b)) / 12; } @Override protected Double getY() { return h / 2; } @Override protected Double getX() { return b / 2; } @Override protected Double getArea() {

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 43

return (2 * b * tf + (h - 2 * tf) * tw); } @Override protected Double getIy() { Double f = h - 2 * tf; return (2 * tf * Math.pow(b, 3) + (f * Math.pow(tw, 3))) / 12; } @Override protected Double getRx() { return A != 0 ? Math.sqrt(Iy / A) : null; } @Override protected Double getRy() { return A != 0 ? Math.sqrt(Ix / A) : null; } @Override protected Double getWx() { return h != 0 ? 2 * Ix / h : null; } @Override protected Double getWy() { return b != 0 ? 2 * Iy / b : null; }

} FIM DO ARQUIVO: SectionI.java

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

44 Android Desenvolvimento Java

INCIO DO ARQUIVO: SectionR.java /* * Classe SectionR que implementa atributos e mtodos para sees retangulares ocas * Esta classe derivada da classe abstrata Section e implementa * os seus mtodos abstratos. * Ser implementado os mtodos set e get para os seus campos quando * do amrazenamento dos objetos em um banco de dados */ package br.eng.pva; public class SectionRect extends Section { /* * From super class: private String name; private Integer type; private * Double h, b, tf, tw; * private Double A, Ix, Iy, Wx, Wy, rx, ry, x, y; * //Area,MomsIner,MomsEst,RaiosGir,xyCG */ public SectionRect(String name, Integer type, Double h, Double b, Double tf, Double tw) { super(name, 2, h, b, tf, tw); this.A = getArea(); this.Ix = getIx(); this.Iy= getIy(); this.Wx= getWx(); this.Wy= getWy(); this.rx= getRx(); this.ry= getRy(); this.x = getX(); this.y = getY(); } protected Double getPe() { return 2*h+2*b; } @Override protected Double getIx() { Double f = h - 2 * tf; Double g= b- 2*tw; return (b*Math.pow(h, 3)-g*Math.pow(f, 3)) / 12; } @Override protected Double getY() { return h / 2; } @Override protected Double getX() { return b / 2; } @Override protected Double getArea() { Double f = h - 2 * tf; Double g= b- 2*tw;

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 45

return (b*h-g*f); } @Override protected Double getIy() { Double f = h - 2 * tf; Double g= b- 2*tw; return (h*Math.pow(b, 3)-f*Math.pow(g, 3)) / 12; } @Override protected Double getRx() { return A != 0 ? Math.sqrt(Iy / A) : null; } @Override protected Double getRy() { return A != 0 ? Math.sqrt(Ix / A) : null; } @Override protected Double getWx() { return h != 0 ? 2 * Ix / h : null; } @Override protected Double getWy() { return b != 0 ? 2 * Iy / b : null; } } FIM DO ARQUIVO: SectionR.java

// chk:

// chk:

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

46 Android Desenvolvimento Java

INCIO DO ARQUIVO: strings.xml Geometric Sections Select the Section and Operation:\n \tI or H Section \tRectangular Hollow \tCircular Hollow \tAngle \tChannel \tT Section \tPolygonal Create New Section Search a Section Total Hight Base/Flange Flange Tickn Web Tickness Coherent Units CALCULATE SAVE Edit Results Clear All Results : Area : Perimeter : InerMom X : InerMom Y : StatMom X : StatMom Y : Dist CG X : Dist CG Y : Radius X : Radius Y : #ff0000 #ffffff FIM DO ARQUIVO: strings.xml

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

Pedro Vtor de Abreu 47

INCIO DO ARQUIVO: R.java /* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated by the * aapt tool from the resource data it found. It * should not be modified by hand. */ package br.eng.pva; public final class R { public static final class attr { } public static final class color { public static final int red=0x7f050000; public static final int white=0x7f050001; } public static final class drawable { public static final int c=0x7f020000; public static final int d=0x7f020001; public static final int i=0x7f020002; public static final int i125=0x7f020003; public static final int icon=0x7f020004; public static final int iconapp=0x7f020005; public static final int l=0x7f020006; public static final int o=0x7f020007; public static final int q=0x7f020008; public static final int q125=0x7f020009; public static final int shape_i=0x7f02000a; public static final int t=0x7f02000b; public static final int x=0x7f02000c; } public static final class id { public static final int area=0x7f060007; public static final int buttonCalc=0x7f060005; public static final int buttonClear=0x7f060013; public static final int buttonEdit=0x7f060014; public static final int buttonNewSection=0x7f06001d; public static final int buttonSave=0x7f060012; public static final int buttonSearch=0x7f06001e; public static final int cgX=0x7f06000d; public static final int cgY=0x7f06000e; public static final int estX=0x7f06000b; public static final int estY=0x7f06000c; public static final int field_b=0x7f060002; public static final int field_h=0x7f060001; public static final int field_tf=0x7f060003; public static final int field_tw=0x7f060004; public static final int groupSections=0x7f060015; public static final int iv=0x7f060011; public static final int momX=0x7f060009; public static final int momY=0x7f06000a; public static final int pe=0x7f060008; public static final int rX=0x7f06000f; public static final int rY=0x7f060010; public static final int shape_C=0x7f060018; public static final int shape_I=0x7f060016; public static final int shape_L=0x7f060019;

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28

48 Android Desenvolvimento Java

public static final int public static final int public static final int public static final int public static final int public static final int

shape_P=0x7f06001c; shape_R=0x7f060017; shape_T=0x7f06001b; shape_U=0x7f06001a; textForm=0x7f060000; textResult=0x7f060006;

} public static final class layout { public static final int formsectionsview=0x7f030000; public static final int startsectionsview=0x7f030001; } public static final class string { public static final int app_name=0x7f040000; public static final int area=0x7f040015; public static final int btCalc=0x7f040010; public static final int btClear=0x7f040013; public static final int btEdit=0x7f040012; public static final int btSave=0x7f040011; public static final int cgX=0x7f04001b; public static final int cgY=0x7f04001c; public static final int estX=0x7f040019; public static final int estY=0x7f04001a; public static final int hint_b=0x7f04000c; public static final int hint_h=0x7f04000b; public static final int hint_tf=0x7f04000d; public static final int hint_tw=0x7f04000e; public static final int momX=0x7f040017; public static final int momY=0x7f040018; public static final int newSection=0x7f040009; public static final int pe=0x7f040016; public static final int rX=0x7f04001d; public static final int rY=0x7f04001e; public static final int result=0x7f040014; public static final int search=0x7f04000a; public static final int shape_C=0x7f040004; public static final int shape_I=0x7f040002; public static final int shape_L=0x7f040005; public static final int shape_P=0x7f040008; public static final int shape_R=0x7f040003; public static final int shape_T=0x7f040007; public static final int shape_U=0x7f040006; public static final int text01=0x7f040001; public static final int units=0x7f04000f; } } FIM DO ARQUIVO: R.java

Nome da Revista Vol. V, N. N, Ano 2008 p. 1-28