O documento apresenta um cronograma para um minicurso básico de Android com 4 dias de duração. O cronograma inclui tópicos como preparação do ambiente de desenvolvimento, ciclo de vida de activities, layouts, widgets e introdução a SQLite.
2. Apresentação
• Thales Levi Azevedo Valente
– selaht7@gmail.com
– Bacharel em Ciência da Computação – UFMA
– Pesquisador em:
• Processamento de Imagens
• Android
– Lattes:
• http://lattes.cnpq.br/1509490497932923
(28/05 – 03/07)/2015 2Minicurso Básico de Android – Thales Levi / UFMA
3. O trabalho Minicurso de Android Básico I (este trabalho), bem como suas outras partes
(referente também aos dias 2, 3 e 4), de Thales Levi Azevedo Valente está licenciado com
uma Licença Creative Commons - Atribuição-NãoComercial-SemDerivações 4.0
Internacional. Para ver uma cópia desta licença, visite
http://creativecommons.org/licenses/by-nc-nd/4.0/.
• Você é livre para:
– Copiar, distribuir o material
• Sobre as seguintes condições:
– Atribuição de créditos: você deve fazer referência ao autor
– Não-comercial: você não deve usar este material para propósitos comerciais
– Não-Derivados: Se você criar trabalhos derivados deste, você não deve distribuí-lo.
Termos de uso deste material
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 3
4. Cronograma do Curso
• Introdução
• Mostra de Aplicativos
• Foco no Android
• API do Android
• Execução das Aplicações
• Primeiros Contatos:
Preparando o ambiente de desenvolvimento Android com Eclipse – Passo a Passo
Ciclo de vida de uma Activity
Criando o primeiro projeto Android
Estrutura básica de um projeto Android
Criando Máquina Virtual usando o AVD Manager
Executando o primeiro “Hello World”
Apresentando a IDE e Interagindo com a Máquina Virtual
4Minicurso Básico de Android – Thales Levi / UFMA(28/05 – 03/07)/2015
6. Cronograma do Curso
• Roteiro Android(Dia 3):
• Listas e adaptadores
• Menu
• ActionBar
• Arquivo Manifest.xml
• Arquivos em Android
• Adicionando bibliotecas Externas
6Minicurso Básico de Android – Thales Levi / UFMA(28/05 – 03/07)/2015
7. Cronograma do Curso
• Roteiro Android(Dia 4):
• Notificações
• Intents
• Passagem e recebimento de objetos entre
Activities
• Introdução à SQLite
• Introdução aos Provedores de Conteúdo
7Minicurso Básico de Android – Thales Levi / UFMA(28/05 – 03/07)/2015
11. • Plataforma Mobile Open Source
• Código aberto e distribuído sob licença Apache 2.0, ou
seja, códigos-fonte acessíveis. http://source.android.com
• Mantido pela Open Handeset Alliance (OHA)
– Aliança entre diversas empresas para criar padrões
abertos para telefonia móvel.
• Android domina 84,6% do mercado global de
smartphones. (Pesquisa realizada no segundo trimestre 2014
pela Strategy Analytics)
Foco no Android
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 11
12. • Baseado em Linux, com desenvolvimento iniciado em 2003 pela
empresa Android Inc.
• 2005 - foi adquirida pela Google
• 2007 - surgiu a Open Handset Alliance – associação de empresas com
a missão de desenvolver uma plataforma móvel:
– Completa
– Aberta
– gratuita
• 2007 - lançamento da versão beta do Android SDK
Foco no Android
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 12
13. API do Android
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 13
D
o
w
n
-
T
o
p
14. • Camada onde se encontram os drivers de hardware.
• Provê serviços essenciais (segurança, rede, gerenciamentoo de
memória e processos, abstração do hardware para outras camadas)
• Versão modificada do core do Linux 2.6. Exemplos de modificações:
– Binder: permite que um processo possa chamar uma rotina em outro
processo
– OOM (Out-of-Memory Handler): termina processos quando há falta de
memória
– Ashmem e pmem: gerenciadores de memória compartilhada com
melhor suporte à dispositivos com pouca capacidade de memória
Camada Vermelha - Linux Kernel
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 14
15. • Bibliotecas responsáveis por:
– Intermediar acesso ao display.
– Suporte aos diferentes formatos mídia (aúdio, vídeo, imagens).
– Gráficos 2D e 3D.
– Banco de Dados.
Camada Verde - Bibliotecas
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 15
16. • Bibliotecas do núcleo Java (Core Libraries) e MVD (Máquina Virtual
Dalvik), otimizada para consumir pouca memória.
• Aplicações são executadas em sua própria instância de MV.
• Utiliza arquivos .dex gerados a partir das classes Javas compiladas
• Os .dex e todos os recursos da aplicação são então “empacotados”
em um arquivo .apk. Podem ser encontrados na pasta bin do projeto
Camada Amarela – Tempo de execução
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 16
.class
.class.class .dx tool .dex
.apk
.
recursos
17. • Cada aplicação possui sua própria
instância de máquina Dalvik, ou seja,
são executadas de forma segura e
isoladas das demais.
• Mas o que isso quer dizer?
– Nenhuma aplicação pode acessar
recursos de outra aplicação
– Nenhuma aplicação pode acessar
diretamente recursos do sistema
(contatos, sensores, rede) sem que o
usuário explicitamente autorize
Execução das Aplicações
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 17
Sistema
MVD n-2
Aplicação n-2
MVD n
Aplicação n
MVD n-1
Aplicação n-1
MVD n-3
Aplicação n-3
18. • Conjunto de componentes que oferecem serviços para aplicações.
Exemplos:
– Gerenciador de Pacotes: mantém registro das aplicações instaladas.
– Gerenciador de Activities: gerencia o ciclo de vida das Activities e
organiza-as em pilhas.
– Provedor de Conteúdos: Compartilhamento de dados entre aplicações.
– Gerenciador de Recursos: provê acesso a tudo que faz parte do
aplicativo que não seja código (XML, mídias, arquivos)
– Gerenciador de Notificações: permite que uma aplicação notifique o
usuário sobre algum evento através de vibração, piscar de leds, tocar
algum som ou mostrar um ícone na barra de status
Camada Azul 1 – Framework de Aplicações
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 18
19. • Camada de interação entre o usuário e o dispositivo. Nela se
encontram os aplicativos. Exemplos:
– Cliente de e-mail
– Aplicativos de mensagens
– Gerenciadores de contatos
– Calendário
– Mapas
– Navegador
Camada Azul 2 –Aplicações
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 19
20. • Android encoraja o desenvolvimento em
alto nível;
• Android usa Java como a principal
linguagem de programação;
• Herda classes básicas do Java padrão:
– String, Container, Math, IO e Network
• Adiciona novas classes especificas para
dispositivos móveis:
– Camera, Telephony, Map, Speech
Considerações
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 20
22. • Java Runtime Environment (JRE) para a versão do seu sistema (32/64
bits).
• Java Development Kit (JDK) para a versão do seu sistema (32/64
bits).
• Baixar e descompactar a IDE Eclipse ADT Bundle com o Android SDK
para a versão de seu sistema(32/64 bits).
• http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html
• http://downloads.puresoftware.org/files/android/adt-bundle/
Baixe e instale os seguintes itens (os mais atuais preferencialmente):
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 22
23. Página de download do JRE.
Baixe o JRE no site da Oracle e instale em sua máquina.
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 23
24. Página de download do JDK.
Baixe o JDK no site da Oracle e instale em sua máquina
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 24
25. Página de download do Eclipse ADT
Baixe a IDE Eclipse ADT no site da Google.
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 25
26. Descompacte a IDE Elipse ADT e o Android SDK
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 26
27. Tela de escolha do workspace
Abra o Eclipse e escolha o seu workspace
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 27
28. Figura X. Página de download do Eclipse ADT
Tela inicial da IDE Elipse ADT
Logo após, o Eclipse carregará e abrirá sua tela de interface.
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 28
29. Verificaremos se o diretório do SDK está correto.
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 29
Tela inicial da IDE Elipse ADT
30. Clique em “Browse” para selecionar o diretório, caso queira mudar
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 30
Tela da opção preferências do Eclipse ADT
31. Navegue até o diretório do sdk e clique em “OK”
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 31
Tela da opção preferências do Eclipse ADT
32. Clique no botão “Apply” para aplicar a mudança de diretório.
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 32
Tela da opção preferências do Eclipse ADT
33. Serão listadas todas as APIs instaladas em seu SDK. Finalize clicando no botão “OK”
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 33
Tela da opção preferências do Eclipse ADT
34. Fechando o Eclipse ADT
Caso apareçam estes erros, apenas reinicie o eclipse e serão resolvidos.
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 34
35. Figura X. Página de download do Eclipse ADT
Tela inicial do Elipse ADT
Abriremos o SDK Manager apertando este botão
Logo após, o Eclipse carregará e abrirá sua tela de interface.
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 35
36. • É um gerenciador de pacotes do SDK com um UI para iteração com
usuário.
• O SDK nada mais é que o kit de desenvolvimento para Android,
contendo bibliotecas e ferramentas de desenvolvimento necessários
para construção, teste e debug de aplicativos para Android.
O que é o SDK Manager ?
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 36
37. Inicialização do Android SDK
Inicialização do Android SDK
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 37
38. Instalar os Tools, de preferência os mais atualizados por questões de
compatibilidade com as APIs
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 38
39. • SDK Tools:
– Dalvik Debug Monitor Server (ddms): rede, memória utilizada, logcat,
explorador de arquivos, captura de tela, informações sobre o disp.
– Hierarchy Viewer: mostra a hierarquia dos layouts.
– Mksdcard: cria imagem de disco para usar com sdcard no emulador
• SDK Platform Tools:
– Adb: comunicação em linha de comando entre o user e dispositivos
– Sqlite3: dá acesso a arquivos Sqlite criados e usados no Android
• SDK Build Tools: requerido para geração de código
O que são estes 3 itens? (exemplos)
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 39
40. Exemplo de uso do ADB – instalação de APKs externos no AVD
• Abra o CMD
• Mude para o diretório do Android sdkplatform – tools
• Execute o comando adb install “...diretório
opencvapkapk conforme seu emulador”
• Espere instalar e feche o CMD
• Aparecerá um novo Aplicativo no emulador: OpenCV
Manager
• OBS: deve haver apenas um AVD inicializado e
quaisquer dispositivos Android não deve está
conectado no computador em modo de debug. Caso
falhe por falta de conexão com o ADB, reinicie o
emulador e o Eclipse, para reiniciar o processo do
ADB.
(28/05 –
03/07)/2015
40Minicurso Básico de Android – Thales Levi / UFMA
41. A mais recente API é necessária para se utilizar as bibliotecas de compatibilidade.
Instale mesmo que não a use
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 41
42. Depois, instale suas APIs preferenciais.
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 42
43. Selecionaremos essa API por ainda ser muito utilizada por uma parte do
mercado
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 43
44. Extras necessários para utilização das bibliotecas de compatibilidade e usar um
smartphone para teste direto do aplicativo
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 44
45. • SDK Platform: kit de desenvolvimento para plataforma específica
• ...System Images: tipos de emulador com seus respectivos
processadores. Emuladores são utilizados para executar aplicativos
• Android Support Repository e Android Support Libraries: necessários
para utilização de bibliotecas de compatibilidade.
• Google USB driver: necessário para utilização de aparelhos físicos ao
invés de emuladores.
O que marcamos?
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 45
46. Ao clicar no botão instalar, aceite os termos de compromisso e clique em
instalar
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 46
47. As bibliotecas serão baixadas e o SDK Manager será reiniciado.
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 47
49. • Representa uma simples tela com interface com o usuário
• Um programa Android inicia com uma Activity assim como
programas Java/C iniciam com uma Main()
• Tem um ciclo de vida bem definido
• Se uma Activity não estiver em primeiro plano, ela pode ser
destruída pelo sistema caso haja falta de memória.
O que é uma Activity ?
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 49
50. • Gerenciadas em pilha -> Activity Manager
• Quando uma Activity é iniciada, esta vai para o
topo da pilha.
Gerência de Activities
New ActivityRunning Activity
Activity 1
Activity 2
Activity n-1
Last Running
Activity
Activity n-3
Free
ActivityStack
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 50
51. • OnCreate():
– o sistema o chama ao criar a Activity (Componente “mãe” de GUI)
– Nele deve ser chamado setContentView()para definir o layout.
– É executada somente uma vez durante a “vida” do aplicativo
• OnStart():
– Chamado quando a Activity é visível para o usuário.
• OnResume():
– Chamado quando o aplicativo irá interagir com o usuário
Principais métodos:
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 51
52. • OnPause():
– É o primeiro método a ser chamado quando a Activity perde o foco (uma
outra Activity vem à frente, mas a primeira não deixa de ser visível).
– Mudanças feitas pelo usuário devem ser salvas neste ponto (ex:
mudanças no provedor de conteúdo, como contatos, mídias, etc),
animações devem ser paradas, sensores, etc..
– Deve ser executada rapidamente, pois a próxima Activity só será só
“ganhará a tela” quando este método for finalizado.
Principais métodos:
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 52
53. • onStop():
– Quando chamado, o aplicativo não é mais visível para o usuário.
– Por algum motivo, um outro aplicativo foi colocado no topo da pilha
• onDestroy():
– Destruição da Activity
– Pode tanto ser chamada em código, quanto o sistema pode fazê-lo caso
precise de memória
• onRestart():
– Chamado quando o aplicativo volta ao primeiro plano.
Principais métodos:
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 53
55. • Tempo de vida inteiro:
– Ocorre entre onCreat() e onDestroy()
• Tempo de vida visível:
– Ocorre entre onStart() e onStop()
– A Activity está visível, mas não está em primeiro plano.
• Tempo de vida em primeiro plano:
– Ocorre ente onResume() e onPause()
– A Activity está a frente de todas as outras e interagindo com o usuário.
Loops chaves do ciclo de vida
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 55
57. Selecione a opção de criação de novo projeto.
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 57
58. Escolha o nome do projeto, pacote, aplicação e APIs mínima, máxima e de
compilação do projeto
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 58
59. Deixe como está, apenas “dê next”
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 59
60. Tela de customização do ícone.
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 60
61. Tela de escolha do esqueleto inicial da primeira tela de seu
aplicativo. Selecionaremos a tela vazia.
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 61
62. Definiremos os nomes da classe principal e do arquivo de layout
dela
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 62
63. Projeto criado. Ignore estes erros, se ocorrerem. São bugs da IDE.
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 63
65. • O primeiro projeto é uma biblioteca de compatibilidade. Ela está
localizada no Android SDK e selecionamos ela no SDK.
• Esta biblioteca necessita da API mais atual (no momento, a API 22 -
Android 5.1). Tanto ela quanto o seu projeto devem ter esta API
como API de compilação ou haverá erros tanto na linkagem, quanto
a biblioteca acusará erros de falta de recursos (classes java ou
arquivos xml de layouts)
Porque foram criados dois projetos?
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA
65
67. Estrutura básica de um projeto Android
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 67
Pasta, pacotes e
classes
Adicionais
(arquivos)
Linka Xmls e classes java
(gerado automaticamente
Bibliotecas .jars
Informações sobre o aplicativo
Códigos gerados
Versão de Compilação
68. Estrutura básica de um projeto Android
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 68
240 dpi
Definições de
layout de menus
Definições de
layout de telas
Recursos para versões
especíificas
120 dpi
160 dpi
480 dpi
320dpi
Definições de dimensões
Definições de strings
Definições de estilos de
views
69. Estrutura básica de um projeto Android
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 69
Classe principal
Sempre chamado na
criação de uma Activity
Setando o layout
70. Estrutura básica de um projeto Android
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 70
“organizador”
View usada para
texto
Espaço ocupado
Espaçamento de
margem
String que aparecerá
para o usuário
72. Abriremos o AVD Manager apertando este botão
Abrindo o AVD Manager
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 72
73. Aba 1- Android Virtual Devices
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 73
Tela inicial do AVD Manager
74. Dispositivos Virtuais Android disponíveis. Também
podem ser criados outros
Aba 2- Devices Definitions
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 74
75. Tela de criação de definição de um dispositivo
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 75
Tela de criação de dispositivos virtuais. Especificam-se
características de tela, sensores, câmeras, etc.
76. Tela de criação de Máquina Virtual
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 76
Tela de criação de máquina virtual.
77. Máquina virtual criada pronta para ser inicializada
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 77
78. Máquina virtual criada pronta para ser inicializada
(28/05 –
03/07)/2015
Minicurso Básico de Android – Thales Levi / UFMA 78
Desmarcar essa
opção para que
fique maior a
tela
83. • Quando for lançado um nível de API mais recente, você terá de atualizar
também os tools no SDK Manager, eventualmente, além das bibliotecas de
compatibilidade.
• Após as etapas anteriores, reinicie o Eclipse. Talvez você também,
eventualmente, poderá ter que atualizar o Plugin ADT presente no Eclipse.
• Você não é obrigado a fazer atualizações. Tudo funcionará normal caso não
faça.
• Nunca faça atualizações sem ter um backup de seus recursos !!!! ( IDEs, SDK,
etc)
Considerações (adicionado dia 04-06-15)
(28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 83
84. (28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 84
Dúvidas ?
85. (28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 85
Até a próxima !
86. (28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 86
• As imagens utilizadas foram adquiridas, em maior parte, através de
screenshots da tela do computador do próprio autor deste material.
• As imagens especificadas abaixo foram adquiridas através da ferramenta de
pesquisa de imagens da google https://images.google.com/. Todos os créditos
referente a elas são dados aos locais selecionados através de tal ferramenta. Se
você é autor e deseja que as imagens sejam removidas, entre em contato e
será feito.
http://www.appschopper.com/blog/wp-content/uploads/2013/03/Be-the-Pro-with-Best-Books-for-Android-Application-Development-
Banner.jpg
http://radixsmartclass.in/radixtemp/wp-content/uploads/2013/03/android_on_android_classroom_control.jpg
http://vamsystems.com/Images/ContentImages/2015/1/android-banner.jpg
http://3.bp.blogspot.com/-sRZob5WYyes/UzU7MkCOR0I/AAAAAAAACx4/sAlM8OIRrnQ/s1600/android-app-banner.png
http://hd.wallpaperswide.com/thumbs/android_green_background-t2.jpg
http://4.bp.blogspot.com/-OOXne6FICPk/VSGOCJtMm2I/AAAAAAAAABQ/ScOC2wFsnJU/s1600/android.png
http://www.androidcentral.com/sites/androidcentral.com/files/postimages/108579/bugdroid-salute-cropped.png
Referências
87. (28/05 – 03/07)/2015 Minicurso Básico de Android – Thales Levi / UFMA 87
• LECHETA, R. R. (2010). Google Android. 2a edição, São Paulo, Novatec
• BRAHLER, S. Analysis of the android architecture. Karlsruher Intitute of Technology, Germany,
2010.
• KHAN, S., KHALID, S. H., NAUMAN, M., KHAN, S., and ALAM, M. Analysis report on android
application framework and existing security architecture. Technical report, Security
Engineering Research Group, Pakistan, 2010.
• ANDROID DEVELOPERS. Disponível em:
<http://developer.android.com/develop/index.html.>. Acesso em: abril de 2015.
• ELINUX. Disponível em: <http://elinux.org/Android_Portal>. Acesso em: março de 2015.
• IDC. Smartphone OS Market Share, Q3 2014. Disponível em
<http://www.idc.com/prodserv/smartphone-os-market-share.jsp>. Acesso em: dezembro de
2014.
Referências