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 (A...
Histórico
2003: Andy Rubin, Rich Miner, Nick Sears e Chris White
fundam a Android, Inc
2005: Google efetua a compra da And...
Histórico
2009 - Android 1.1
2009 - Android 1.5 / Cupcake
2009 - Android 1.6 / Donut
2009 - Android 2.0/2.1 / Eclair
2010 ...
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 bi...
Repo
Para instalar o Repo, pode-se usar o seguinte comando:
$ sudo apt-get install curl
$ curl https://dl-ssl.google.com/d...
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:
$ m...
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 ...
Entendendo o repositório
bionic - a biblioteca C-runtime para o Android. Note que o
Android não está usando o glibc como a...
Entendendo o repositório
bootable - inicialização e código relacionado a
inicialização. Neste diretório se encontra o códi...
Entendendo o repositório
build - a implementação do sistema de build, incluindo
todos os makefiles. Um arquivo importante ...
Entendendo o repositório
cts - os testes de compatibilidade. O conjunto de testes
para garantir que a build está em confor...
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...
Entendendo o repositório
device - código específico do produto para diferentes
dispositivos. Este é o lugar para encontrar...
Entendendo o repositório
external - contém o código fonte para todos os projetos
de código aberto externos, tais como SQLi...
Entendendo o repositório
frameworks - esta pasta é essencial para o Android , uma
vez que contém todo o código do framewor...
Entendendo o repositório
hardware - código-fonte relacionado ao hardware, como
a especificação de camada de abstração de h...
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: too...
Entendendo o repositório
system - arquivos de código fonte para o núcleo do
sistema Android. Esse é o sistema Linux mínimo...
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...
Seleção de target

Buildtype

Uso

user

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

userdebug

configuração...
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 ...
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
...
Modificações Android
Binder - Implementação do OpenBinder para android,
contendo também a implementação da runtime AIDL.
D...
Modificações Android
Low Memory Killer - Mecanismo para matar processos
quando o sistema está sendo executado com pouca
me...
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
wake...
Modificações Android
Alarm Timers - Suporte na camada de kernel para o
AlarmManager, que permite que o sistema "acorde"
de...
Modificações Android
RAM Console - Extensão que permite ao kernel fazer um
dump de dados importante para a memória RAM do
...
Libraries
Surface Manager: gerencia o acesso ao display do
dispositivo e camadas de gráficos 2D e 3D de múltiplas
aplicaçõ...
Libraries
Media Framework: as bibliotecas suportam execução e
gravação da maioria dos formatos de áudio e vídeo, bem
como ...
Libraries
Webkit: engine de navegador web usada na
implementação do browser nativo e também na
implementação dos widgets d...
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 hardw...
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 su...
Libraries
Biblioteca de sistema C (libc): é uma implementação da
biblioteca C padrão, otimizada para dispositivos que
supo...
Android Runtime
Android possui sua própria máquina virtual Java: A Dalvik
VM, mais rápida e leve, com set de instruções me...
Android Runtime
Existe um passo adicional, que é a conversão dos arquivos
.class em .dex, que são reconhecidos e executado...
Android Runtime
Na inicialização do sistema, é criado um processo para a
máquina virtual chamado Zygote. A partir desse pr...
Android Runtime
Para completar a camada de Android Runtime, temos as
core libraries, que sofreram pouca ou nenhuma
modific...
Application Framework
Acima das camadas de Libraries e Runtime está a camada
Application Framework. Esta é a camada respon...
Application Framework
Activity Manager - Gerencia o ciclo de vida de aplicações.
Responsável por iniciar, parar e retomar ...
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 comportamen...
Application Framework
Location Manager - Permite que as aplicações acessem
serviços baseados em localização seja por GPS, ...
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
i...
Applications
Nessa camada comumente temos diversas customizações
feitas pelas fabricantes de celular, como o MotoBlur, da
...
Próximos SlideShares
Carregando em…5
×

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

1.259 visualizações

Publicada em

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

Publicada em: Tecnologia
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.259
No SlideShare
0
A partir de incorporações
0
Número de incorporações
9
Ações
Compartilhamentos
0
Downloads
72
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

  1. 1. Android Core Felipe Silveira felipesilveira.com.br Aula 1
  2. 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. 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. 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
  5. 5. Compilando Android
  6. 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. 7. Ccache Ferramenta utilitária para tornar o processo de compilação mais rápido $ export USE_CCACHE=1 $ ccache -M 10G
  8. 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. 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. 10. Git Para instalar o Git, pode-se usar o seguinte comando: $ sudo apt-get install git
  11. 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. 12. Fazendo download do código Execute o comando sync: $ repo sync ou: $ repo sync - jN
  13. 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. 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. 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. 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. 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. 18. Entendendo o repositório dalvik - o código fonte da Dalvik Virtual Machine
  19. 19. Entendendo o repositório development - projetos relacionados ao desenvolvimento de aplicações, tais como o código-fonte do SDK e NDK.
  20. 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. 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. 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. 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. 24. Entendendo o repositório out - o diretório que contém os artefatos resultantes da compilação.
  25. 25. Entendendo o repositório packages - contém o código fonte para os aplicativos padrão, como contatos, calendário, navegador.
  26. 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. 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. 28. Compilando $ ccache -M 10G $ . build/envsetup.sh $ set_stuff_for_environment
  29. 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. 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.
  31. 31. Enfim, Compilando $ make ou $ make -jN
  32. 32. Executando o emulador $ emulator
  33. 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
  34. 34. Arquitetura Android
  35. 35. Arquitetura Android
  36. 36. Por que Linux Kernel? • Gerenciador de memória e processos estável • Suporte para shared libraries • Open source!
  37. 37. Modificações Android Ashmem - Anonymous shared memory - Implementação Android para o gerenciador de memória compartilhada entre processos.
  38. 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. 39. Modificações Android Low Memory Killer - Mecanismo para matar processos quando o sistema está sendo executado com pouca memória.
  40. 40. Modificações Android Logging - Mecanismo de logging do android, via /dev/log
  41. 41. Modificações Android Pmem - Process memory allocator - driver de alocação de memória física para os processos
  42. 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. 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. 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. 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. 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. 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. 48. Libraries SGL: uma engine de gráficos 2D.
  49. 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. 50. Libraries FreeType: renderização de fontes em formatos bitmaps e vetoriais.
  51. 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. 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. 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. 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. 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. 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. 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. 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. 59. Application Framework Window Manager - Responsável por renderizar a UI.
  60. 60. Application Framework Package Manager - Instala / remove aplicativos
  61. 61. Application Framework Telephony Manager - Permite a interação com os serviços de telefonia, como SMS e MMS.
  62. 62. Application Framework Content Providers - O componente responsável por compartilhar dados entre aplicações.
  63. 63. Application Framework Resource Manager - Gerenciamento de recursos de aplicações - por exemplo, imagens, sons, etc
  64. 64. Application Framework View System - Fornece às aplicações os widgets (como botões, listas, etc) e gerencia seu comportamento.
  65. 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. 66. Application Framework XMPP - Mecanismo de troca de mensagens entre aplicações.
  67. 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. 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.

×