Faculdade iDEZ Curso de Ps-Graduao em Mobilidade e Sistemas Embarcados Disciplina: Plataformas Emergentes para Dispositivos Mveis
Android
E-mail: erisvaldojunior@gmail.com Site: http://erisvaldojunior.com Twitter: http://twitter.com/erisvaldojunior
Sobre mim
Analista de Sistemas da Cehap (Companhia Estadual de Habitao Popular); Desenvolvedor Mobile e participante do projeto Ginga pelo LAViD (Laboratrio de Aplicaes de Vdeo Digital), situado na Universidade Federal da Paraba; Empreendedor da Yupi Studios (http://yupistudios.com), startup voltada para a criao de contedo criativo para dispositivos mveis;
Bacharel em Cincia da Computao pela Universidade Federal da Paraba e Tecnlogo em Sistemas para Internet pelo Instituto Federal de Educao, Cincia e Tecnologia.
www.yupistudios.com
Games (MinerMan)
Objetivo da Aula
Expor em detalhes o Sistema Operacional e o kit de desenvolvimento do Android, ressaltando as diferenas para os demais Sistemas Operacionais e plataformas para dispositivos mveis, o mercado de aplicaes e o ambiente de desenvolvimento.
O que o Android?
Sistema operacional para dispositivos mveis desenvolvido pela OHA (Open Handset Alliance), liderada pelo Google e com participao da HTC, Intel, Motorola, Qualcomm, T-Mobile e NVIDIA.
O Android atualmente se encontra na verso 2.x e baseado no Linux; O kit de desenvolvimento para Android (o Android SDK) est disponvel para Windows, Linux e Mac OS. A linguagem de programao utilizada no desenvolvimento para Android o Java e a IDE, o Eclipse (em conjunto com o plugin Android Development Tools). O desenvolvedor pode distribuir suas aplicaes atravs da loja de aplicativos Android Market, previamente instalada em todos os aparelhos com Android.
Introduo
Introduo
Roteiro da Aula
MOTIVAO
O ANDROID
O AMBIENTE E EXEMPLOS
MOTIVAO
Tecnologias para Desenvolvimento Mvel SOs do Momento Android iOS Outros SOs Blackberry OS Maemo Symbian Windows Mobile Palm OS
Segundo a AdMob, dados de 2010, o Android ocupa a segunda posio entre os sistemas operacionais para smartphone no mundo, possuindo 26% do mercado e atrs apenas do iOS, que detm 40%.
Um aspecto interessante, porm, o crescimento do Android no mercado. O SO vem em uma ascendente contnua, ao contrrio do iOS, que vem oscilando, e do Symbian OS, que perdeu mercado.
A AdMob tambm mostra que a Apple (aparelhos iOS) possui a maior fatia de smartphones do mercado. A Nokia (aparelhos Symbian e Maemo) detm a segunda posio.
Android Market
Loja de aplicativos para Android gerenciada pela Google e disponvel atravs dos prprios aparelhos.
Em outubro de 2008 foi lanado o Android Market, na qual o desenvolvedor paga uma taxa de 25 dlares para se registrar, define o preo final de suas aplicaes e recebe 70% do lucro total;
Motivao
A loja vem sendo um sucesso e, no momento, a principal concorrente da Apple App Store (primeira loja do gnero, lanada em julho de 2008). O Android Market est disponvel em cerca de cinquenta pases, com mais de 85 mil aplicaes, nmeros que crescem a cada dia;
O Android Market tem crescido a ritmo acelerado nos ltimos meses devido ao forte crescimento do Android. Algumas pesquisas apontam que a loja pode superar a concorrente da Apple em mdio prazo.
Dados referentes ao ano de 2009, quando a distncia entre Android Market e a Apple App Store ainda era muito grande.
Android deve superar sistema operacional do iPhone em 2012, diz estudo. http://www.tecnologia3g.com.br/site/pt/page/noticias_detalhe.asp?cod=261 Android a plataforma que mais cresce, diz consultoria http://tecnologia.ig.com.br/noticia/2010/11/03/android+e+a+plataforma+que +mais+cresce+diz+consultoria+9956087.html Co-fundador da Apple (Steve Wozniak) acredita que Android ganhar corrida entre smartphones http://olhardigital.uol.com.br/produtos/digital_news/co-fundador-da-appleacredita-que-android-ganhara-corrida-entre-smartphones/14935 Demanda por desenvolvedores Android cresceu 710% em um ano http://imasters.com.br/noticia/18931/carreira/demanda_por_desenvolvedore s_android_cresceu_710_em_um_ano/
Orientado a blocos, basta definir as suas propriedades visuais e as suas aes para determinados eventos.
O Android
Recursos do Android
Em uma definio mais completa, o Android uma pilha de software para dispositivos mveis que inclui um SO, um Middleware e aplicaes-chave. O Android SDK prov ferramentas e APIs para o desenvolvimento de aplicaes na plataforma Android usando a linguagem de programao Java. Apresenta uma biblioteca grfica 2D bem como suporte a 3D baseado na especificao do OpenGL ES 1.0; SQLite para armazenamento estruturado de dados;
Suporte a mdias e formatos diversos de udio, vdeo e imagens (MPEG-4, H.264, MP3, AAC, AMR, JPG, PNG, GIF);
Suporte a Bluetooth, EDGE, 3G, e WiFi (dependente do hardware); Suporte a Cmera, GPS, Bssola e Acelermetro (dependente do hardware); Ambiente de desenvolvimento rico com EMULADOR, FERRAMENTAS de depurao e otimizao de performance e um PLUGIN para a IDE ECLIPSE.
Verses do Android
Arquitetura do Android
Arquitetura do Android
Applications Conjunto de aplicaes-chave nativas do Android, incluindo um cliente de e-mail, gerenciador de SMS, calendrio, mapa, navegador, gerenciador de contatos e outros. Todas essas aplicaes foram escritas em Java.
Application Framework Desenvolvedores tem acesso completo s mesmas APIs que as aplicaes-chave. O framework prov um conjunto de Views que podem ser utilizados para construir a interface da aplicao, incluindo listas, tabelas, caixas de texto, botes e at mesmo um browser embutido. Disponibiliza tambm Content Providers que permitem o acesso a dados de outras aplicaes (como o gerenciador de Contatos). H, ainda, o Resource Manager (prov acesso a recursos como imagens e arquivos de layout), o Notification Manager (permite que a aplicao mostre avisos personalizados) e o Activity Manager (gerencia o ciclo de vida da aplicao e a sua navegao).
Arquitetura do Android
Libraries Conjunto de bibliotecas C/C++ utilizadas por vrios componentes do Android. Essas bibliotecas provem recursos que so expostos aos desenvolvedores atravs de sua camada sobrejacente: Application Framework.
Android Runtime Cada aplicao no Android roda em um processo diferente no Linux e para cada processo criada uma instncia da mquina virtual Dalvik. Essa mquina virtual foi criada de forma que um dispositivo possa executar mltiplas instncias de forma eficiente. As classes compiladas da aplicao so transformadas para o formato .dex (Dalvik Executable), otimizado para uma mnima utilizao de memria. A Dalvik VM interage diretamente com o kernel Linux para execuo de funcionalidades subjacentes como tratamento de concorrncia e gerenciamento de memria.
Por padro, cada aplicao executada como um processo separado, com ID nico e mquina virtual prpria, isolando o seu cdigo das demais aplicaes.
Componentes da Aplicao
Um recurso fundamental do Android o reuso de componentes. Caso uma aplicao precise disponibilizar uma lista de imagens com scrolling e outra aplicao apresenta tal componente e o disponibilizou para as demais, podese invocar esse componente.
Devido a essa organizao dos aplicativos em componentes, as aplicaes Android no possuem um nico ponto de entrada (no h um mtodo main(), por exemplo). Ao invs disso, as aplicaes apresentam componentes essenciais que o sistema pode instanciar e executar quando necessrio. Esses componentes podem ser de quatro tipos:
Activities (apresenta uma interface visual para o usurio) Services (roda em segundo plano por um perodo de tempo indeterminado) Broadcast Receivers (recebe e reage a eventos do sistema)
Content Provider e BroadCast Receiver no precisam ser desativados, uma vez que permanecem ativos somente enquanto esto respondendo requisies. J Activities e Services podem permanecer em execuo por um longo perodo de tempo, da a necessidade de finaliz-los atravs dos mtodos finish() e stopSelf(), respectivamente.
Activities
O componente mais comum de uma aplicao um Activity. implementado como uma subclasse de Activity e uma aplicao pode conter uma ou mais activities. Cada qual representa uma interface visual e uma delas marcada como sendo a inicial que deve ser apresentada quando a aplicao iniciada. Mover-se de uma Activity para outra consiste em fazer com que a Activity atual invoque a prxima.
Cada Activity possui uma janela padro para desenhar. Normalmente a janela ocupa a tela toda mas tambm pode ser menor e flutuar sobre outras janelas. Uma Activity pode conter janelas adicionais, como por exemplo um dialog que exige uma resposta do usurio ou mostra um aviso quando um dado item selecionado.
O visual da janela composto por uma hierarquia de views, objetos derivados da classe base View. As views tambm so responsveis por responder s aes do usurio direcionadas ao seu espao.
Activities e Tasks
Conforme dito anteriormente, uma Activity pode iniciar outra, inclusive uma que pertena a outro aplicativo. Por exemplo: uma aplicao deseja mostrar o mapa de algum local. J existe uma Activity que o faz, ento tudo o que a sua Activity precisa fazer chamar o mtodo startActivity() passando como parmetro o objeto da classe Intent com as informaes necessrias. O mapa ser mostrado e, quando o usurio pressionar a tecla voltar, sua Activity ser mostrada novamente na tela.
Para o usurio, isso transparente. O Android mantm ambas as activities na mesma Task. Uma Task, para o usurio, como se fosse uma aplicao. Tecnicamente um grupo de Activities relacionadas que foram adicionadas em uma pilha. A base da pilha a primeira Activity que mostrada quando a Task iniciada, enquanto que o topo a Activity que est sendo executada no momento, ou seja, que est recebendo o foco das aes do usurio.
Parado: quando a Activity est ofuscada por outra. Mantm o estado mas pode ser eliminada pelo sistema em caso de falta de memria.
Services
Diferentemente de activities, os services no possuem interface e executam em segundo plano por um perodo de tempo indeterminado. Cada servio uma classe que herda de Service.
Um exemplo clssico de Service um tocador de msicas. A aplicao deve consistir de uma ou mais activities que permitem ao usurio selecionar as msicas e comear a toc-las. Contudo, a execuo das msicas em si no faz parte da Activity mas sim de um Service, uma vez que o usurio espera que a msica continue a ser tocada aps sair da tela.
Broadcast Receivers
Componente que recebe e reage a anncios de broadcast, geralmente oriundos do sistema. Cada receiver uma classe que herda de BroadCastReceiver.
Mudana no fuso horrio, anncio de bateria fraca e mudana da linguagem por parte do usurio so exemplos de anncios que podem ser capturados por Broadcast Receivers.
Uma aplicao pode conter quantos receptores quiser. Os receptores podem iniciar uma Activity ou utilizar o NotificationManager para alertar o usurio (acender a luz do aparelho, vibrar, executar um som, etc).
Quando uma mensagem de broadcast chega ao receptor, o Android invoca o mtodo onReceive(), passando como parmetro um objeto Intent contendo a mensagem.
O Broadcast Receiver fica ativo apenas enquanto est executando esse mtodo.
Content Providers
Componente que torna um conjunto especfico de dados da aplicao disponvel para outras aplicaes. Cada provider uma classe que herda de ContentProvider e disponibiliza um conjunto padro de mtodos para que outras aplicaes possam recuperar e armazenar dados do tipo que o provedor controla.
As aplicaes no podem acessar os mtodos de um Content Provider diretamente. Para isso, elas precisam de um objeto ContentResolver, o qual pode conversar com qualquer Content Provider.
Desde o Android 1.6, a plataforma prov suporte a mltiplos tamanhos de tela e resolues, adequando-se aos muitos tipos e tamanhos de dispositivos com Android. Assim, a partir do Android 1.6, a plataforma divide a infinidade de tamanhos de tela e resolues suportadas em:
Um conjunto de trs tamanhos: large, normal e small; Um conjunto de trs densidades: hdpi (high), mdpi (medium) e ldpi (low).
Dessa forma, a aplicao pode prover layouts e imagens para qualquer um desses trs conjuntos, sem a necessidade de trabalhar com o tamanho fsico real da tela do aparelho.
Em tempo de execuo, o Android carrega o conjunto adequado de recursos, baseado no dispositivo em questo.
Organizao de pastas de layout e imagens para uma aplicao que, em tese, suporta todos os tamanhos de telas e resolues.
Hierarquia de classes de UI
LinearLayout
O layout bsico, padro quando da gerao de um .XML de layout no Android, o LinearLayout. Como o prprio nome diz, ele dispe os componentes linearmente em uma unica direo definida pelo atributo android:layout_orientation.
LinearLayout e LayoutParams
android:layout_gravity: similar ao float do CSS, o gravity define a posio do contedo do LinearLayout na tela, podendo-se usar top, bottom, left, right, center, center_vertical, center_horizontal, etc. Pode-se usar combinaes atravs do conector |. Por exemplo: bottom | right. android:layout_weight: indica quanto do espao extra no LinearLayout ser alocado para a viso associada aos LayoutParams. Ou seja, pode-se dividir a tela entre os layouts atribuindo a cada um deles um peso que define qual deles ter maior espaamento e, casa todos tenham o mesmo peso, a tela dividida igualmente.
LinearLayout (Cdigo)
FrameLayout
Arranja seus filhos de acordo com uma pilha de componentes que so adicionados, sendo que o topo da pilha contm o objeto que foi adicionado por ltimo. Pode-se usar quando se tem vrias imagens e uma sobreposta pela outra (como um slide de imagens) conforme vo sendo adicionadas.
FrameLayout (Cdigo)
Nota: O FrameLayout usado comumente a partir de uma de suas subclasses, tais como ImageSwitcher, ViewAnimator, ViewSwitcher, ScrollView, TabHost, etc.
AbsoluteLayout
Implementa um plano cartesiano e posiciona os componentes em coordenadas X, Y de forma absoluta.
AbsoluteLayout (Cdigo)
RelativeLayout
Os componentes so ajustados atravs de relacionamentos entre si ou ao seu pai.
RelativeLayout (Cdigo)
TableLayout
Comporta seus filhos em linhas e colunas. Cada filho representado por um TableRow (uma espcie de LinearLayout na horizontal) que permite que uma ou ais clulas sejam adicionadas horizontalmente, sendo que cada clula pode conter um nico View.
TableLayout (Cdigo)
O ambiente e exemplos
Ambiente de Desenvolvimento
O que necessrio?
Para configurar um ambiente de desenvolvimento Android, necessrio ter a ltima verso do JDK (Java Development Kit) instalado na mquina (seja em Windows, Linux ou Mac OS X). Em seguida, deve-se efetuar o download de:
Android SDK (http://developer.android.com/sdk); Eclipse IDE (http://www.eclipse.org/downloads).
A partir de ento, faz-se necessrio a instalao do plugin ADT (Android Development Tools) para o Eclipse. Para tal, deve-se acessar, dentro do gerenciador de plugins do Eclipse, o seguinte endereo: ADT Plugin para Eclipse (https://dl-ssl.google.com/android/eclipse).
Ambiente de Desenvolvimento
Ambiente de Desenvolvimento
/ - Raiz do projeto. o src/ - Classes Java o gen/ - Cdigo Java gerado automaticamente. o res/ - Recursos da aplicao drawable/ - Imagens layout/ - Layouts de telas/formulrios. values/ - Arquivos de variveis. o AndroidManifest.xml - Configurao do projeto.
AndroidManifest.xml
Arquivo de configurao de uma aplicao Android. Identifica o nome e o cone da aplicao, declara os componentes, realiza a conexo com bibliotecas extras que a aplicao necessita (alm da biblioteca padro do Android), define a verso mnima do Android na qual a aplicao a pode ser executada e identifica quaisquer permisses que a aplicao espera obter.
Layout main.xml
A forma mais comum de esboar uma tela atravs de um arquivo de layout no formato XML. Esse arquivo determina o tipo de layout utilizado e declara os elementos de interface que compem a tela, correspondentes as classes View e suas subclasses.
Alm disso, a aplicao pode criar objetos View e ViewGroup (e manipular suas propriedades) em tempo de execuo, atravs de cdigo na Activity.
EXERCCIOS DE LAYOUT
Primeiro Exerccio
Alterar o layout main.xml para obter uma tela similar a esta imagem.
EXERCCIOS DE LAYOUT
Segundo exerccio: criar um layout linearlayout.xml de forma a confeccionar a tela abaixo.
EXERCCIOS DE LAYOUT
Terceiro exerccio: criar o layout complexo abaixo.
Primeira aplicao Criar uma aplicao com duas Activities e uma Dialog. Uma Activity chamada atravs do clique no primeiro boto e a Dialog atravs do clique no segundo boto.
Segunda Aplicao
Criar a aplicao ao lado. Ao pressionar o boto, exibir um AlertDialog informando lcool ou Gasolina.