android core aula 1 - histórico, arquitetura e compilação da plataforma

68
Android Core Felipe Silveira felipesilveira.com.br Aula 1

Upload: felipe-silveira

Post on 18-Nov-2014

597 views

Category:

Technology


2 download

DESCRIPTION

Primeira aula do curso Android Core Detalhes da arquitetura da plataforma Android, histórico e procedimento para compilação. Material completo em http://www.felipesilveira.com.br/android-core

TRANSCRIPT

Page 1: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Android Core

Felipe Silveirafelipesilveira.com.br Aula 1

Page 2: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Android?

Sistema Operacional + Plataforma de desenvolvimento + Aplicações Padrão (SMS, Maps, Calendar...)

Código aberto (AOSP - Android Open Source Project)

Desenvolvido pelo Google e posteriormente pela Open Handset Alliance

Page 3: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Histórico2003: Andy Rubin, Rich Miner, Nick Sears e Chris White fundam a Android, Inc

2005: Google efetua a compra da Android, Inc

2007: Open Handset Alliance announced along with Android

2008 - Android 1.0 is released

Page 4: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Histórico2009 - Android 1.12009 - Android 1.5 / Cupcake2009 - Android 1.6 / Donut2009 - Android 2.0/2.1 / Eclair2010 - Android 2.2 / Froyo2010 - Android 2.3 / Gingerbread2011 - Android 3.0 / Honeycomb – Tablet-optimized2011 – Android 3.1 – USB host support2011 – Android 4.0 / Ice-Cream Sandwich – merge Gingerbread and Honeycomb222012 -Android 4.1 / Jelly Bean

Page 5: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Compilando Android

Page 6: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Requisitos Mínimos

● Ubuntu 10.04 LTS

● Ambiente 64 bits

● 30 GB de disco

● Python 2.7

● GNU make 3.82

● JDK 6

● Git 1.7

Page 7: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

CcacheFerramenta utilitária para tornar o processo de compilação mais rápido

$ export USE_CCACHE=1$ ccache -M 10G

Page 8: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

DependênciasPara instalar as dependências, pode-se usar o seguinte comando:

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \ libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \ libxml2-utils xsltproc

Page 9: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

RepoPara instalar o Repo, pode-se usar o seguinte comando:

$ sudo apt-get install curl$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo$ chmod a+x ~/bin/repo

Page 10: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

GitPara instalar o Git, pode-se usar o seguinte comando:

$ sudo apt-get install git

Page 11: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Fazendo download do código

Crie um diretório vazio para armazenar seus arquivos de

trabalho. Dê-lhe o nome que quiser:

$ mkdir working_directory$ cd working_directory

Execute o repo init

$ repo init -u https://android.googlesource.com/platform/manifest

ou

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

Page 12: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Fazendo download do código

Execute o comando sync:

$ repo sync

ou:

$ repo sync - jN

Page 13: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Repositórios alternativosLinaro

Projeto com suporte a diversos SoCs ARM (system on a chip)

Rowboat

Projeto com suporte a dispositivos usando os chips TI Sitara (como a

BeagleBoard XM e a BeagleBone)

Cyanogen ModProjeto comunitário que visa a construção de ROMs para vários telefones comerciais.https://github.com/cyanogenmod

Page 14: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriobionic - a biblioteca C-runtime para o Android. Note que o

Android não está usando o glibc como a maioria das

distribuições Linux. Em vez disso a biblioteca c é chamado

de bionic e é baseada principalmente em fontes de

derivados do BSD. Neste diretório, você vai encontrar os

arquivos fonte para a c-lib, matemática e outras

bibliotecas de runtime.

Page 15: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriobootable - inicialização e código relacionado a

inicialização. Neste diretório se encontra o código fonte do

bootloader a a implementação do protocolo fastboot.

Page 16: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriobuild - a implementação do sistema de build, incluindo

todos os makefiles. Um arquivo importante aqui é o script

envsetup.sh que vai ajudá-lo muito quando se trabalha

com a fonte da plataforma. Este arquivo será executado

posteriormente para configurar as variáveis de ambiente e

compilar módulos específicos.

Page 17: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriocts - os testes de compatibilidade. O conjunto de testes

para garantir que a build está em conformidade com a

