Your SlideShare is downloading. ×
Android Anatomy and Physiology
Agenda
•   Android Anatomy
    •   Linux Kernel

    •   Native Libraries

    •   Android Runtime

    •   Application Fr...
Android Anatomy
                                              Applications
 Home              Dialer         SMS/MMS      ...
Agenda
•   Android Anatomy
    •   Linux Kernel

    •   Native Libraries

    •   Android Runtime

    •   Application Fr...
Linux Kernel
•   Android is built on the Linux kernel, but Android is not
    Linux

•   No native windowing system

•   N...
Linux Kernel
•   Standard Linux 2.6.24 Kernel

•   Patch of “kernel enhancements” to support Android




                 ...
Why Linux Kernel?
•   Great memory and process management

•   Permissions-based security model

•   Proven driver model

...
Kernel Enhancements
•   Alarm
                                                   •     Low Memory Killer
•   Ashmem
      ...
Binder: Problem
•     Applications and Services may run in separate processes
      but must communicate and share data

•...
Binder: Solution
•     Driver to facilitate inter-process communication (IPC)

•     High performance through shared memor...
Binder in Action
Process A          Process B


  App A             Service B
Binder in Action
Process A             Process B


  App A     Context    Service B
Binder in Action
Process A                           Process B


  App A                   Context    Service B
          ...
Binder in Action
Process A                                           Process B


  App A                   Context   Binde...
Binder in Action
Process A                                           Process B


  App A                   Context   Binde...
Binder in Action
Process A                                                     Process B


  App A                   Conte...
Binder in Action
Process A                                                               Process B


  App A              ...
Binder in Action
Process A                                                               Process B


  App A              ...
Binder in Action
Process A                                                                Process B


  App A             ...
Binder


Android Interface Definition Language (AIDL)
•   http://code.google.com/android/reference/aidl.html

             ...
PM Problem

•     Mobile devices run on battery power

•     Batteries have limited capacity




                         ...
PM Solution
•     Built on top of standard Linux Power Management (PM)

•     More aggressive power management policy

•  ...
Android PM in Action
 App A    PowerManager   PM Driver
Android PM in Action
 App A                   PowerManager   PM Driver
         new wake lock

         PARTIAL
Android PM in Action
 App A                   PowerManager                 PM Driver
         new wake lock

         PART...
Android PM in Action
 App A                   PowerManager                 PM Driver
         new wake lock

         PART...
Android PM in Action
 App A                   PowerManager                 PM Driver
         new wake lock

         PART...
Android PM in Action
 App A                   PowerManager                 PM Driver
         new wake lock

         PART...
Android PM

android.os.PowerManager
•     Use wake locks carefully!


•     userActivity(long when, …);


                ...
Kernel
The Android kernel source is available today
at:


                   http://git.android.com

                     ...
Agenda
•   Android Anatomy
    •   Linux Kernel

    •   Native Libraries

    •   Android Runtime

    •   Application Fr...
Android Anatomy



                  Libraries
Surface Manager    Media Framework        SQLite

  OpenGL|ES           Fre...
Native Libraries
•   Bionic Libc

•   Function Libraries

•   Native Servers

•   Hardware Abstraction Libraries




     ...
Native Libraries
•   Bionic Libc

•   Function Libraries

•   Native Servers

•   Hardware Abstraction Libraries




     ...
What is Bionic?
•   What is bionic?
    •      Custom libc implementation, optimized for embedded use.




               ...
Why Bionic?
Why build a custom libc library?

•   License: we want to keep GPL out of user-space

•   Size: will load in e...
Bionic libc
•   BSD License

•   Small size and fast code paths

•   Very fast and small custom pthread implementation



...
Bionic libc
•   Built-in support for important Android-specific services
    •        system properties
         "     getp...
Bionic libc
•   Doesn't support certain POSIX features

•   Not compatible with Gnu Libc (glibc)

•   All native code must...
Native Libraries
•   Bionic Libc

•   Function Libraries

•   Native Servers

•   Hardware Abstraction Libraries




     ...
WebKit
•   Based on open source WebKit browser: http://webkit.org

•   Renders pages in full (desktop) view

•   Full CSS,...
Media Framework
•   Based on PacketVideo OpenCORE platform

•   Supports standard video, audio, still-frame formats

•   S...
SQLite
•   Light-weight transactional data store

•   Back end for most platform data storage




                        ...
Native Libraries
•   Bionic Libc

