Você está na página 1de 100

Erisvaldo Gadelha Saraiva Júnior

Faculdade de Tecnologia de João Pessoa (FATEC-JP)


Especialização em Desenvolvimento para Dispositivos Móveis
Disciplina: Tecnologias para Dispositivos Móveis

Android
E-mail: erisvaldojunior@gmail.com
Site: http://erisvaldojunior.com
Twitter: @erisvaldojunior
Sobre mim

Empreendedor Yupi Studios


(http://yupistudios.com);

Desenvolvedor Mobile (LAViD);

Mestrando em Informática (UFPB);

Analista de Sistemas (Cehap).


Sobre a Yupi Studios

www.yupistudios.com
Games (MinerMan)
Aplicativos (Pump Me Up!)
Soluções Corporativas (Cardápio Digital)
O que será exposto na aula?

Conceitos Introdutórios;
Organize with Sections

Mercado Mobile;

Expor as Tecnologias e Tendências;

Introduzir o Android e preparar o


ambiente de desenvolvimento.
Era da Computação Ubíqua
Conceitos Introdutórios
Computação Móvel / Pervasiva / Ubíqua
Conceitos Introdutórios
Computação Móvel / Pervasiva / Ubíqua
Conceitos Introdutórios
Computação em Nuvem (Cloud Computing)
Conceitos Introdutórios
Computação em Nuvem (Cloud Computing)
Conceitos Introdutórios
Conceitos Introdutórios
Realidade Aumentada
Roteiro da Aula

VISÃO GERAL PLATAFORMAS E A PLATAFORMA


DO MERCADO TENDÊNCIAS ANDROID

Entendendo o Mundo da Mobilidade


VISÃO GERAL DO
MERCADO

Números do Mercado Mobile no Brasil e no Mundo


O Mercado Mobile

Mercado brasileiro de telefonia móvel;


Organize with Sections

Números do mercado internacional;

Mercado de jogos (Brasil e mundo).


Celulares no Brasil (2007 a 2009)
Market Share das operadoras no Brasil (2007 a 2009)
Mercado brasileiro de celulares (2010)

202 milhões e 944 mil celulares


Crescimento de 16,7%;
104,7 celulares a cada 100 habitantes.

Operadoras
Vivo - 29,7%
Claro - 25,4%
TIM – 25,1%
Oi – 19,4%
Celulares no mundo (2000 a 2009)
Principais mercados de celular no mundo (2008 e 2009)
Operadoras de telefonia no mundo (2008 e 2009)
Market Share dos fabricantes (2005 a 2007)
Market Share dos fabricantes (2009 e 2010)
Mercado americano de jogos para dispositivos móveis
Mercado mundial de jogos para dispositivos móveis

Gartner
Plataformas e Tendências

Plataformas de Mobilidade e Tendências do Mercado


SOs para Desenvolvimento (no Presente)

iOS Android
RIM SYMBIAN

PALM OS Windows Mobile MAEMO


iOS (Apple)

iPod, iPhone (2007) e iPad (2010);

Baseado no Mac OS X (Objective-C);

Kit de desenvolvimento exclusivo para


Mac OS;

Aplicativos exclusivamente na Apple


App Store.
Android (Open Handset Alliance, liderada pelo Google)

Plataforma aberta baseada em Linux;

Android Development Tools (ADT)


Plugin para Eclipse;

Desenvolvimento em Java (Linux /


Windows / Mac OS);

1º smartphone: HTC G1 (2008);


1º tablet: Samsung Galaxy Tab (2010).
Plataformas para Desenvolvimento (no Presente)

JavaME
Flash Lite

PyS60

BREW
JavaME

Quase 2 bilhões de aparelhos;

Grande comunidade de
desenvolvedores;

Atingiu 95% dos aparelhos em 2007.


Comparativo entre JavaME e Flash Lite
Comparativo entre Tecnologias
SOs para Desenvolvimento (Apostas para o Futuro)

Windows
BADA MeeGo
Phone 7
Mercado Mobile em 2010 (Divisão dos SOs)
Segundo a AdMob, dados de 2010, o Android ocupa a segunda
posição entre os sistemas operacionais para smartphone no mundo,
possuindo 26% do mercado e atrás apenas do iOS, que detém 40%.
Organize with Sections
Mercado Mobile em 2010 (Crescimento dos SOs)
Um aspecto interessante, porém, é o crescimento do Android no
mercado. O SO vem em uma ascendente contínua, ao contrário do
iOS, que vem oscilando, e do Symbian OS, que perdeu mercado.
Organize with Sections
Mercado Mobile em 2010 (Divisão dos Fabricantes)
A AdMob também mostra que a Apple (aparelhos iOS) possui a maior fatia
de smartphones do mercado. A Nokia (aparelhos Symbian e Maemo)
detém a segunda posição.
Organize with Sections
Android deve superar iOS em breve
Várias pesquisas e especialistas apontam que o Android deve se tornar
mais popular que o iOS nos próximos anos.

Android deve superar sistema operacional do iPhone em 2012, diz estudo.


Organize with Sections

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-apple-
acredita-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/
Lojas de Aplicativos para Dispositivos Móveis (App Stores)

Modelo Antigo (antes das App Stores)

Desenvolvedor /
Publisher / Grande Empresa Operadoras
Pequena Empresa

A porcentagem final para o desenvolvedor independente ou


pequena empresa acabava sendo menor que 20% do total.
Lojas de Aplicativos para Dispositivos Móveis (App Stores)

Novo Modelo (era das App Stores)

Desenvolvedor / Loja de aplicativos do


Empresa Fabricante ou Operadora

A porcentagem final para o desenvolvedor independente ou


empresa agora gira em torno de 70% do total.
Apple App Store
Loja de aplicativos para iOS (iPod, iPhone e iPad) gerenciada
pela Apple e disponível através dos próprios aparelhos.
Lançada em julho de 2008;

340 mil aplicativos e 10 bilhões de downloads até


janeiro de 2011;
App Stores

Disponível em cerca de 90 países;

Share de 70% Desenvolvedor e 30% Apple;

Desenvolvedor paga inscrição e anuidade no valor


de U$ 99,00.
Google Android Market
Loja de aplicativos para Android gerenciada pela Google e
disponível através dos próprios aparelhos.
Lançado em outubro de 2008;

Mais de 200 mil aplicativos e 3 bilhões de


downloads até janeiro de 2011;
App Stores

Disponível em cerca de 48 países;

Share de 70% Desenvolvedor e 30% Google;

Desenvolvedor paga taxa única de inscrição no


valor de U$ 25,00.
Comparativo Android Market X Apple App Store
Dados referentes ao ano de 2009, quando a distância entre
Android Market e a Apple App Store ainda era muito grande.
Organize with Sections
Comparativo Android Market x Apple App Store
A média de downloads da Apple App Store é superior a do Android
Market, bem como a porcentagem de usuários que compram aplicações
(dados de 2009).
Organize with Sections
Nokia Ovi Store
Loja de aplicativos para dispositivos Nokia (Symbian, QT, Flash
Lite e JavaME) e disponível através dos próprios aparelhos.

Lançada em maio de 2009;

50 mil aplicativos e média de 3 milhões de


downloads por dia (janeiro de 2011);
App Stores

Disponível em mais de 200 países;

Share de 70% Desenvolvedor e 30% Nokia;

Desenvolvedor paga taxa única de inscrição


de apenas 1 (um) euro.
Comparação entre App Stores (custo para desenvolvedores)
Relação de App Stores (distimo.com)
In-App Payment é uma tendência
Jogos e aplicativos são gratuitos à priori, embora vários
recursos possam ser comprados dentro do próprio aplicativo.
App Stores
A plataforma Android

Introdução ao Android, Arquitetura e Layouts


Definição do Android

Pilha de Software para Dispositivos Móveis que


inclui um Sistema Operacional, um Middleware e
aplicações-chave.

O Android SDK provê ferramentas e APIs para o


desenvolvimento de aplicações na plataforma
Android usando a linguagem de programação Java.
Recursos do Android

• Biblioteca Gráfica 2D e Suporte a 3D (OpenGL ES 1.0);

• SQLite;

• Suporte a Mídias diversas (MPEG-4, H.264, MP3, AAC, AMR, JPG, PNG,
GIF);

• Bluetooth, EDGE, 3G e WiFi (dependente do hardware);

• Câmera, GPS, Bússola e Acelerômetro (dependente do hardware);

• Para desenvolvedores: Android Development Tools (ADT) Plugin para


Eclipse.
História do Android

Julho de 2005: Google comprou a


startup Android;

Novembro de 2007: Google anunciou a


Open Handset Alliance (OHA) e o
Android;

Ainda nesse mês, liberou a primeira


versão do Android SDK.
História do Android

Outubro de 2008: Android se torna


Open Source;

Ainda nesse mês, lançado o primeiro


smartphone com Android: o HTC G1;

Lançado o primeiro Android Developer


Phone (ADP), baseado no G1.
História do Android

Julho de 2009: HTC Hero, concorrente


direto do iPhone;

Novembro de 2009: Motorola Droid, 1


milhão de unidades em pouco mais de
dois meses;

Chegou no Brasil como Motorola


Milestone e foi sucesso de vendas.
História do Android

Em 2010, dezenas de ótimos


smartphones Android foram lançados;

Setembro de 2010: Samsung Galaxy Tab,


primeiro tablet a concorrer com o iPad;

Dezembro de 2010: Quarto ADP


lançado, o Samsung Nexus S.
Versões do Android

AndroidManifest.xml
Android 1.1 (fevereiro de 2009)
•Alarm Clock
•API Demos
•Browser
•Calculadora
•Camera
•Contatos
•Dev Tools
•Dialer
•Email
•Maps (e StreetView)
•Mensagem
•Música
•Imagens (Galeria)
•Configurações
Android 1.5 Cupcake (maio de 2009)

Grande evolução na interface (UI),


adicionando as seguintes novidades:

•Gravação de vídeos
•Bluetooth A2DP
•Conexão Bluetooth Automática
•Upload de vídeos para YouTube e Picasa
•Copiar e Colar
Android 1.6 Donut (setembro de 2009)

O HTC Hero trazia essa versão, que incluia o


novo Android Market, além das seguintes
melhorias:

•Integração de câmera, gravação de vídeos e


galeria
•Busca por gestos e voz
•Integração de aplicativos
•Grande melhoria no Text-To-Speech
Android 2.0/2.1 Eclair (outubro de 2009)

Uma das versões mais usadas até hoje.

•Desempenho otimizado
•Mais opções de tamanho e resolução de tela
•UI bastante melhorada
•Suporte ao Exchange
•Live wallpapers
•Teclado virtual melhorado
•Bluetooth 2.1
•Google Maps 3.1.2
Android 2.2 Froyo (maio de 2010)

•Suporte completo ao Flash 10.1


•Desempenho bastante otimizado (até 5x)
•Hotspot para até 8 aparelhos
•Home Screen melhorada (atalhos dedicados)
•Melhoria do Exchange
•Melhoria da câmera
•Salvar aplicativos no cartão de memória
•Discagem por bluetooth
Android 2.3 Gingerbread (dezembro de 2010)

•Melhoria do Copiar e Colar


•Interface melhorada
•Suporte a NTFC
•Teclado multitouch
•Suporte a SIP
•Gerenciador de Downloads
•Suporte a câmera frontal e vídeo-conferência
Google App Inventor for Android
Criação de aplicações para Android visualmente, sem a
App Inventor for Android

necessidade de escrever código.


Google App Inventor for Android
Orientado a blocos, basta definir as suas propriedades visuais e
App Inventor for Android

as suas ações para determinados eventos.


App Inventor for Android Google App Inventor for Android
Arquitetura do Android
Arquitetura do Android
Applications
Conjunto de aplicações-chave nativas do Android, incluindo um cliente
de e-mail, gerenciador de SMS, calendário, mapa, navegador,
gerenciador de contatos e outros. Todas essas aplicações foram escritas
em Java.

Application Framework
Desenvolvedores tem acesso completo às mesmas APIs que as
aplicações-chave. O framework provê um conjunto de Views que podem
ser utilizados para construir a interface da aplicação, incluindo listas,
tabelas, caixas de texto, botões e até mesmo um browser embutido.
Disponibiliza também Content Providers que permitem o acesso a dados
de outras aplicações (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 aplicação mostre
avisos personalizados) e o Activity Manager (gerencia o ciclo de vida da
aplicação e a sua navegação).
Arquitetura do Android
Libraries
Conjunto de bibliotecas C/C++ utilizadas por vários componentes do
Android. Essas bibliotecas provêem recursos que são expostos aos
desenvolvedores através de sua camada sobrejacente: Application
Framework.

Android Runtime
Cada aplicação no Android roda em um processo diferente no Linux e
para cada processo é criada uma instância da máquina virtual Dalvik.
Essa máquina virtual foi criada de forma que um dispositivo possa
executar múltiplas instâncias de forma eficiente.
As classes compiladas da aplicação são transformadas para o formato
.dex (Dalvik Executable), otimizado para uma mínima utilização de
memória. A Dalvik VM interage diretamente com o kernel Linux para
execução de funcionalidades subjacentes como tratamento de
concorrência e gerenciamento de memória.
Noções sobre aplicações Android

As aplicações são escritas em Java e o seu código compilado,


juntamente com os recursos que a aplicação utilizada, são
empacotados em um arquivo .apk pela ferramenta aapt. É
esse arquivo .apk que é usado para distribuir a aplicação e
instalá-la nos dispositivos Android;

Por padrão, cada aplicação é executada como um processo


separado, com ID único e máquina virtual própria, isolando o
seu código das demais aplicações.
Componentes da Aplicação
Um recurso fundamental do Android é o reuso de componentes. Caso uma
aplicação precise disponibilizar uma lista de imagens com scrolling e outra
aplicação apresenta tal componente e o disponibilizou para as demais, pode-
se invocar esse componente.

Devido a essa organização dos aplicativos em componentes, as aplicações


Android não possuem um único ponto de entrada (não há um método main(),
por exemplo). Ao invés disso, as aplicações apresentam componentes
essenciais que o sistema pode instanciar e executar quando necessário. Esses
componentes podem ser de quatro tipos:
Activities (apresenta uma interface visual para o usuário)

Services (roda em segundo plano por um período de tempo indeterminado)

Broadcast Receivers (recebe e reage a eventos do sistema)

Content providers (dados do aplicativo disponíveis para os demais)


Ativando e desativando componentes
Content Providers são ativados por meio de uma requisição de um
ContentResolver. Os demais componentes (Activities, Services e Broadcast
Receivers) são ativados por mensagens assíncronas denominadas intents. Trata-
se de um objeto da classe Intent que armazena o conteúdo da mensagem. Para
activities e services, o objeto apresenta o nome da ação que está sendo
requisitada bem como o endereço do dado em que atuará, além de outras coisas.
No caso de uma Activity, por exemplo, pode conter uma requisição para
apresentar uma imagem ao usuário ou permitir que o usuário edite algum texto.
Já para Broadcast Receivers, o objeto Intent pode anunciar que um botão da
câmera foi pressionado, por exemplo.

Content Provider e BroadCast Receiver não precisam ser desativados, uma vez
que permanecem ativos somente enquanto estão respondendo requisições.
Já Activities e Services podem permanecer em execução por um longo
período de tempo, daí a necessidade de finalizá-los através dos métodos
finish() e stopSelf(), respectivamente.
Activities

O componente mais comum de uma aplicação é um Activity. É implementado


como uma subclasse de Activity e uma aplicação 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 aplicação é iniciada.
Mover-se de uma Activity para outra consiste em fazer com que a Activity atual
invoque a próxima.

Cada Activity possui uma janela padrão para


O visual da janela é composto
desenhar. Normalmente a janela ocupa a tela
por uma hierarquia de views,
toda mas também pode ser menor e flutuar
objetos derivados da classe
sobre outras janelas. Uma Activity pode
base View. As views também
conter janelas adicionais, como por exemplo
são responsáveis por
um dialog que exige uma resposta do usuário
responder às ações do usuário
ou mostra um aviso quando um dado item é
direcionadas ao seu espaço.
selecionado.
Activities e Tasks

Conforme dito anteriormente, uma Activity pode iniciar outra, inclusive uma que
pertença a outro aplicativo. Por exemplo: uma aplicação deseja mostrar o mapa
de algum local. Já existe uma Activity que o faz, então tudo o que a sua Activity
precisa fazer é chamar o método startActivity() passando como parâmetro o
objeto da classe Intent com as informações necessárias. O mapa será mostrado e,
quando o usuário pressionar a tecla voltar, sua Activity será mostrada novamente
na tela.

Para o usuário, isso é transparente. O Android mantém ambas as activities na


mesma Task. Uma Task, para o usuário, é como se fosse uma aplicação.
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 ações do usuário.
Ciclo de vida de uma Activity
Basicamente, uma Activity possui
três estados:

Ativo: quando a Activity está


no topo da pilha (visível na
tela e recebendo as ações do
usuário);

Pausado: quando a Activity


perdeu o foco mas
permanece visível ao usuário.
Ou seja, há outra Activity no
topo que é transparente ou
não ocupa toda a tela;

Parado: quando a Activity


está ofuscada por outra.
Mantém o estado mas pode
ser eliminada pelo sistema
em caso de falta de memória.
Ciclo de vida de uma Activity
Services
Diferentemente de activities, os services não possuem interface e executam em
segundo plano por um período de tempo indeterminado. Cada serviço é uma
classe que herda de Service.

Um exemplo clássico de Service é um tocador


de músicas. A aplicação deve consistir de uma
ou mais activities que permitem ao usuário
selecionar as músicas e começar a tocá-las.
Contudo, a execução das músicas em si não
faz parte da Activity mas sim de um Service,
uma vez que o usuário espera que a música
continue a ser tocada após sair da tela.
Ciclo de vida de um Service
Broadcast Receivers

Componente que recebe e reage a anúncios de broadcast, geralmente oriundos


do sistema. Cada receiver é uma classe que herda de BroadCastReceiver.

Mudança no fuso horário, anúncio de bateria


fraca e mudança da linguagem por parte do
usuário são exemplos de anúncios que podem
ser capturados por Broadcast Receivers.

Uma aplicação pode conter quantos


receptores quiser. Os receptores podem
iniciar uma Activity ou utilizar o
NotificationManager para alertar o usuário
(acender a luz do aparelho, vibrar, executar
um som, etc).
Ciclo de vida de Broadcast Receivers

Quando uma mensagem de broadcast chega ao receptor, o Android invoca o


método onReceive(), passando como parâmetro um objeto Intent contendo a
mensagem.

O Broadcast Receiver fica ativo apenas enquanto está executando esse método.
Content Providers

Componente que torna um conjunto específico de dados da aplicação disponível


para outras aplicações. Cada provider é uma classe que herda de ContentProvider
e disponibiliza um conjunto padrão de métodos para que outras aplicações
possam recuperar e armazenar dados do tipo que o provedor controla.

As aplicações não podem acessar


os métodos de um Content
Provider diretamente. Para isso,
elas precisam de um objeto
ContentResolver, o qual pode
conversar com qualquer Content
Provider.
Como o Android suporta múltiplas telas?
Desde o Android 1.6, a plataforma provê suporte a múltiplos
Suporte a Múltiplas Telas

tamanhos de tela e resoluções, 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 resoluções suportadas em:

• Um conjunto de três tamanhos: large, normal e small;


• Um conjunto de três densidades: hdpi (high), mdpi (medium) e ldpi (low).

Dessa forma, a aplicação pode prover layouts e imagens para qualquer


um desses três conjuntos, sem a necessidade de trabalhar com o
tamanho físico real da tela do aparelho.

Em tempo de execução, o Android carrega o conjunto adequado de


recursos, baseado no dispositivo em questão.
Suporte a Múltiplas Telas
Suporte a Múltiplas Telas
Suporte a Múltiplas Telas
Organização de pastas de layout e imagens para uma aplicação que, em tese,
suporta todos os tamanhos de telas e resoluções.
Views e ViewGroups em Android
Em Android, todos os componentes de interface gráfica são representados por
subclasses de android.view.View que representam os componentes gráficos
como TextView, Button, TextEdit, RadioButton, CheckBox, etc. Além da classe
android.view.ViewGroup, que representa um container de views e também de
ViewGroups. Ela é a classe base para componentes de layouts, como
LinearLayout, RelativeLayout, AbsoluteLayout, FrameLayout, TableLayout, etc.
Hierarquia de classes de UI
Layouts e Layout Params em Android

Para que os componentes possam ser acomodados de acordo com o layout de


seu pai, os mesmos devem manter uma relação de obediência. Sendo assim, cada
filho deve configurar os seus parâmetros de layouts, por meio da classe
ViewGroup.LayoutParams, que permite que estes determinem suas propriedades
de posição e tamanho referente ao layout de seus pais.
LinearLayout
O layout básico, padrão quando da geração de um .XML de layout no Android, é o
LinearLayout. Como o próprio nome diz, ele dispõe os componentes linearmente
em uma unica direção definida pelo atributo android:layout_orientation.
LinearLayout e LayoutParams

android:layout_gravity: similar ao float do CSS, o


gravity define a posição do conteúdo do
LinearLayout na tela, podendo-se usar top,
bottom, left, right, center, center_vertical,
center_horizontal, etc. Pode-se usar combinações
através do conector “|”. Por exemplo: “bottom |
right”.

android:layout_weight: indica quanto do espaço


extra no LinearLayout será alocado para a visão
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 espaçamento e, casa todos tenham o
mesmo peso, a tela é dividida igualmente. Aplicação de peso (weight) em
um componente do LinearLayout
LinearLayout (Código)
FrameLayout

Arranja seus filhos de acordo com uma pilha de componentes que são
adicionados, sendo que o topo da pilha contém o objeto que foi adicionado por
último. Pode-se usar quando se tem várias imagens e uma é sobreposta pela
outra (como um slide de imagens) conforme vão sendo adicionadas.

Criando uma pilha de


componentes com FrameLayout Sobreposição de componentes
com FrameLayout
FrameLayout (Código)

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.

Posicionando componentes no
AbsoluteLayout
AbsoluteLayout (Código)
RelativeLayout

Os componentes são ajustados através de relacionamentos entre si ou ao seu pai.


RelativeLayout (Código)
TableLayout
Comporta seus filhos em linhas e colunas. Cada filho é representado por um
TableRow (uma espécie de LinearLayout na horizontal) que permite que uma ou
ais células sejam adicionadas horizontalmente, sendo que cada célula pode
conter um único View.
TableLayout (Código)
What’s Your Message?
OBRIGADO!

Você também pode gostar