Tendências e tecnologias para desenvolvimento mobile
1. 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
2. Sobre mim
Empreendedor Yupi Studios
(http://yupistudios.com);
Desenvolvedor Mobile (LAViD);
Mestrando em Informática (UFPB);
Analista de Sistemas (Cehap).
7. 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.
16. O Mercado Mobile
Mercado brasileiro de telefonia móvel;
Organize with Sections
Números do mercado internacional;
Mercado de jogos (Brasil e mundo).
19. 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%
29. 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.
30. 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).
36. 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
37. 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
38. 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
39. 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/
40. 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.
41. 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.
42. 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.
43. 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.
44. 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
45. 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
46. 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.
49. 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
51. 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.
52. 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.
53. 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.
54. 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.
55. 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.
56. 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.
59. 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
60. 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
61. 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
62. 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
63. 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
64. Google App Inventor for Android
Criação de aplicações para Android visualmente, sem a
App Inventor for Android
necessidade de escrever código.
65. 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.
68. 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).
69. 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.
70. 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.
71. 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)
72. 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.
73. 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.
74. 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.
75. 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.
77. 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.
79. 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).
80. 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.
81. 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.
82. 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.
85. 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.
86. 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.
88. 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.
89. 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.
90. 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
92. 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
93. FrameLayout (Código)
Nota: O FrameLayout é usado comumente a partir de uma de suas subclasses,
tais como ImageSwitcher, ViewAnimator, ViewSwitcher, ScrollView, TabHost, etc.
94. AbsoluteLayout
Implementa um plano cartesiano e posiciona os componentes em coordenadas X,
Y de forma absoluta.
Posicionando componentes no
AbsoluteLayout
98. 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.