especificação do Android. Iremos falarar mais a respeito

dessas ferramentas posteriormente.

Page 18: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriodalvik - o código fonte da Dalvik Virtual Machine

Page 19: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriodevelopment - projetos relacionados ao desenvolvimento

de aplicações, tais como o código-fonte do SDK e NDK.

Page 20: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriodevice - código específico do produto para diferentes

dispositivos. Este é o lugar para encontrar módulos de

hardware para os diferentes dispositivos Nexus ,

configurações de compilação e muito mais.

Page 21: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositórioexternal - contém o código fonte para todos os projetos

de código aberto externos, tais como SQLite, Freetype e

webkit.

Page 22: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositórioframeworks - esta pasta é essencial para o Android , uma

vez que contém todo o código do framework . Aqui você

vai encontrar a implementação de serviços essenciais

como o System Server, que contém o PackageManager.

Uma grande parte do mapeamento entre as APIs

aplicação java e as bibliotecas nativas também é feito

aqui.

Page 23: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriohardware - código-fonte relacionado ao hardware, como

a especificação de camada de abstração de hardware

Android (HAL - Hardware Abstraction Layer). Esta pasta

também contém a camada de interface de rádio (para

comunicação com modem).

Page 24: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositórioout - o diretório que contém os artefatos resultantes da

compilação.

Page 25: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriopackages - contém o código fonte para os aplicativos

padrão, como contatos, calendário, navegador.

Page 26: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositórioprebuilts - contém arquivos que são distribuídos em

forma binária por conveniência. Exemplos: toolchain,

emulator kernel

Page 27: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Entendendo o repositóriosystem - arquivos de código fonte para o núcleo do

sistema Android. Esse é o sistema Linux mínimo que é

iniciado antes do Dalvik VM e quaisquer serviços baseados

em Java são ativados. Isso inclui o código fonte para o

processo de inicialização e o script init.rc padrão que

fornecem a configuração dinâmica da plataforma

Page 28: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Compilando$ ccache -M 10G

$ . build/envsetup.sh

$ set_stuff_for_environment

Page 29: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Seleção de target$ lunch full-eng

Build name Device Notas

full emulator build completa com todas linguagens, aplicações, input methods

full_maguro maguro build completa para o Galaxy Nexus GSM/HSPA+ ("maguro")

full_panda panda build completa para a PandaBoard ("panda")

Page 30: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Seleção de target

Buildtype Uso

user acesso limitado; comumente usado para builds de produção

userdebug configuração parecida com user, porém com acesso root e debug

eng configuração de desenvolvimento, com algumas ferramentas de debug adicionais.

Page 31: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Enfim, Compilando$ make

ou

$ make -jN

Page 32: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Executando o emulador$ emulator

Page 33: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

ADBO ADB (Android debug bridge) é uma ferramenta utilizada

para acessar muitos dos recursos do emulador e de um

telefone anexado ao computador via USB

$ adb devices

$ adb -help

Page 34: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Arquitetura Android

Page 35: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Arquitetura Android

Page 36: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Por que Linux Kernel?• Gerenciador de memória e processos estável

• Suporte para shared libraries

• Open source!

Page 37: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Modificações Android

Ashmem - Anonymous shared memory - Implementação Android para o gerenciador de memória compartilhada entre processos.

Page 38: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Modificações Android

Binder - Implementação do OpenBinder para android, contendo também a implementação da runtime AIDL.

Desenvolvido para resolver a necessidade de execução de código em processos separados (Aplicações e Serviços) sem o overhead que o IPC introduziria

Page 39: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Modificações Android

Low Memory Killer - Mecanismo para matar processos quando o sistema está sendo executado com pouca memória.

Page 40: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Modificações Android

Logging - Mecanismo de logging do android, via /dev/log

Page 41: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Modificações Android

Pmem - Process memory allocator - driver de alocação de memória física para os processos

Page 42: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Modificações Android

WakeLocks - Mecanismo de gerência de energia, otimizado para dispositivos móveis. O controle dos wakelocks é exposto à camada de aplicações através do componente PowerManager.

Page 43: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Modificações Android

Alarm Timers - Suporte na camada de kernel para o AlarmManager, que permite que o sistema "acorde" depois de certos eventos.

Page 44: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Modificações Android

