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

Post on 18-Nov-2014

597 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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

Android Core

Felipe Silveirafelipesilveira.com.br Aula 1

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

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

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

Compilando Android

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

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

$ export USE_CCACHE=1$ ccache -M 10G

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

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

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

$ sudo apt-get install git

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:

$ repo sync - jN

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

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.

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.

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.

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.

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

Entendendo o repositóriodevelopment - projetos relacionados ao desenvolvimento

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

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.

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.

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.

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).

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

compilação.

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

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

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

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

emulator kernel

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

Compilando$ ccache -M 10G

$ . build/envsetup.sh

$ set_stuff_for_environment

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")

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

$ make -jN

Executando o emulador$ emulator

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

Arquitetura Android

Arquitetura Android

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

• Suporte para shared libraries

• Open source!

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 memória.

Modificações Android

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

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.

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

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.

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

LibrariesSGL: uma engine de gráficos 2D.

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.

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

vetoriais.

LibrariesSQLite: um SGBD (Sistema gerenciador de banco de

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

ser suficiententemente rápido.

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

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.

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

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.

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.

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.

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

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

Application FrameworkPackage Manager - Instala / remove aplicativos

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

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

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

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

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.

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

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.

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.

top related