SlideShare uma empresa Scribd logo
1 de 68
Baixar para ler offline
Android Core

Felipe Silveira
felipesilveira.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ó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
2008 - Android 1.0 is released
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 / Gingerbread
2011 - Android 3.0 / Honeycomb – Tablet-optimized
2011 – Android 3.1 – USB host support
2011 – Android 4.0 / Ice-Cream Sandwich – merge
Gingerbread and Honeycomb22
2012 -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
Ccache
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 lib32zdev 
libgl1-mesa-dev g++-multilib mingw32 tofrodos pythonmarkdown 
libxml2-utils xsltproc
Repo
Para instalar o Repo, pode-se usar o seguinte comando:
$ sudo apt-get install curl
$ curl https://dl-ssl.google.com/dl/googlesource/gitrepo/repo > ~/bin/repo $ chmod a+x ~/bin/repo
$ chmod a+x ~/bin/repo
Git
Para 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 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.
https://github.com/cyanogenmod
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
bibliotecas de runtime.
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
dalvik - o código fonte da Dalvik Virtual Machine
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 ,
configurações de compilação e muito mais.
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
$ 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
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

$ 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.
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
SGL: uma engine de gráficos 2D.
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:
Tamanho Reduzido e Velocidade
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
fork() quando necessário para executar outras aplicações.
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
aplicações.
Application Framework
Window Manager - Responsável por renderizar a UI.
Application Framework
Package Manager - Instala / remove aplicativos
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.

Mais conteúdo relacionado

Mais procurados

Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
Instalação do asterisk
Instalação do asteriskInstalação do asterisk
Instalação do asteriskVicente Nobre
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVCBenicio Ávila
 
Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesLeandro Cavalcante
 
Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVNLuciano Lima
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
Sistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando ProgramasSistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando ProgramasLuiz Arthur
 
Funcionamento kernel
Funcionamento kernelFuncionamento kernel
Funcionamento kernelSENAC RIO
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsFernando Mercês
 
Execução de programas
Execução de programasExecução de programas
Execução de programasMattheusAnd07
 
Linux4all#1
Linux4all#1Linux4all#1
Linux4all#1Daniel
 
Sistemas de Controle de Versão
Sistemas de Controle de VersãoSistemas de Controle de Versão
Sistemas de Controle de VersãoJonathas Silva
 

Mais procurados (20)

Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
 
Usuário LInux
Usuário LInuxUsuário LInux
Usuário LInux
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Android Fat Binaries
Android Fat BinariesAndroid Fat Binaries
Android Fat Binaries
 
Processos (Linux)
Processos (Linux)Processos (Linux)
Processos (Linux)
 
Instalação do asterisk
Instalação do asteriskInstalação do asterisk
Instalação do asterisk
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVC
 
Docker - Básico
Docker - BásicoDocker - Básico
Docker - Básico
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de Versões
 
Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVN
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Sistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando ProgramasSistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando Programas
 
Funcionamento kernel
Funcionamento kernelFuncionamento kernel
Funcionamento kernel
 
Minicurso Linux
Minicurso Linux Minicurso Linux
Minicurso Linux
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
 
Execução de programas
Execução de programasExecução de programas
Execução de programas
 
Linux4all#1
Linux4all#1Linux4all#1
Linux4all#1
 
Sistemas de Controle de Versão
Sistemas de Controle de VersãoSistemas de Controle de Versão
Sistemas de Controle de Versão
 

Destaque

Release Notes Versao 2.16
Release Notes Versao 2.16Release Notes Versao 2.16
Release Notes Versao 2.16Plataforma CORE
 
Workshop on Android Rom Creation - FISTA/ISCTE 2014
Workshop on Android Rom Creation - FISTA/ISCTE 2014Workshop on Android Rom Creation - FISTA/ISCTE 2014
Workshop on Android Rom Creation - FISTA/ISCTE 2014Flávio Moringa
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidIury Teixeira
 
Aulas Google Android
Aulas Google AndroidAulas Google Android
Aulas Google AndroidIury Teixeira
 
Desenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaDesenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaNelson Glauber Leal
 

Destaque (6)