RAM Console - Extensão que permite ao kernel fazer um dump de dados importante para a memória RAM do device quando ocorre um 'pânico' - o sistema é reiniciado por alguma falha.

Page 45: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

LibrariesSurface Manager: gerencia o acesso ao display do dispositivo e camadas de gráficos 2D e 3D de múltiplas aplicações.

Page 46: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

LibrariesMedia Framework: as bibliotecas suportam execução e gravação da maioria dos formatos de áudio e vídeo, bem como exibição de imagens, incluindo MPEG4, H.264, MP3, AAC, AMR, JPG, e PNG.

Page 47: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

LibrariesWebkit: engine de navegador web usada na implementação do browser nativo e também na implementação dos widgets de webview.

Page 48: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

LibrariesSGL: uma engine de gráficos 2D.

Page 49: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Libraries3D libraries: uma implementação baseada na especificação OpenGL ES 1.0, a qual utiliza tanto aceleração de hardware 3D e um avançado e otimizado software para renderização de modelos tridimensionais.

Page 50: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

LibrariesFreeType: renderização de fontes em formatos bitmaps e

vetoriais.

Page 51: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

LibrariesSQLite: um SGBD (Sistema gerenciador de banco de

dados) relacional e otimizado para ocupar pouco espaço e

ser suficiententemente rápido.

Page 52: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

LibrariesBiblioteca de sistema C (libc): é uma implementação da biblioteca C padrão, otimizada para dispositivos que suportam a plataforma Linux (embbeded- linux). A implementação da libc em Android é conhecida como Bionic e tem características muito importantes:

Tamanho Reduzido e Velocidade

Page 53: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Android RuntimeAndroid possui sua própria máquina virtual Java: A Dalvik VM, mais rápida e leve, com set de instruções menor do que a JVM.

Page 54: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Android RuntimeExiste um passo adicional, que é a conversão dos arquivos .class em .dex, que são reconhecidos e executados pela Dalvik VM.

Page 55: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Android RuntimeNa inicialização do sistema, é criado um processo para a máquina virtual chamado Zygote. A partir desse processo, outras instâncias da máquina virtual são criadas com fork() quando necessário para executar outras aplicações.

Page 56: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Android RuntimePara completar a camada de Android Runtime, temos as core libraries, que sofreram pouca ou nenhuma modificação no projeto AOSP. São elas: Data structures, Utilities, File access, Network Access, Graphics, etc.

Page 57: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkAcima das camadas de Libraries e Runtime está a camada Application Framework. Esta é a camada responsável por prover às aplicações APIs amigáveis que permitem o acesso às funcionalidades da plataforma.

Page 58: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkActivity Manager - Gerencia o ciclo de vida de aplicações. Responsável por iniciar, parar e retomar as diversas aplicações.

Page 59: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkWindow Manager - Responsável por renderizar a UI.

Page 60: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkPackage Manager - Instala / remove aplicativos

Page 61: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkTelephony Manager - Permite a interação com os serviços de telefonia, como SMS e MMS.

Page 62: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkContent Providers - O componente responsável por compartilhar dados entre aplicações.

Page 63: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkResource Manager - Gerenciamento de recursos de aplicações - por exemplo, imagens, sons, etc

Page 64: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkView System - Fornece às aplicações os widgets (como botões, listas, etc) e gerencia seu comportamento.

Page 65: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkLocation Manager - Permite que as aplicações acessem serviços baseados em localização seja por GPS, celltower IDs, ou bancos de dados Wi-Fi locais.

Page 66: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

Application FrameworkXMPP - Mecanismo de troca de mensagens entre aplicações.

Page 67: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

ApplicationsA última camada da stack Android - Applications - contém as aplicações, que apresentam conteúdo ao usuárioe interage com este diretamente.

Existem algumas aplicações que já vem embutidas na plataforma, como o cliente de Email, de SMS, Calendário, Mapas, Navegador, Home Screen, Contatos e outros.

Page 68: Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

ApplicationsNessa camada comumente temos diversas customizações feitas pelas fabricantes de celular, como o MotoBlur, da Motorola, o Sense da HTC e o TouchWiz, da Samsung. Essa flexibilidade contribuiu para a adoção da plataforma por diversos fabricantes e sua decorrente popularização.