A plataforma Android: Uma Introdução Android - PUC-Rio
A plataforma Android: Uma Introdução Android - PUC-Rio A plataforma Android: Uma Introdução Android - PUC-Rio
A plataforma Android: Uma Introdução © Markus Endler Android Iniciativa da Google de prover uma plataforma aberta para Web móvel Open p Handset Alliance Associação de um grupo bastante heterogêneo de empresas (operadoras, fabricantes de celulares) > 30 companhias Força do projeto se baseia no conceito de colaboração Set Set./08: /08: Google anunciou o Andoid Market para comercialização de aplicações Set./08: É lançado G1 Primeiro dispositivo para plataforma Android 2
- Page 2 and 3: O que é Android? Pilha de softwar
- Page 4 and 5: Cliente de email Programa SMS Cal
- Page 6 and 7: Android Runtime Aplicação Androi
- Page 8 and 9: Tipos de Elementos Activity = uma t
- Page 10 and 11: Aplicação Android Obs: Cada Activ
A <strong>plataforma</strong> <strong>Android</strong>: <strong>Uma</strong><br />
<strong>Introdução</strong><br />
© Markus Endler<br />
<strong>Android</strong><br />
Iniciativa da Google de prover uma <strong>plataforma</strong><br />
aberta para Web móvel<br />
Open p Handset Alliance<br />
Associação de um grupo bastante heterogêneo<br />
de empresas (operadoras, fabricantes de celulares)<br />
> 30 companhias<br />
Força do projeto se baseia no conceito de<br />
colaboração<br />
Set Set./08: /08: Google anunciou o Andoid Market<br />
para comercialização de aplicações<br />
Set./08: É lançado G1<br />
Primeiro dispositivo para <strong>plataforma</strong> <strong>Android</strong><br />
2
O que é <strong>Android</strong>?<br />
Pilha de softwares para dispositivos móveis:<br />
Um sistema operacional<br />
Um middleware<br />
Conjunto de aplicações<br />
<strong>Android</strong> SDK:<br />
Projetos<br />
Ferramentas de desenvolvimento<br />
Emulador<br />
Conjunto de bibliotecas<br />
Linguagem de programação:<br />
Java<br />
Máquina virtual:<br />
Dalvik (Kernel GNU/Linux)<br />
<strong>Android</strong> → Definição<br />
Características<br />
Application Framewok:<br />
Permite o reuso e a substituição de componentes<br />
Máquina virtual Dalvik:<br />
Otimizada para dispositivos móveis<br />
Um navegador integrado:<br />
Baseado no projeto WebKit (código aberto)<br />
Gráficos otimizados:<br />
Bibliotecas gráficas 2D<br />
Gráficos 3D baseado na especificação OpenGL 1.0<br />
SQLite:<br />
Para armazenamento de dados estruturados<br />
Suporte para mídias:<br />
Aúdio, vídeo, formatos de imagens (MPEG4, H.264, MP3, AAC, AMR,<br />
JPG, PNG e GIF)<br />
<strong>Android</strong> → Características<br />
3<br />
4
Características<br />
Questões dependentes do hardware:<br />
TTelefonia l f i GPRS/GSM e EDGE<br />
Telefonia 3G<br />
WiFi<br />
Câmera<br />
GPS<br />
Bússola<br />
Acelerômetro<br />
<strong>Android</strong> → Características<br />
Arquitetura<br />
© Markus Endler<br />
5
Cliente de email<br />
Programa SMS<br />
Calendário<br />
Mapas<br />
<strong>Android</strong> → Arquitetura → Aplicações<br />
View<br />
Content Providers<br />
Resource Manager<br />
Notification Manager<br />
Activity Manager<br />
<strong>Android</strong> → Arquitetura → Framework<br />
Aplicações<br />
Navegador<br />
Contatos<br />
Entre outros.<br />
Framework<br />
7<br />
8
System C Library<br />
Media Libraries<br />
Surface Manager<br />
LibWebCore<br />
Bibliotecas<br />
Andróid inclui um conjunto de bibliotecas C/C++ usadas por<br />
diversos componentes do sistema:<br />
<strong>Android</strong> → Arquitetura → Bibliotecas<br />
SGL<br />
3D Libraries<br />
FreeType<br />
SQLite<br />
Bibliotecas<br />
System C library – uma implementação derivada da biblioteca C padrão<br />
sistema (libc) do BSD adaptada para dispositivos rodando Linux.<br />
Media Libraries – baseado no PacketVideo’s OpenCORE; as bibliotecas<br />
suportam os mais populares formatos de audio e video, bem como<br />
imagens estáticas.<br />
Surface Manager –acesso ao subsistema de exibição bem como as<br />
múltiplas camadas de aplicações 2D e 3D;<br />
LibWebCore – um web browser engine utilizado no <strong>Android</strong> Browser<br />
SGL – o engine de gráficos 2D<br />
3D libraries – uma implementação baseada no OpenGL 1.0; as<br />
bibliotecas utilizam aceleração 3D via hardware (quando disponível) ou o<br />
software ft dde renderização d i ã 3D altamente lt t otimizado ti i d iincluído l íd no A<strong>Android</strong>. d id<br />
FreeType – renderização de fontes bitmap e vector<br />
SQLite – um poderoso e leve engine de banco de dados relacional<br />
disponível para todas as aplicações<br />
© Markus Endler<br />
9
<strong>Android</strong> Runtime<br />
Aplicação <strong>Android</strong>:<br />
É um processo Linux<br />
Possui sua própria instância da máquina virtual<br />
Dalvik<br />
Executa arquivos .dex (ferramenta dx)<br />
<strong>Android</strong> → Arquitetura → <strong>Android</strong> Runtime<br />
Versão do kernel:<br />
2.6<br />
O kernel atua como<br />
uma camada de<br />
abstração entre o<br />
hardware e o resto da<br />
pilha de software<br />
<strong>Android</strong> → Arquitetura → Linux Kernel<br />
Linux Kernel<br />
Serviços:<br />
Segurança<br />
Gerenciamento de<br />
memória<br />
Gerenciamento de<br />
processos<br />
Pilha de protocolos de rede<br />
Modelo de drives<br />
11<br />
12
Estrutura de uma aplicação <strong>Android</strong><br />
Existem 4(5) tipos básicos de elementos:<br />
Activities<br />
Intents e IntentFilters ( (e BroadcastReceivers) )<br />
Services<br />
Content Providers<br />
Nem toda aplicação precisa ter todos os tipos, mas terá<br />
alguma combinação destes destes.<br />
Os componentes que compõem a aplicação são<br />
declarados no arquivo <strong>Android</strong>Manifest.xml.<br />
© Markus Endler<br />
<strong>Android</strong> Manifest<br />
<strong>Android</strong>Manifest.xml é necessário p/ cada aplicação.<br />
Descreve os elementos da aplicação: (Activities,<br />
Content Providers, Services, and Intent Receivers)<br />
globalmente visíveis, as classes de implementação<br />
de cada componente, e qual tipo de dado este pode<br />
tratar, quando pode ser ativado, etc.<br />
Compara-se cada Intent gerado com os Intentfilters<br />
registrados para identificar qual é a atividade mais<br />
apropriada p p ppara<br />
tratar este intent<br />
Pode-se também descrever as permissões e<br />
parâmetros de instrumentação<br />
© Markus Endler
Tipos de Elementos<br />
Activity = uma tela de sua aplicação; cada uma é uma<br />
especialização da classe base Activity. Sua classe<br />
será composta de views que respondem a eventos;<br />
uma atividade pode retornar um valor para outra<br />
atividade;<br />
Intent = classe usada para passar o controle de uma<br />
atividade para outra; um intent consiste de uma ação<br />
(evento/requisição) e uma URI indicando um dado<br />
sobre o qual a ação deve ser executada. Valores<br />
comuns para ações: õ MAIN ( (entrada t d dda aplicação), li ã )<br />
VIEW, PICK, EDIT, etc.<br />
Exemplo: para visualizar informação de contato criase<br />
um intent com açãoVIEW e a URI indicando os<br />
dados associados a uma pessoa.<br />
© Markus Endler<br />
Tipos de Elementos<br />
IntentFilter = desrição de quais intents uma Activity (ou<br />
BBroadcastReceiver) d tR i ) é capaz dde ttratar t e são ã<br />
publicados no arquivo <strong>Android</strong>Manifest.xml<br />
Exemplo: <strong>Uma</strong> Activity capaz de mostrar dados de<br />
uma pessoa iria publicar um IntentFilter com a<br />
capacidade VIEW para determinados dados;<br />
Obs: Activities com IntentFilters equivalentes podem<br />
ser trocadas a qualquer instante<br />
© Markus Endler
Tipos de Elementos<br />
BroadcastReceiver deve ser usado quando a aplicação<br />
deve reagir a eventos externos à aplicação (e.g.<br />
ligação telefônica, telefônica timer, timer rede wifi ifi disponí disponível, el etc etc.) )<br />
BroadcastReceivers são definidos no<br />
<strong>Android</strong>Manifest.xml, ou são registrados usando<br />
método Context.registerReceiver().<br />
Obs: A aplicação não precisa estar executando; o<br />
sistema vai inciá-la quando o BroadcastReceiver é<br />
di disparado d<br />
Aplicações também podem enviar seus<br />
IntentBroadcasts para outras aplicações<br />
© Markus Endler<br />
Tipos de Elementos<br />
Serviço = uma thread (processo) executando em<br />
background, independentemente de uma Interface do<br />
usuário (p.ex. tocar músicas de uma playlist)<br />
Activities (para escolha do album) podem se conectar a<br />
um serviço usando Context.bindService() para inicia-lo<br />
(se já não executa) .<strong>Uma</strong> vez conectado, pode-se<br />
interagir com ele através da interface exportada pelo<br />
mesmo (p.ex. p/ “pause”)<br />
ContentProvider = uma classe usada para p qque aplicações p ç<br />
compartilhem dados entre sí ; implementa um conjunto<br />
de métodos padrão para armazenar e recuperar dados<br />
de um determinado tipo;<br />
Obs: aplicações também podem interagir através de um<br />
banco de dados SQL ou de arquivos<br />
© Markus Endler
Aplicação <strong>Android</strong><br />
Obs: Cada Activity representa uma tela<br />
Act1 Act3<br />
Act2 Act4<br />
BcastReceiver<br />
Manifest<br />
IntentBcast<br />
GUI Commands & Displayy<br />
Content<br />
Provider<br />
Act1 Act3<br />
Act2<br />
Manifest<br />
<strong>Android</strong> Application Framework/<br />
Dalvik/ C libraries<br />
Linux<br />
© Markus Endler<br />
Content<br />
Provider<br />
put/ get<br />
Memory<br />
Instalação do SDK<br />
Intent<br />
Intent Fiter<br />
CntxtBindService<br />
Service<br />
A<br />
Após realizar o download do SDK, descompactar o<br />
arquivo .zip zip<br />
Por exemplo, android_sdk_windows_m3-rc22a.zip<br />
Instalando o plugin para Eclipse (ADT)<br />
https://dl-ssl.google.com/android/eclipse/<br />
Data Funneling → Fases<br />
20
Para saber mais...<br />
Leia a documentação<br />
Developer Toolbox<br />
http://code.google.com/android/toolbox/index.html<br />
Developing Applications:<br />
http://code.google.com/android/devel/index.html<br />
Consulte os grupos de discussão:<br />
http://code http://code.google.com/android/groups.html<br />
google com/android/groups html<br />
http://forum.portalandroid.org/<br />
21