Release Notes Versao 2.16
Release Notes Versao 2.16Release Notes Versao 2.16
Release Notes Versao 2.16
 
Workshop on Android Rom Creation - FISTA/ISCTE 2014
Workshop on Android Rom Creation - FISTA/ISCTE 2014Workshop on Android Rom Creation - FISTA/ISCTE 2014
Workshop on Android Rom Creation - FISTA/ISCTE 2014
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Aulas Google Android
Aulas Google AndroidAulas Google Android
Aulas Google Android
 
Introdução ao Android Studio
Introdução ao Android StudioIntrodução ao Android Studio
Introdução ao Android Studio
 
Desenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaDesenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certa
 

Semelhante a Android Core Explained

Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma AndroidNatanael Fonseca
 
Programação Android - Básico
Programação Android - BásicoProgramação Android - Básico
Programação Android - BásicoHugoDalevedove
 
Introdução a Arquitetura Android
Introdução a Arquitetura AndroidIntrodução a Arquitetura Android
Introdução a Arquitetura AndroidMaycon Viana Bordin
 
Introdução ao android - siecomp 2015.1
Introdução ao android - siecomp 2015.1Introdução ao android - siecomp 2015.1
Introdução ao android - siecomp 2015.1Afonso Machado
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux EmbarcadoDiego Sueiro
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android EmbarcadoOdair Sousa
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeAlessandro Binhara
 
Projetos Mono e Moonlight
Projetos Mono e MoonlightProjetos Mono e Moonlight
Projetos Mono e MoonlightPedro Alves Jr.
 
Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)Adriano Melo
 
Introdução ao android
Introdução ao androidIntrodução ao android
Introdução ao androidPaulo Remoli
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoRegis Magalhães
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoLorival Smolski Chapuis
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Embarcados
 

Semelhante a Android Core Explained (20)

Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma Android
 
.NET Open Source
.NET Open Source.NET Open Source
.NET Open Source
 
Programação Android - Básico
Programação Android - BásicoProgramação Android - Básico
Programação Android - Básico
 
Sistema Operacional Android
Sistema Operacional AndroidSistema Operacional Android
Sistema Operacional Android
 
Introdução a Arquitetura Android
Introdução a Arquitetura AndroidIntrodução a Arquitetura Android
Introdução a Arquitetura Android
 
Introdução ao android - siecomp 2015.1
Introdução ao android - siecomp 2015.1Introdução ao android - siecomp 2015.1
Introdução ao android - siecomp 2015.1
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android Embarcado
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente Mainframe
 
Projetos Mono e Moonlight
Projetos Mono e MoonlightProjetos Mono e Moonlight
Projetos Mono e Moonlight
 
Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)
 
Introdução ao android
Introdução ao androidIntrodução ao android
Introdução ao android
 
Java 01 Java Visao Geral
Java 01 Java Visao GeralJava 01 Java Visao Geral
Java 01 Java Visao Geral
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
.NET Open Source 2009
.NET Open Source 2009.NET Open Source 2009
.NET Open Source 2009
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
 
Int305 projeto mono-final
Int305 projeto mono-finalInt305 projeto mono-final
Int305 projeto mono-final
 
O projeto Mono
O projeto MonoO projeto Mono
O projeto Mono
 
Csharp
CsharpCsharp
Csharp
 

