Computação
móvel
Android
Prof. Dr. Daniel Vecchiato <daniel@[Link]>
Roteiro
• Introdução
• Versões
• Ferramentas
• Arquitetura
2
Introdução
• É um sistema operacional para dispositivos móveis como
smartphones e tablets
• Criação: Google Inc (Android Inc) e Open HandSet
Alliance
• Baseado no kernel do Linux
• Código Aberto: Existem centenas de ROMs
personalizadas.
3
Características
• Open source
• Começou baseado no kernel 2.6 do Linux
• O kernel é responsável pelo gerenciamento de memória,
processos, threads e segurança
• Possui:
Kit de desenvolvimento: Android SDK
SGBD: Sqlite
4
Licença
• Apache Software License (ASL)
Rede e telefonia
Mais amigável ao uso comercial
Menos restritiva
• GNU/GPL
Modificações no kernel Linux
5
Versões
• A partir da versão 1.5, possui nomes de doces seguindo a
ordem alfabética
6
Versões
• 1.5: Cupcake (2009)
• 1.6: Donut (2009)
• 2.0 – 2.1: Eclair (2010)
• 2.2: FroYo (2010)
• 2.3: Gingerbread (2011)
• 3.0-3.2: Honeycomb (2011)
• 4.0: Ice Cream Sandwich (2011) A partir desta versão, houve alteração no
kernel linux para 3.x
• 4.1-4.2: Jelly Bean (2012)
• 4.4: Kitkat (2013)
• 5.0-5.1: Lollipop (2014)
• 6.0: Marshmallow (2015)
• 7.0: Nougat (2016)
7
Versões
• [Link]
ml
8
Software Development Kit
• Kit de desenvolvimento de Software
• API para permitir o desenvolvimento de software em
determinada linguagem de programação
• Inclui ferramentas para debug e IDEs de
desenvolvimento
9
SQLite
• Biblioteca de software que implementa uma engine de
banco de dados transacional, que não necessita
configuração ou de servidor
• Código aberto
• Ideal para dispositivos embarcados
• Self-contained: Requer mínimo suporte de bibliotecas
externas ou do sistema operacional. Perfeito para
sistemas embarcados
10
SQLite
• Alguns comandos
ALTER TABLE
BEGIN TRANSACTION
COMMIT TRANSACTION
CREATE INDEX, CREATE TABLE
CREATE TRIGGER, CREATE VIEW
DELETE, DROP TABLE
DROP TRIGGER, DROP VIEW
INSERT
ROLLBACK TRANSACTION
SELECT
UPDATE
11
Máquina Virtual
• É uma implementação em software de uma máquina
(computador) que executa programas como uma
máquina física
• Para execução de código Java, precisamos de uma JVM,
já que o código Java é compilado numa linguagem
chamada bytecode, e este não consegue ser “entendido”
diretamente pelos sistemas operacionais
12
Máquina Virtual Dalvik
• Máquina virtual especializada e desenvolvida para uso
em dispositivos móveis
Consome o mínimo de memória
É também um compilador just-in-time
• Aplicações escritas em Java são compiladas em
bytecodes Dalvik
arquivos .dex
A partir da versão 5 deixa de usar a Dalvik VM e passa a
adotar a Art VM
13
Máquina Virtual Dalvik
• Permite que programas sejam distribuídos em formato
binário (bytecode) e possam ser executados em qualquer
dispositivo Android
Independentemente do processador utilizado
• Apesar das aplicações Android serem escritas na
linguagem Java, ela não é uma máquina virtual Java, já
que não executa bytecode JVM
• O ambiente de codificação é Java, compilados para
bytecode e DEPOIS disso, transliterados para o formado
DEX (JAVA--> CLASS--> DEX)
Aceita compilação direta também
14
Máquina Virtual Dalvik
• Dex = Dalvik Executable
Agrupados junto com os recursos (imagens, sons e outros)
num arquivo extensão .APK
• Máquina virtual do Android que:
Roda em CPUs lentas e com relativamente pouca memória
Em um SO com pouco espaço de SWAP
Permanecendo funcionando ligada por uma bateria
15
Armazenamento Externo
• Armazenamento externo
Suporta MicroSD e USB "A" para conexão com dispositivos de
armazenamento
• Sistemas de arquivos EXTERNOS suportados
FAT32
Ext3
Ext4
16
Sistema de Arquivos
• Android não contém um sistema de arquivos comum
• Compatível com UNICODE
• Todos os dados são visíveis apenas para uma aplicação
SandBox
Exceto dados de acesso comum
• Porém, há a possibilidade de uma app acessar dados de
outra app por meio de um "provedor de conteúdo"
Um provedor de conteúdo é um componente opcional que
disponibiliza acesso aos dados da app (leitura / gravação)
Sujeito às restrições impostas pelo desenvolvedor
17
YAFFS2
• Yet Another Flash File System
• Pode ter áreas de armazenamento internos ou externos
Em um cartão SD externo, pode-se ter qualquer tipo de
estrutura de diretório
Em geral é um cartão SD formatado em FAT para facilitar o
compartilhamento com computadores
• No armazenamento interno o controle é feito pela API do
sistema
18
YAFFS2
• Dados de uma aplicação instalada no sistema, por
exemplo, cairá no diretório /data/
Dentro desse diretório, existe outras pasta que são criadas
pela API, além daquelas que a aplicação pode criar. Os
diretórios comuns são
shared_prefs: Diretório que armazena as preferências
compartilhadas no formato XML;
lib: Arquivos de bibliotecas customizadas;
files: Arquivos que o desenvolvedor salva no armazenamento
interno;
cache: Arquivos de cache da aplicação;
database: Banco de dados SQLite e jornal
Um arquivo que não esteja em um dos diretórios
shared_prefs, lib, cache ou database deve ser uma pasta que
o desenvolvedor criou e controla
19
Tipos de Armazenamento
• Shared Preferences
Armazena dados primitivos em pares chave-valor
Permite que a app salve e recupere pares de chave-valor de
tipos de dados primitivos:
boolean
floats
ints
longs
Strings
20
Tipos de Armazenamento
• Internal Storage
Armazena dados privados na memória do dispositivo
Salva arquivos diretamente na memória interna do
dispositivo
Arquivos salvos na memória interna são privados a sua
aplicação e outras aplicações não podem acessá-las (nem o
usuário)
21
Tipos de Armazenamento
• External Storage
Armazena dados públicos no cartão de memória
Cartão SD
PenDrive
• SQLite Databases
Armazena dados estruturados num banco de dados privado
• Network Connection
Armazena dados na web do seu servidor de rede
22
Arquitetura
• Android é mais do que um
sistema operacional, é uma
pilha de software composta
por 5 camadas
23
Arquitetura – Linux Kernel
• Cobrir funcionalidades como encadeamento e
gerenciamento de memória de baixo nível.
• Usar um kernel do Linux permite que o Android
aproveite os recursos de segurança principais e que os
fabricantes dos dispositivos desenvolvam drivers de
hardware para um kernel conhecido.
24
Arquitetura –
Camada de abstração de
hardware
• Fornece interfaces padrão que expõem as capacidades de
hardware do dispositivo para a estrutura da Java API de
maior nível.
• Consiste em módulos de biblioteca, que implementam
uma interface para um tipo específico de componente de
hardware, como o módulo de câmera ou bluetooth.
• Quando uma Framework API faz uma chamada para
acessar o hardware do dispositivo, o sistema Android
carrega o módulo da biblioteca para este componente de
hardware.
25
Arquitetura – Android
Runtime
• Versão 5.0 (API nível 21) ou mais recente
• Cada aplicativo executa o próprio processo com uma
instância própria do Android Runtime (ART)
• O ART é projetado para executar várias máquinas
virtuais em dispositivos de baixa memória executando
arquivos DEX
• Principais recursos:
Compilação "ahead-of-time" (AOT) e "just-in-time" (JIT)
Coleta de lixo (GC) otimizada
Melhor compatibilidade de depuração
26
Arquitetura – Bibliotecas
C/C++ Nativas
• Vários componentes e serviços principais do sistema
Android, como ART e HAL, são implementados por
código nativo
• A plataforma Android fornece as Java Framework APIs
para expor a funcionalidade de algumas dessas
bibliotecas nativas aos aplicativos.
É possível acessar OpenGLpara desenhar e manipular
gráficos 2D e 3D.
• Uso do NDK para manipular código C e C++ para
acessar bibliotecas nativas.
27
Estrutura de Java API
• O conjunto completo de recursos do SO Android está
disponível pelas APIs programadas na linguagem Java
Gerenciador de recursos
Gerenciador de notificação
Etc.
28
Aplicativos do Sistema
• Os aplicativos do sistema funcionam como aplicativos
para os usuários
• Os aplicativos inclusos na plataforma não têm status
especial entre os aplicativos que o usuário opta por
instalar
É possível instalar outro navegador, teclado, etc.
• Porém aplicativos de sistemas tem acesso a um maior
conjunto de métodos da API Android
29
Ambiente de desenvolvimento
• JDK: Java Developer Kit
• Android Studio
• Android SDK
30
NDK
• Native Development Kit
Toolset que permite desenvolver parte de um aplicativo com
código em linguagem nativa
Possível escrever bibliotecas em C e C++
Suportado em Android 1.5 e superior
Usado para:
Fazer parte da aplicação e executar de maneira mais rápida
usando codificação em mais baixo nível ( criptografia por exemplo)
Utilizar funções e bibliotecas nativas do Android
Aumenta bastante a complexidade do código.
31
Segurança
• Aplicações rodam em SandBox
São áreas que não tem acesso ao restante dos recursos do
sistema
Com exceção das permissões de acesso concedidas pelo
usuário quando a aplicação é instalada
• Antes de instalar uma app, o sistema exibe todas as
permissões necessárias para a execução
com base nas permissões, o usuário decide se instala a app
32
Segurança
• Diferentemente do Linux, cada app do Android roda com
um UID-owner diferente
Mantendo as aplicações isoladas
• Existem diversas opções de antivirus
33
Segurança
• Ataque por rainbow table
É possível a quebra da senha de padrão
gráfico do Android através de rainbow
tables
Funcionamento da senha por Padrão
gráfico
Converte pontos do padrão gráfico em
números (para a imagem a senha seria “2
4 6 7")
Gera hash sha-1 da sequência de números
Armazena esse hash no arquivo
[Link]: /data/system/[Link]
34
Hora de praticar!
[1] Qual foi a versão do Android desenvolvida
inicialmente apenas para tablets?
35
Hora de praticar!
[1] Qual foi a versão do Android desenvolvida
inicialmente apenas para tablets?
Honeycomb
36
Hora de praticar!
[2] Qual é a máquina virtual do Android?
37
Hora de praticar!
[2] Qual é a máquina virtual do Android?
Era a Dalvik VM agora é a ART (Android Runtime)
38
Hora de praticar!
[3] Qual é o SGBD do Android?
39
Hora de praticar!
[3] Qual é o SGBD do Android?
SQLite
40
Hora de Praticar
[4] O Android pode ser executado sobre qualquer sistema
operacional, pois os aplicativos Android são escritos na
linguagem de programação Java e executados em uma
máquina virtual Java.
CERTO ou ERRADO?
41
Hora de Praticar
[4] O Android pode ser executado sobre qualquer sistema
operacional, pois os aplicativos Android são escritos na
linguagem de programação Java e executados em uma
máquina virtual Java.
ERRADO
42
Hora de Praticar!
[5] O sistema operacional Android tem o Linux como
base, o que permite a utilização simultânea de aplicações
que podem ser executadas em segundo plano, de forma
transparente para o usuário
CERTO ou ERRADO?
43
Hora de Praticar!
[5] O sistema operacional Android tem o Linux como
base, o que permite a utilização simultânea de aplicações
que podem ser executadas em segundo plano, de forma
transparente para o usuário
CERTO
44
Hora de Praticar!
[6] Quando um banco de dados do SQLite é criado no
Android, seus arquivos ficam armazenados no seguinte
endereço: /data/data/[Link]/databases/.
CERTO ou ERRADO?
45
Hora de Praticar!
[6] Quando um banco de dados do SQLite é criado no
Android, seus arquivos ficam armazenados no seguinte
endereço: /data/data/[Link]/databases/.
CERTO
46
Hora de Praticar!
[7] As aplicações desenvolvidas para Android são escritas
em Java, não sendo, entretanto, consideradas uma
máquina virtual Java.
CERTO ou ERRADO?
47
Hora de Praticar!
[7] As aplicações desenvolvidas para Android são escritas
em Java, não sendo, entretanto, consideradas uma
máquina virtual Java.
CERTO
48
Hora de Praticar!
[8] Apesar de o Android ser o sistema operacional mais
utilizado para o acesso a aplicativos por meio de
equipamentos móveis, especialmente smartphones, ainda
não se dispõe de e-readers que permitam a leitura de
livros eletrônicos nessa plataforma.
CERTO ou ERRADO?
49
Hora de Praticar!
[8] Apesar de o Android ser o sistema operacional mais
utilizado para o acesso a aplicativos por meio de
equipamentos móveis, especialmente smartphones, ainda
não se dispõe de e-readers que permitam a leitura de
livros eletrônicos nessa plataforma.
ERRADO
50
Hora de Praticar!
• [9] Todos os aplicativos de usuários executados no iOS 7
são colocados em sandbox para proteger o sistema e
outros aplicativos. O mesmo processo ocorre com o
Android 4, em que todos os softwares acima do kernel,
incluindo bibliotecas de sistema operacional e estrutura
de aplicação, são executados dentro da sandbox do
aplicativo.
CERTO ou ERRADO?
51
Hora de Praticar!
• [9] Todos os aplicativos de usuários executados no iOS 7
são colocados em sandbox para proteger o sistema e
outros aplicativos. O mesmo processo ocorre com o
Android 4, em que todos os softwares acima do kernel,
incluindo bibliotecas de sistema operacional e estrutura
de aplicação, são executados dentro da sandbox do
aplicativo.
CERTO
52
Hora de Praticar!
• [10] O Android, sistema operacional Linux multiusuário
em que cada aplicativo é visto como um usuário
diferente, atribui a cada aplicativo uma identidade de
usuário exclusiva.
CERTO ou ERRADO
53
Hora de Praticar!
• [10] O Android, sistema operacional Linux multiusuário
em que cada aplicativo é visto como um usuário
diferente, atribui a cada aplicativo uma identidade de
usuário exclusiva.
CERTO
54