•   Function Libraries

•   Native Servers

•   Hardware Abstraction Libraries




     ...
Surface Flinger
                           Surface
       App
                           Surface                          ...
Surface Flinger
•   Surfaces passed as buffers via Binder IPC calls

•   Can use OpenGL ES and 2D hardware accelerator for...
Audio Flinger
                          Tone                                       Earpeace
                          Audi...
Native Libraries
•   Bionic Libc

•   Function Libraries

•   Native Servers

•   Hardware Abstraction Libraries




     ...
Hardware Abstraction Layer
                                              Applications
  Home              Dialer        SM...
Hardware Abstraction Libraries
•    User space C/C++ library layer

•    Defines the interface that Android requires hardwa...
Hardware Abstraction Libraries
Why do we need a user-space HAL?
 •     Not all components have standardized kernel driver ...
HAL Header Example
// must be provided by each Acme hardware implementation
typedef struct {
       int     (*foo)( void )...
Hardware Abstraction Libraries
•    Libraries are loaded dynamically at runtime as needed
         dlHandle = dlopen(“/sys...
Agenda
•   Android Anatomy
    •   Linux Kernel

    •   Native Libraries

    •   Android Runtime

    •   Application Fr...
Android Anatomy



                  Libraries                                   Android Runtime
Surface Manager          ...
Dalvik Virtual Machine
•   Android!s custom clean-room implementation virtual
    machine
    •   Provides application por...
Dalvik Virtual Machine
•   Designed for embedded environment
    •   Supports multiple virtual machine processes per devic...
Core Libraries
•   Core APIs for Java language provide a powerful, yet
    simple and familiar development platform
     •...
Agenda

•   Android Anatomy
    •   Linux Kernel

    •   Native Libraries

    •   Android Runtime

    •   Application F...
Android Anatomy

                           Application Framework
Activity Manager      Window                            ...
Core Platform Services
•   Services that are essential to the Android platform

•   Behind the scenes - applications typic...
Core Platform Services
•   Activity Manager




                            Application Framework
    Activity Manager   W...
Core Platform Services
•   Activity Manager

•   Package Manager




                            Application Framework
   ...
Core Platform Services
•   Activity Manager

•   Package Manager

•   Window Manager




                            Appli...
Core Platform Services
•   Activity Manager

•   Package Manager

•   Window Manager

•   Resource Manager




           ...
Core Platform Services
•   Activity Manager

•   Package Manager

•   Window Manager

•   Resource Manager

•   Content Pr...
Core Platform Services
•   Activity Manager

•   Package Manager

•   Window Manager

•   Resource Manager

•   Content Pr...
Hardware Services
•   Provide access to lower-level hardware APIs




                            Application Framework
  ...
Hardware Services
•   Provide access to lower-level hardware APIs

•   Typically accessed through local Manager object


L...
Hardware Services
•   Telephony Service




                            Application Framework
    Activity Manager   Windo...
Hardware Services
•   Telephony Service

•   Location Service




                            Application Framework
    Ac...
Hardware Services
•   Telephony Service

•   Location Service

•   Bluetooth Service




                            Appli...
Hardware Services
•   Telephony Service

•   Location Service

•   Bluetooth Service

•   WiFi Service




               ...
Hardware Services
•   Telephony Service

•   Location Service

•   Bluetooth Service

•   WiFi Service

•   USB Service


...
Hardware Services
•   Telephony Service

•   Location Service

•   Bluetooth Service

•   WiFi Service

•   USB Service

•...
Application Framework
More Information

•   At Google I/O
    •    “Inside the Android Application Framework”

•   Online
...
Android Anatomy
                                              Applications
 Home              Dialer         SMS/MMS      ...
Agenda

•   Android Anatomy
    •   Linux Kernel

    •   Native Libraries

    •   Application Framework

•   Android Phy...
Agenda

•   Android Anatomy
    •   Linux Kernel

    •   Native Libraries

    •   Application Framework

•   Android Phy...
Runtime Walkthrough
It all starts with init…


Similar to most Linux-based systems at startup, the
bootloader loads the Li...
Runtime Walkthrough
Init starts Linux daemons, including:
  •   USB Daemon (usbd) to manage USB connections

  •   Android...
Runtime Walkthrough
Init process starts the zygote process:
  •   A nascent process which initializes a Dalvik VM instance...
Runtime Walkthrough
Init starts runtime process:

•   Initializes Service Manager – the context manager for
    Binder tha...
Runtime Walkthrough
Runtime process sends request for Zygote to start System
Service




              Service
           ...
Runtime Walkthrough
Runtime process sends request for Zygote to start System
Server
•   Zygote forks a new VM instance for...
Runtime Walkthrough
System Service starts the native system servers, including:
•   Surface Flinger

•   Audio Flinger


 ...
Runtime Walkthrough
Native system servers register with Service Manager as IPC
service targets:




                      ...
Runtime Walkthrough
System Service starts the Android managed services:
     Content   Telephony   Bluetooth    Connectivi...
Runtime Walkthrough
Android managed Services register with Service Manager:
     Content   Telephony   Bluetooth    Connec...
Runtime Walkthrough


                                      …
                                   Power
                   ...
Runtime Walkthrough
After system server loads all services, the system is ready…
 Init     Daemon       runtime   Zygote  ...
Runtime Walkthrough
After system server loads all services, the system is ready…
 Init     Daemon       runtime   Zygote  ...
Runtime Walkthrough
After system server loads all services, the system is ready…
 Init     Daemon       runtime   Zygote  ...
Runtime Walkthrough
Each subsequent application is launched in it!s own process
   Daemon      runtime   Zygote   System  ...
Agenda

•   Android Anatomy
    •   Linux Kernel

    •   Native Libraries

    •   Framework Services

•   Android Physio...
Layer Interaction


There are 3 main flavors of Android layer cake:
  •   App !   Runtime Service !   lib

  •   App !   Ru...
Layer Interaction


There are 3 main flavors of Android layer cake:
  •   App !   Runtime Service !   lib

  •   App !   Ru...
Android Runtime Services
Applications
               Application
                             Binder IPC

Application Fram...
Android Runtime Services
Applications
               Application
                             Binder IPC

Application Fram...
Android Runtime Services
Applications
               Application
                             Binder IPC

Application Fram...
Android Runtime Services
Applications
               Application
                             Binder IPC

Application Fram...
Example: Location Manager
Applications
                             Binder IPC
               Application

Application Fra...
Layer Interaction


There are 3 main flavors of Android layer cake:
  •   App !   Runtime Service !   lib

  •   App !   Ru...
Android Native Services
Applications

              Application
Application
Framework                     Runtime
        ...
Android Native Services
Applications

            Application
 Application
Framework                   Runtime
           ...
Android Native Services
Applications

            Application
 Application
Framework                   Runtime
           ...
Android Native Services
Applications

            Application
 Application
Framework                   Runtime
           ...
Android Native Services
Applications

            Application
 Application
Framework                 MediaPlayer
         ...
Android Native Services
Applications

            Application
 Application
Framework                 MediaPlayer
         ...
Android Native Services
Applications

            Application
 Application
Framework                 MediaPlayer
         ...
Layer Interaction


There are 3 main flavors of Android layer cake:
  •   App !   Runtime Service !   lib

  •   App !   Ru...
Daemon Connection
Applications

            Application
 Application
Framework                   Runtime
                 ...
Daemon Connection
Applications

            Application
 Application
Framework                   Runtime
                 ...
Daemon Connection
Applications

            Application
 Application
Framework                   Runtime
                 ...
Daemon Connection
Applications

            Application
 Application
Framework                 Telephony Manager
         ...
Layer Interaction


There are 3 main flavors of Android layer cake:
  •   App !   Runtime Service !   lib

  •   App !   Ru...
Android Anatomy
                                              Applications
 Home              Dialer         SMS/MMS      ...
Upcoming SlideShare
Loading in...5
×

The anatomy and philosophy of Android - Google I/O 2009

6,568

Published on

The material belongs to Google. I do not own it. Copyright infringement is not intended.

Published in: Technology
4 Comments
37 Likes
Statistics
Notes
No Downloads
Views
Total Views
6,568
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
4
Likes
37
Embeds 0
No embeds

No notes for slide

Transcript of "The anatomy and philosophy of Android - Google I/O 2009"

  1. 1. Android Anatomy and Physiology
  2. 2. Agenda • Android Anatomy • Linux Kernel • Native Libraries • Android Runtime • Application Framework • Android Physiology • Start-up Walkthrough • Layer Interaction
  3. 3. Android Anatomy Applications Home Dialer SMS/MMS IM Browser Camera Alarm Calculator Contacts Voice Dial Email Calendar Media Player Albums Clock … Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager … Libraries Android Runtime Surface Manager Core Libraries Media Framework SQLite OpenGL|ES FreeType WebKit Dalvik Virtual Machine SGL SSL Libc Linux Kernel Display Driver Camera Driver Bluetooth Driver Shared Memory Binder (IPC) Driver Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  4. 4. Agenda • Android Anatomy • Linux Kernel • Native Libraries • Android Runtime • Application Framework • Android Physiology • Start-up Walkthrough • Layer Interaction
  5. 5. Linux Kernel • Android is built on the Linux kernel, but Android is not Linux • No native windowing system • No glibc support • Does not include the full set of standard Linux utilities Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  6. 6. Linux Kernel • Standard Linux 2.6.24 Kernel • Patch of “kernel enhancements” to support Android Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  7. 7. Why Linux Kernel? • Great memory and process management • Permissions-based security model • Proven driver model • Support for shared libraries • It!s already open source! Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  8. 8. Kernel Enhancements • Alarm • Low Memory Killer • Ashmem • Kernel Debugger • Binder • Logger • Power Management Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  9. 9. Binder: Problem • Applications and Services may run in separate processes but must communicate and share data • IPC can introduce significant processing overhead and security holes Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  10. 10. Binder: Solution • Driver to facilitate inter-process communication (IPC) • High performance through shared memory • Per-process thread pool for processing requests • Reference counting, and mapping of object references across processes • Synchronous calls between processes Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  11. 11. Binder in Action Process A Process B App A Service B
  12. 12. Binder in Action Process A Process B App A Context Service B
  13. 13. Binder in Action Process A Process B App A Context Service B get service
  14. 14. Binder in Action Process A Process B App A Context Binder Driver Service B get service service
  15. 15. Binder in Action Process A Process B App A Context Binder Driver Service B get service service
  16. 16. Binder in Action Process A Process B App A Context Binder Driver Service B get service service call foo(object)
  17. 17. Binder in Action Process A Process B App A Context Binder Driver Service B get service service call foo(object) marshal proxy object
  18. 18. Binder in Action Process A Process B App A Context Binder Driver Service B get service service call foo(object) marshal proxy object relay to IPC threads
  19. 19. Binder in Action Process A Process B App A Context Binder Driver Service B get service service call foo(object) marshal proxy object relay to IPC threads call return
  20. 20. Binder Android Interface Definition Language (AIDL) • http://code.google.com/android/reference/aidl.html Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  21. 21. PM Problem • Mobile devices run on battery power • Batteries have limited capacity Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  22. 22. PM Solution • Built on top of standard Linux Power Management (PM) • More aggressive power management policy • Components make requests to keep the power on through “wake locks” • Supports different types of wake locks Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  23. 23. Android PM in Action App A PowerManager PM Driver
  24. 24. Android PM in Action App A PowerManager PM Driver new wake lock PARTIAL
  25. 25. Android PM in Action App A PowerManager PM Driver new wake lock PARTIAL create wake lock
  26. 26. Android PM in Action App A PowerManager PM Driver new wake lock PARTIAL create wake lock Turn off LCD
  27. 27. Android PM in Action App A PowerManager PM Driver new wake lock PARTIAL create wake lock Turn off LCD release release
  28. 28. Android PM in Action App A PowerManager PM Driver new wake lock PARTIAL create wake lock Turn off LCD release release Turn off CPU
  29. 29. Android PM android.os.PowerManager • Use wake locks carefully! • userActivity(long when, …); Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  30. 30. Kernel The Android kernel source is available today at: http://git.android.com Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  31. 31. Agenda • Android Anatomy • Linux Kernel • Native Libraries • Android Runtime • Application Framework • Android Physiology • Start-up Walkthrough • Layer Interaction
  32. 32. Android Anatomy Libraries Surface Manager Media Framework SQLite OpenGL|ES FreeType WebKit SGL SSL Libc Linux Kernel Display Driver Camera Driver Bluetooth Driver Shared Memory Binder (IPC) Driver Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  33. 33. Native Libraries • Bionic Libc • Function Libraries • Native Servers • Hardware Abstraction Libraries Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  34. 34. Native Libraries • Bionic Libc • Function Libraries • Native Servers • Hardware Abstraction Libraries Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  35. 35. What is Bionic? • What is bionic? • Custom libc implementation, optimized for embedded use. Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  36. 36. Why Bionic? Why build a custom libc library? • License: we want to keep GPL out of user-space • Size: will load in each process, so it needs to be small • Fast: limited CPU power means we need to be fast Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  37. 37. Bionic libc • BSD License • Small size and fast code paths • Very fast and small custom pthread implementation Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  38. 38. Bionic libc • Built-in support for important Android-specific services • system properties " getprop(“my.system.property”, buff, default); • log capabilities ! LOGI(“Logging a message with priority ‘Info’”); Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  39. 39. Bionic libc • Doesn't support certain POSIX features • Not compatible with Gnu Libc (glibc) • All native code must be compiled against bionic Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  40. 40. Native Libraries • Bionic Libc • Function Libraries • Native Servers • Hardware Abstraction Libraries Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  41. 41. WebKit • Based on open source WebKit browser: http://webkit.org • Renders pages in full (desktop) view • Full CSS, Javascript, DOM, AJAX support • Support for single-column and adaptive view rendering Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  42. 42. Media Framework • Based on PacketVideo OpenCORE platform • Supports standard video, audio, still-frame formats • Support for hardware / software codec plug-ins Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  43. 43. SQLite • Light-weight transactional data store • Back end for most platform data storage Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  44. 44. Native Libraries • Bionic Libc • Function Libraries • Native Servers • Hardware Abstraction Libraries Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  45. 45. Surface Flinger Surface App Surface Frame Surface Flinger Buffer App Surface • Provides system-wide surface “composer”, handling all surface rendering to frame buffer device • Can combine 2D and 3D surfaces and surfaces from multiple applications Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  46. 46. Surface Flinger • Surfaces passed as buffers via Binder IPC calls • Can use OpenGL ES and 2D hardware accelerator for its compositions • Double-buffering using page-flip Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  47. 47. Audio Flinger Tone Earpeace Audio App Media Player Audio Flinger Speaker App Game Audio Bluetooth • Manages all audio output devices • Processes multiple audio streams into PCM audio out paths • Handles audio routing to various outputs Libraries Surface Manager Media Framework SQLite WebKit Libc OpenGL|ES Audio Manager FreeType SSL …
  48. 48. Native Libraries • Bionic Libc • Function Libraries • Native Servers • Hardware Abstraction Libraries Libraries Surface Manager Media Framework SQLite LibWebCore Libc OpenGL|ES Audio Manager FreeType SSL …
  49. 49. Hardware Abstraction Layer Applications Home Dialer SMS/MMS IM Browser Camera Alarm Calculator Contacts Voice Dial Email Calendar Media Player Photo Album Clock … Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager … Libraries Android Runtime Surface Media Core Libraries Manager Framework SQLite WebKit Libc Audio OpenGL|ES Manager FreeType SSL … Dalvik Virtual Machine Hardware Abstraction Layer Graphics Audio Camera Bluetooth GPS Radio (RIL) WiFi … Linux Kernel Shared Memory Display Driver Camera Driver Bluetooth Driver Driver Binder (IPC) Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  50. 50. Hardware Abstraction Libraries • User space C/C++ library layer • Defines the interface that Android requires hardware “drivers” to implement • Separates the Android platform logic from the hardware interface Hardware Abstraction Layer Graphics Audio Camera Bluetooth GPS Radio (RIL) WiFi …
  51. 51. Hardware Abstraction Libraries Why do we need a user-space HAL? • Not all components have standardized kernel driver interfaces • Kernel drivers are GPL which exposes any proprietary IP • Android has specific requirements for hardware drivers Hardware Abstraction Layer Graphics Audio Camera Bluetooth GPS Radio (RIL) WiFi …
  52. 52. HAL Header Example // must be provided by each Acme hardware implementation typedef struct { int (*foo)( void ); ! char (*bar)( void ); ! … ! } AcmeFunctions; const AcmeFunctions *Acme_Init(const struct Env *env, int argc, char **argv); Hardware Abstraction Layer Graphics Audio Camera Bluetooth GPS Radio (RIL) WiFi …
  53. 53. Hardware Abstraction Libraries • Libraries are loaded dynamically at runtime as needed dlHandle = dlopen(“/system/lib/libacme.so”, RTLD_NOW); ... acmeInit = (const AcmeFunctions *(*)(const struct Env *, int, char **))dlsym(dlHandle, ”Acme_Init"); ... acmeFuncs = acmeInit(&env, argc, argv); Hardware Abstraction Layer Graphics Audio Camera Bluetooth GPS Radio (RIL) WiFi …
  54. 54. Agenda • Android Anatomy • Linux Kernel • Native Libraries • Android Runtime • Application Framework • Android Physiology • Start-up Walkthrough • Layer Interaction
  55. 55. Android Anatomy Libraries Android Runtime Surface Manager Core Libraries Media Framework SQLite OpenGL|ES FreeType WebKit Dalvik Virtual Machine SGL SSL Libc Linux Kernel Display Driver Camera Driver Bluetooth Driver Shared Memory Binder (IPC) Driver Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  56. 56. Dalvik Virtual Machine • Android!s custom clean-room implementation virtual machine • Provides application portability and runtime consistency • Runs optimized file format (.dex) and Dalvik bytecode • Java .class / .jar files converted to .dex at build time Android Runtime Core Libraries Dalvik Virtual Machine
  57. 57. Dalvik Virtual Machine • Designed for embedded environment • Supports multiple virtual machine processes per device • Highly CPU-optimized bytecode interpreter • Uses runtime memory very efficiently Android Runtime Core Libraries Dalvik Virtual Machine
  58. 58. Core Libraries • Core APIs for Java language provide a powerful, yet simple and familiar development platform • Data structures • Utilities • File access • Network Access • Graphics • … Android Runtime Core Libraries Dalvik Virtual Machine
  59. 59. Agenda • Android Anatomy • Linux Kernel • Native Libraries • Android Runtime • Application Framework • Android Physiology • Start-up Walkthrough • Layer Interaction
  60. 60. Android Anatomy Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager … Libraries Android Runtime Surface Manager Core Libraries Media Framework SQLite OpenGL|ES FreeType WebKit Dalvik Virtual Machine SGL SSL Libc Linux Kernel Display Driver Camera Driver Bluetooth Driver Shared Memory Binder (IPC) Driver Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  61. 61. Core Platform Services • Services that are essential to the Android platform • Behind the scenes - applications typically don!t access them directly Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  62. 62. Core Platform Services • Activity Manager Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  63. 63. Core Platform Services • Activity Manager • Package Manager Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  64. 64. Core Platform Services • Activity Manager • Package Manager • Window Manager Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  65. 65. Core Platform Services • Activity Manager • Package Manager • Window Manager • Resource Manager Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  66. 66. Core Platform Services • Activity Manager • Package Manager • Window Manager • Resource Manager • Content Providers Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  67. 67. Core Platform Services • Activity Manager • Package Manager • Window Manager • Resource Manager • Content Providers • View System Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  68. 68. Hardware Services • Provide access to lower-level hardware APIs Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  69. 69. Hardware Services • Provide access to lower-level hardware APIs • Typically accessed through local Manager object LocationManager lm = (LocationManager) Context.getSystemService(Context.LOCATION_SERVICE); Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  70. 70. Hardware Services • Telephony Service Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  71. 71. Hardware Services • Telephony Service • Location Service Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  72. 72. Hardware Services • Telephony Service • Location Service • Bluetooth Service Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  73. 73. Hardware Services • Telephony Service • Location Service • Bluetooth Service • WiFi Service Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  74. 74. Hardware Services • Telephony Service • Location Service • Bluetooth Service • WiFi Service • USB Service Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  75. 75. Hardware Services • Telephony Service • Location Service • Bluetooth Service • WiFi Service • USB Service • Sensor Service Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  76. 76. Application Framework More Information • At Google I/O • “Inside the Android Application Framework” • Online • http://code.google.com/android Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager …
  77. 77. Android Anatomy Applications Home Dialer SMS/MMS IM Browser Camera Alarm Calculator Contacts Voice Dial Email Calendar Media Player Albums Clock … Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager … Libraries Android Runtime Surface Manager Core Libraries Media Framework SQLite OpenGL|ES FreeType WebKit Dalvik Virtual Machine SGL SSL Libc Linux Kernel Display Driver Camera Driver Bluetooth Driver Shared Memory Binder (IPC) Driver Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management
  78. 78. Agenda • Android Anatomy • Linux Kernel • Native Libraries • Application Framework • Android Physiology • Start-up Walkthrough • Layer Interaction
  79. 79. Agenda • Android Anatomy • Linux Kernel • Native Libraries • Application Framework • Android Physiology • Start-up Walkthrough • Layer Interaction
  80. 80. Runtime Walkthrough It all starts with init… Similar to most Linux-based systems at startup, the bootloader loads the Linux kernel and starts the init process. Init Linux Kernel
  81. 81. Runtime Walkthrough Init starts Linux daemons, including: • USB Daemon (usbd) to manage USB connections • Android Debug Bridge (adbd) to manage ADB connections • Debugger Daemon (debuggerd) to manage debug processes requests (dump memory, etc.) • Radio Interface Layer Daemon (rild) to manage communication with the radio usbd adbd debuggerd rild Init
  82. 82. Runtime Walkthrough Init process starts the zygote process: • A nascent process which initializes a Dalvik VM instance • Loads classes and listens on socket for requests to spawn VMs • Forks on request to create VM instances for managed processes • Copy-on-write to maximize re-use and minimize footprint usbd adbd debuggerd daemons Zygote Init
  83. 83. Runtime Walkthrough Init starts runtime process: • Initializes Service Manager – the context manager for Binder that handles service registration and lookup • Registers Service Manager as default context manager for Binder services Service Manager usbd adbd debuggerd daemons runtime Zygote Init
  84. 84. Runtime Walkthrough Runtime process sends request for Zygote to start System Service Service Manager usbd adbd debuggerd daemons runtime Zygote Init
  85. 85. Runtime Walkthrough Runtime process sends request for Zygote to start System Server • Zygote forks a new VM instance for the System Service process and starts the service Service System Manager Server usbd adbd debuggerd daemons runtime Zygote Dalvik VM Init
  86. 86. Runtime Walkthrough System Service starts the native system servers, including: • Surface Flinger • Audio Flinger Audio Flinger Surface Flinger Service System Manager Server usbd adbd debuggerd daemons runtime Zygote Dalvik VM Init
  87. 87. Runtime Walkthrough Native system servers register with Service Manager as IPC service targets: Audio Flinger Surface Flinger Service System Manager Server usbd adbd debuggerd daemons runtime Zygote Dalvik VM Init
  88. 88. Runtime Walkthrough System Service starts the Android managed services: Content Telephony Bluetooth Connectivity Location Manager Service Service Service Manager Window Activity Package Power Manager Manager Manager Manager … Camera Surface Service Flinger Service System Manager Server usbd adbd debuggerd daemons runtime Zygote Dalvik VM Init
  89. 89. Runtime Walkthrough Android managed Services register with Service Manager: Content Telephony Bluetooth Connectivity Location Manager Service Service Service Manager Window Activity Package Power Manager Manager Manager Manager … Service Camera Manager Service Camera Surface Service Flinger Service System Manager Server usbd adbd debuggerd daemons runtime Zygote Dalvik VM Init
  90. 90. Runtime Walkthrough … Power Manager Activity Manager Camera Surface Service Flinger Service System Manager Server usbd adbd debuggerd daemons runtime Zygote Dalvik VM Init
  91. 91. Runtime Walkthrough After system server loads all services, the system is ready… Init Daemon runtime Zygote System Processes Server Activity Manager Package Manager Window Manager … Dalvik VM Surface Flinger usbd adbd Init debuggerd daemons runtime Zygote Audio Flinger
  92. 92. Runtime Walkthrough After system server loads all services, the system is ready… Init Daemon runtime Zygote System Home Processes Server Home Activity Manager Dalvik VM Package Manager Window Manager … Dalvik VM Surface Flinger usbd adbd Init debuggerd daemons runtime Zygote Audio Flinger
  93. 93. Runtime Walkthrough After system server loads all services, the system is ready… Init Daemon runtime Zygote System Home Processes Server Activity Home Manager Package Dalvik VM Manager Window Manager … Dalvik VM Surface Flinger usbd adbd Init debuggerd daemons runtime Zygote Audio Flinger libc libc libc libc libc libc
  94. 94. Runtime Walkthrough Each subsequent application is launched in it!s own process Daemon runtime Zygote System Home Contacts Processes Server Activity Home Contacts Manager Package Dalvik VM Dalvik VM Manager Window Manager … Dalvik VM Surface Flinger usbd adbd debuggerd daemons runtime Zygote Audio Flinger libc libc libc libc libc libc
  95. 95. Agenda • Android Anatomy • Linux Kernel • Native Libraries • Framework Services • Android Physiology • Start-up Walkthrough • Layer Interaction
  96. 96. Layer Interaction There are 3 main flavors of Android layer cake: • App ! Runtime Service ! lib • App ! Runtime Service ! Native Service ! lib • App ! Runtime Service ! Native Daemon ! lib
  97. 97. Layer Interaction There are 3 main flavors of Android layer cake: • App ! Runtime Service ! lib • App ! Runtime Service ! Native Service ! lib • App ! Runtime Service ! Native Daemon ! lib
  98. 98. Android Runtime Services Applications Application Binder IPC Application Framework Runtime Service Libraries Linux Kernel Kernel Driver
  99. 99. Android Runtime Services Applications Application Binder IPC Application Framework Runtime Service JNI Libraries Native Service Binding Linux Kernel Kernel Driver
  100. 100. Android Runtime Services Applications Application Binder IPC Application Framework Runtime Service JNI Libraries Native Service Binding Dynamic load HAL Library Linux Kernel Kernel Driver
  101. 101. Android Runtime Services Applications Application Binder IPC Application Framework Runtime Service JNI Libraries Native Service Binding Dynamic load HAL Library Linux Kernel Kernel Driver
  102. 102. Example: Location Manager Applications Binder IPC Application Application Framework Location Manager Service GpsLocationProvider JNI Libraries GpsLocationProvider Dynamic load libgps.so Linux Kernel Kernel Driver
  103. 103. Layer Interaction There are 3 main flavors of Android layer cake: • App ! Runtime Service ! lib • App ! Runtime Service ! Native Service ! lib • App ! Runtime Service ! Native Daemon ! lib
  104. 104. Android Native Services Applications Application Application Framework Runtime Service JNI Libraries Native Service Binding Linux Kernel
  105. 105. Android Native Services Applications Application Application Framework Runtime Service JNI Libraries Binder IPC Native Service Native Service Binding Linux Kernel
  106. 106. Android Native Services Applications Application Application Framework Runtime Service JNI Libraries Binder IPC Native Service Native Service Binding Dynamic load HAL Library Linux Kernel
  107. 107. Android Native Services Applications Application Application Framework Runtime Service JNI Libraries Binder IPC Native Service Native Service Binding Dynamic load HAL Library Linux Kernel Kernel Driver
  108. 108. Android Native Services Applications Application Application Framework MediaPlayer JNI Libraries Binder IPC MediaPlayer AudioFlinger Dynamic load Media Framework libaudio.so Linux Kernel Kernel Driver
  109. 109. Android Native Services Applications Application Application Framework MediaPlayer JNI Libraries Binder IPC MediaPlayer AudioFlinger Dynamic load Media libaudio.so Framework ALSA Linux Kernel Kernel Driver
  110. 110. Android Native Services Applications Application Application Framework MediaPlayer JNI Libraries Binder IPC MediaPlayer AudioFlinger Dynamic load Media libaudio.so Framework Proprietary Audio Driver Linux Kernel
  111. 111. Layer Interaction There are 3 main flavors of Android layer cake: • App ! Runtime Service ! lib • App ! Runtime Service ! Native Service ! lib • App ! Runtime Service ! Native Daemon ! lib
  112. 112. Daemon Connection Applications Application Application Framework Runtime Service JNI Libraries Native Service Binding Linux Kernel Kernel Driver
  113. 113. Daemon Connection Applications Application Application Framework Runtime Service JNI Libraries sockets Native Service Daemon Binding Linux Kernel Kernel Driver
  114. 114. Daemon Connection Applications Application Application Framework Runtime Service JNI Libraries sockets Native Service Daemon Binding Dynamic load HAL Library Linux Kernel Kernel Driver
  115. 115. Daemon Connection Applications Application Application Framework Telephony Manager JNI Libraries sockets Telephony rild Manager Dynamic load libril.so Linux Kernel Kernel Driver
  116. 116. Layer Interaction There are 3 main flavors of Android layer cake: • App ! Runtime Service ! lib • App ! Runtime Service ! Native Service ! lib • App ! Runtime Service ! Native Daemon ! lib
  117. 117. Android Anatomy Applications Home Dialer SMS/MMS IM Browser Camera Alarm Calculator Contacts Voice Dial Email Calendar Media Player Albums Clock … Application Framework Activity Manager Window View Notification Manager Content Providers System Manager Telephony Location Package Manager Manager Resource Manager Manager … Libraries Android Runtime Surface Manager Core Libraries Media Framework SQLite OpenGL|ES FreeType WebKit Dalvik Virtual Machine SGL SSL Libc Linux Kernel Display Driver Camera Driver Bluetooth Driver Shared Memory Binder (IPC) Driver Driver Audio Power USB Driver Keypad Driver WiFi Driver Drivers Management

×