Android Core Explained

  • 2. 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
  • 3. 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 2008 - Android 1.0 is released
  • 4. 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 / Gingerbread 2011 - Android 3.0 / Honeycomb – Tablet-optimized 2011 – Android 3.1 – USB host support 2011 – Android 4.0 / Ice-Cream Sandwich – merge Gingerbread and Honeycomb22 2012 -Android 4.1 / Jelly Bean
  • 6. 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
  • 7. Ccache Ferramenta utilitária para tornar o processo de compilação mais rápido $ export USE_CCACHE=1 $ ccache -M 10G
  • 8. 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 lib32zdev libgl1-mesa-dev g++-multilib mingw32 tofrodos pythonmarkdown libxml2-utils xsltproc
  • 9. Repo Para instalar o Repo, pode-se usar o seguinte comando: $ sudo apt-get install curl $ curl https://dl-ssl.google.com/dl/googlesource/gitrepo/repo > ~/bin/repo $ chmod a+x ~/bin/repo $ chmod a+x ~/bin/repo
  • 10. Git Para instalar o Git, pode-se usar o seguinte comando: $ sudo apt-get install git
  • 11. 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
  • 12. Fazendo download do código Execute o comando sync: $ repo sync ou: $ repo sync - jN
  • 13. 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. https://github.com/cyanogenmod
  • 14. 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 bibliotecas de runtime.
  • 15. 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.
  • 16. 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.
  • 17. 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.
  • 18. Entendendo o repositório dalvik - o código fonte da Dalvik Virtual Machine
  • 19. Entendendo o repositório development - projetos relacionados ao desenvolvimento de aplicações, tais como o código-fonte do SDK e NDK.
  • 20. 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 , configurações de compilação e muito mais.
  • 21. 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.
  • 22. 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.
  • 23. 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).
  • 24. Entendendo o repositório out - o diretório que contém os artefatos resultantes da compilação.
  • 25. Entendendo o repositório packages - contém o código fonte para os aplicativos padrão, como contatos, calendário, navegador.
  • 26. Entendendo o repositório prebuilts - contém arquivos que são distribuídos em forma binária por conveniência. Exemplos: toolchain, emulator kernel
  • 27. 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
  • 28. Compilando $ ccache -M 10G $ . build/envsetup.sh $ set_stuff_for_environment
  • 29. 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")
  • 30. 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.
  • 33. 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 $ adb -help
  • 36. Por que Linux Kernel? • Gerenciador de memória e processos estável • Suporte para shared libraries • Open source!
  • 37. Modificações Android Ashmem - Anonymous shared memory - Implementação Android para o gerenciador de memória compartilhada entre processos.
  • 38. 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
  • 39. Modificações Android Low Memory Killer - Mecanismo para matar processos quando o sistema está sendo executado com pouca memória.
  • 40. Modificações Android Logging - Mecanismo de logging do android, via /dev/log
  • 41. Modificações Android Pmem - Process memory allocator - driver de alocação de memória física para os processos
  • 42. 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.
  • 43. Modificações Android Alarm Timers - Suporte na camada de kernel para o AlarmManager, que permite que o sistema "acorde" depois de certos eventos.
  • 44. 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.
  • 45. Libraries Surface Manager: gerencia o acesso ao display do dispositivo e camadas de gráficos 2D e 3D de múltiplas aplicações.
  • 46. 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.
  • 47. Libraries Webkit: engine de navegador web usada na implementação do browser nativo e também na implementação dos widgets de webview.
  • 48. Libraries SGL: uma engine de gráficos 2D.
  • 49. 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.
  • 50. Libraries FreeType: renderização de fontes em formatos bitmaps e vetoriais.
  • 51. Libraries SQLite: um SGBD (Sistema gerenciador de banco de dados) relacional e otimizado para ocupar pouco espaço e ser suficiententemente rápido.
  • 52. 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: Tamanho Reduzido e Velocidade
  • 53. 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.
  • 54. Android Runtime Existe um passo adicional, que é a conversão dos arquivos .class em .dex, que são reconhecidos e executados pela Dalvik VM.
  • 55. 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 fork() quando necessário para executar outras aplicações.
  • 56. 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.
  • 57. 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.
  • 58. Application Framework Activity Manager - Gerencia o ciclo de vida de aplicações. Responsável por iniciar, parar e retomar as diversas aplicações.
  • 59. Application Framework Window Manager - Responsável por renderizar a UI.
  • 60. Application Framework Package Manager - Instala / remove aplicativos
  • 61. Application Framework Telephony Manager - Permite a interação com os serviços de telefonia, como SMS e MMS.
  • 62. Application Framework Content Providers - O componente responsável por compartilhar dados entre aplicações.
  • 63. Application Framework Resource Manager - Gerenciamento de recursos de aplicações - por exemplo, imagens, sons, etc
  • 64. Application Framework View System - Fornece às aplicações os widgets (como botões, listas, etc) e gerencia seu comportamento.
  • 65. 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.
  • 66. Application Framework XMPP - Mecanismo de troca de mensagens entre aplicações.
  • 67. 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.
  • 68. 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.