Android Core
Felipe Silveira
Android?
Sistema Operacional + Plataforma de desenvolvimento + Aplicações Padrão (SMS, Maps, Calendar...)
Código aberto (AOSP - Android Open Source Project)
Histórico
2003: 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
Histórico
2009 - Android 1.1 2009 - Android 1.5 / Cupcake 2009 - Android 1.6 / Donut 2009 - Android 2.0/2.1 / Eclair 2010 - Android 2.2 / Froyo 2010 - Android 2.3 / Gingerbread2011 - Android 3.0 / Honeycomb – Tablet-optimized 2011 – Android 3.1 – USB host support
2011 – Android 4.0 / Ice-Cream Sandwich – merge Gingerbread and Honeycomb22
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.7Ccache
Ferramenta utilitária para tornar o processo de compilação mais rápido
$ export USE_CCACHE=1 $ ccache -M 10G
Dependências
Para 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 \
Repo
Para 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
Git
Para instalar o Git, pode-se usar o seguinte comando:
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
Fazendo download do código
Execute o comando sync: $ repo sync
ou:
Repositórios alternativos
Linaro
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 Mod
Projeto comunitário que visa a construção de ROMs para vários telefones comerciais.
Entendendo o repositório
bionic - 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
Entendendo o repositório
bootable - 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.
Entendendo o repositório
build - 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.
Entendendo o repositório
cts - 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.
Entendendo o repositório
Entendendo o repositório
development - projetos relacionados ao desenvolvimento de aplicações, tais como o código-fonte do SDK e NDK.
Entendendo o repositório
device - código específico do produto para diferentes dispositivos. Este é o lugar para encontrar módulos de hardware para os diferentes dispositivos Nexus ,
Entendendo o repositório
external - contém o código fonte para todos os projetos de código aberto externos, tais como SQLite, Freetype e webkit.
Entendendo o repositório
frameworks - 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.
Entendendo o repositório
hardware - 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).
Entendendo o repositório
out - o diretório que contém os artefatos resultantes da compilação.
Entendendo o repositório
packages - contém o código fonte para os aplicativos padrão, como contatos, calendário, navegador.
Entendendo o repositório
prebuilts - contém arquivos que são distribuídos em forma binária por conveniência. Exemplos: toolchain, emulator kernel
Entendendo o repositório
system - 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
Compilando
$ ccache -M 10G
$ . build/envsetup.sh
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
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.
Enfim, Compilando
$ make
ou
Executando o emulador
ADB
O 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
Por que Linux Kernel?
• Gerenciador de memória e processos estável • Suporte para shared libraries
Modificações Android
Ashmem - Anonymous shared memory - Implementação Android para o gerenciador de memória compartilhada entre processos.
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
Modificações Android
Low Memory Killer - Mecanismo para matar processos quando o sistema está sendo executado com pouca
Modificações Android
Modificações Android
Pmem - Process memory allocator - driver de alocação de memória física para os processos
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.
Modificações Android
Alarm Timers - Suporte na camada de kernel para o AlarmManager, que permite que o sistema "acorde" depois de certos eventos.
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.
Libraries
Surface Manager: gerencia o acesso ao display do
dispositivo e camadas de gráficos 2D e 3D de múltiplas aplicações.
Libraries
Media 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.
Libraries
Webkit: engine de navegador web usada na
implementação do browser nativo e também na implementação dos widgets de webview.
Libraries
Libraries
3D 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.
Libraries
FreeType: renderização de fontes em formatos bitmaps e vetoriais.
Libraries
SQLite: um SGBD (Sistema gerenciador de banco de
dados) relacional e otimizado para ocupar pouco espaço e ser suficiententemente rápido.
Libraries
Biblioteca 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:
Android Runtime
Android 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.
Android Runtime
Existe um passo adicional, que é a conversão dos arquivos .class em .dex, que são reconhecidos e executados pela Dalvik VM.
Android Runtime
Na 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
Android Runtime
Para 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.
Application Framework
Acima 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.
Application Framework
Activity Manager - Gerencia o ciclo de vida de aplicações. Responsável por iniciar, parar e retomar as diversas
Application Framework
Application Framework
Application Framework
Telephony Manager - Permite a interação com os serviços de telefonia, como SMS e MMS.
Application Framework
Content Providers - O componente responsável por compartilhar dados entre aplicações.
Application Framework
Resource Manager - Gerenciamento de recursos de aplicações - por exemplo, imagens, sons, etc
Application Framework
View System - Fornece às aplicações os widgets (como botões, listas, etc) e gerencia seu comportamento.
Application Framework
Location 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.
Application Framework
XMPP - Mecanismo de troca de mensagens entre aplicações.
Applications
A ú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.
Applications
Nessa 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.