SlideShare a Scribd company logo
Android Internals
RAJESH KHETAN
Co-founder @ Bangalore Tech Events
Agenda
 Android Boot Up Process
 How Package Manager Service works ?
A Typical Android Boot-Up
KERNEL
Installd,
adbd,
servicemanger...
System Server
Zygote
App 1 , App 2 …App N
INIT
A Typical Android Boot-Up
KERNEL
Installd,
adbd,
servicemanger...
System Server
Zygote
App 1 , App 2 …App N
INIT
Kernel
 Special forked version of Linux
 Features :
 Wake locks
 Low Memory Killer (OOM adjustment)
 Provides Binder driver
A Typical Android Boot-Up
KERNEL
Installd,
adbd,
servicemanger...
System Server
Zygote
App 1 , App 2 …App N
INIT
INIT
 Root / First User Space process
 Responsibilities :
 Set up file system permissions
 Start native daemons
A Typical Android Boot-Up
KERNEL
Installd,
adbd,
servicemanger...
System Server
Zygote
App 1 , App 2 …App N
INIT
A Typical Android Boot-Up
KERNEL
Installd,
adbd,
servicemanger...
System Server
Zygote
App 1 , App 2 …App N
INIT
Zygote
 Base of all other java processes
 The app_process command invokes Android Runtime to start the first DVM/ART
 The VM then invokes zygotes main method (ZygoteInit.java)
Zygote
Register Zygote Socket
fork systemserver
Preloads Classes And Resources
Wait for requests
fork()
Zygote
Register Zygote Socket
fork systemserver
Preloads Classes And Resources
Wait for requests
fork()
Zygote
Register Zygote Socket
fork systemserver
Preloads Classes And Resources
Wait for requests
fork()
Zygote
Register Zygote Socket
fork systemserver
Preloads Classes And Resources
Wait for requests
fork()
Zygote
Register Zygote Socket
fork systemserver
Preloads Classes And Resources
Wait for requests
fork()
A Typical Android Boot-Up
KERNEL
Installd,
adbd,
servicemanger...
System Server
Zygote
App 1 , App 2 …App N
INIT
A Typical Android Boot-Up
KERNEL
Installd,
adbd,
servicemanger...
System Server
Zygote
App 1 , App 2 …App N
INIT
System Server
 Heart of the Android System
 Start system services
 Register services with the service manager
System Server
Creates system context
Start bootstrap services
Start Other Services
Start core services
ActivityManagerService
PackageManagerService
WindowManagerService
Wifi/Bluetooth Service
SystemUI
Loads server library
System Server
Creates system context
Start bootstrap services
Start Other Services
Start core services
ActivityManagerService
PackageManagerService
WindowManagerService
Wifi/Bluetooth Service
SystemUI
Loads server library
System Server
Creates system context
Start bootstrap services
Start Other Services
Start core services
ActivityManagerService
PackageManagerService
WindowManagerService
Wifi/Bluetooth Service
SystemUI
Loads server library
System Server
Creates system context
Start bootstrap services
Start Other Services
Start core services
ActivityManagerService
PackageManagerService
WindowManagerService
Wifi/Bluetooth Service
SystemUI
Loads server library
System Server
Creates system context
Start bootstrap services
Start Other Services
Start core services
ActivityManagerService
PackageManagerService
WindowManagerService
Wifi/Bluetooth Service
SystemUI
Loads server library
System Server
Creates system context
Start bootstrap services
Start Other Services
Start core services
ActivityManagerService
PackageManagerService
WindowManagerService
Wifi/Bluetooth Service
SystemUI
Loads server library
System Server
Creates system context
Start bootstrap services
Start Other Services
Start core services
ActivityManagerService
PackageManagerService
WindowManagerService
Wifi/Bluetooth Service
SystemUI
Loads server library
System Server
Creates system context
Start bootstrap services
Start Other Services
Start core services
ActivityManagerService
PackageManagerService
WindowManagerService
Wifi/Bluetooth Service
SystemUI
Loads server library
System Server
Creates system context
Start bootstrap services
Start Other Services
Start core services
ActivityManagerService
PackageManagerService
WindowManagerService
Wifi/Bluetooth Service
SystemUI
Loads server library
Package Manager Service
 Responsibilties :
 Installation/Uninstallation of apps
 Managing Permissions & Certificate Handling
 Exposing APIs to 3rd party applications
Package Manager Service(Flow)
Scan Packages
Grant Permissions
Initialization
Manifest Parsing
Perform DexOpt
Collect Certificates
Generate Package Info
Asset Loading
Package Manager Service(Flow)
Scan Packages
Grant Permissions
Initialization
Manifest Parsing
Perform DexOpt
Collect Certificates
Generate Package Info
Asset Loading
Package Manager Service(Flow)
Scan Packages
Grant Permissions
Initialization
Manifest Parsing
Perform DexOpt
Collect Certificates
Generate Package Info
Asset Loading
Package Manager Service(Flow)
Scan Packages
Grant Permissions
Initialization
Manifest Parsing
Perform DexOpt
Collect Certificates
Generate Package Info
Asset Loading
Package Manager Service(Flow)
Scan Packages
Grant Permissions
Initialization
Manifest Parsing
Perform DexOpt
Collect Certificates
Generate Package Info
Asset Loading
Package Manager Service(Flow)
Scan Packages
Grant Permissions
Initialization
Manifest Parsing
Perform DexOpt
Collect Certificates
Generate Package Info
Asset Loading
Package Manager Service(Flow)
Scan Packages
Grant Permissions
Initialization
Manifest Parsing
Perform DexOpt
Collect Certificates
Generate Package Info
Asset Loading
Package Manager Service(Flow)
Scan Packages
Grant Permissions
Initialization
Manifest Parsing
Perform DexOpt
Collect Certificates
Generate Package Info
Asset Loading
Package Manager Service(Flow)
Scan Packages
Grant Permissions
Initialization
Manifest Parsing
Perform DexOpt
Collect Certificates
Generate Package Info
Asset Loading
Package Manager Service
 Package information is cached into /data/system/packages.xml
 Runtime permissions are cached into /data/system/0/runtime_packages.xml
PackageIntsaller
Offers the ability to install, upgrade, and
remove applications on the device.
PackageInstallerActivity
 Launched when a new application is installed via side loading
 Display parsing errors via a dialog.
 Enable unknown applications setting.
 Memory check
 Check for same existing package
 Install app
Installd
 PMS lacks root privileges
 Creating , deleting & changing the ownership of applications directories requires superuser capabilities .
 The PMS delegates these operations to the installd daemon
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
Activity Manager
Android Runtime
Kernel Init
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
Activity Manager
Android Runtime
Kernel
- Initialization
- Mount root FS
- Starts Init Process
Init
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
Activity Manager
Android Runtime
Kernel
Init
- Set up env variables
- Mount FS
- Set UP FS perm
- Start native daemons
A Quick Recap
Native Daemons
- servicemanager
- app_process -X Zygote
- adbd
- installd
Zygote
Launcher
System Server
Activity Manager
Android Runtime
Kernel Init
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
Activity Manager
Android Runtime
- Start first VM
- Call zygote’s main method
Kernel Init
A Quick Recap
Native Daemons
Zygote
- Register Zygote socket
- Preload classes & res.
- Start systemserver process
- Listen for connections
Launcher
System Server
Activity Manager
Android Runtime
Kernel Init
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
- Start services
- Register with service manager
Activity Manager
Android Runtime
Kernel Init
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
Activity Manager
- Init itself
- Send Intent.Category_HOME
- Send BOOT_COMPLETE
Android Runtime
Kernel Init
A Quick Recap
Native Daemons
Zygote
Launcher
- Init itself
- Register OnClick handlers
System Server
Activity Manager
Android Runtime
Kernel Init
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
Activity Manager
Android Runtime
Kernel Init
Click
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
Activity Manager
Android Runtime
Kernel Init
Click
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
Activity Manager
Android Runtime
Kernel Init
Click
A Quick Recap
Native Daemons
Zygote
Launcher
System Server
Activity Manager
Android Runtime
Kernel Init
Click
A Quick Recap
Native Daemons
- servicemanager
- app_process -X Zygote
- adbd
- installd
Zygote
- Register Zygote socket
- Preload classes & resources
- Start systemserver process
- Listen for connections
Launcher
- Init itself
- Register OnClick handlers
Click
System Server
- Start services
- Register with servicemanager
Activity Manager
- Init itself
- Send Intent.Category_HOME
- Send BOOT_COMPLETE
broadcast
New app
Android Runtime
- Start first VM
- Call zygote’s main method
Kernel
- Initialization
- Mount root FS
- Starts Init Process
Init
- Set up env variables
- Mount FS
- Set UP FS perm
- Start native daemons
THANK YOU
 References :
 Embedded Android – Karim Yaghmour
 https://android.googlesource.com/
www.bangaloretechevents.com
rajeshkhetan.rk@gmail.com
Contact :

More Related Content

PPT
Learning AOSP - Android Booting Process
PDF
Init of Android
PPT
Android booting sequece and setup and debugging
PDF
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
PPT
Learning AOSP - Android Linux Device Driver
PDF
Booting Android: bootloaders, fastboot and boot images
PDF
Embedded Android : System Development - Part I
ODP
Q4.11: Porting Android to new Platforms
Learning AOSP - Android Booting Process
Init of Android
Android booting sequece and setup and debugging
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Learning AOSP - Android Linux Device Driver
Booting Android: bootloaders, fastboot and boot images
Embedded Android : System Development - Part I
Q4.11: Porting Android to new Platforms

What's hot (20)

PDF
Android Internals
PDF
Android IPC Mechanism
ODP
Embedded Android : System Development - Part III
PDF
Android Things : Building Embedded Devices
PDF
Android Storage - Vold
PDF
Android Internals
PDF
Understanding the Android System Server
PDF
Low Level View of Android System Architecture
PDF
Explore Android Internals
PPT
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
PPT
Parceable serializable
PDF
Android Boot Time Optimization
PPTX
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
PDF
Embedded Android : System Development - Part IV
PPTX
Android audio system(오디오 플링거 서비스 초기화)
PDF
Android is NOT just 'Java on Linux'
PPTX
Android+init+process
PPTX
Binder: Android IPC
PDF
Android's HIDL: Treble in the HAL
PPTX
Android AIDL Concept
Android Internals
Android IPC Mechanism
Embedded Android : System Development - Part III
Android Things : Building Embedded Devices
Android Storage - Vold
Android Internals
Understanding the Android System Server
Low Level View of Android System Architecture
Explore Android Internals
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
Parceable serializable
Android Boot Time Optimization
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Embedded Android : System Development - Part IV
Android audio system(오디오 플링거 서비스 초기화)
Android is NOT just 'Java on Linux'
Android+init+process
Binder: Android IPC
Android's HIDL: Treble in the HAL
Android AIDL Concept
Ad

Similar to Android internals By Rajesh Khetan (20)

ODP
Android. behind the scenes_programatica 2012
PPTX
Android Booting Sequence
PPTX
Introduction of Android Architecture
PDF
Android Patching & Client-Side CyberSecurity
PPTX
Android Architecture
PDF
Extending Android's Platform Toolsuite
PDF
Android for Embedded Linux Developers
PPTX
Android training course
PDF
3 getting to know the android tools - en-us
PDF
Android Internals at Linaro Connect Asia 2013
PDF
An Introduction To Android
PDF
Inside The Android Os Building Customizing Managing And Operating Android Sys...
PDF
Android Architecture
ODP
Inter-process communication of Android
PDF
PDF
TOMOYO Linux on Android
PDF
CNIT 128 6. Analyzing Android Applications (Part 1)
PDF
Android Attacks
PPT
Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)
Android. behind the scenes_programatica 2012
Android Booting Sequence
Introduction of Android Architecture
Android Patching & Client-Side CyberSecurity
Android Architecture
Extending Android's Platform Toolsuite
Android for Embedded Linux Developers
Android training course
3 getting to know the android tools - en-us
Android Internals at Linaro Connect Asia 2013
An Introduction To Android
Inside The Android Os Building Customizing Managing And Operating Android Sys...
Android Architecture
Inter-process communication of Android
TOMOYO Linux on Android
CNIT 128 6. Analyzing Android Applications (Part 1)
Android Attacks
Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)
Ad

Android internals By Rajesh Khetan

  • 2. Agenda  Android Boot Up Process  How Package Manager Service works ?
  • 3. A Typical Android Boot-Up KERNEL Installd, adbd, servicemanger... System Server Zygote App 1 , App 2 …App N INIT
  • 4. A Typical Android Boot-Up KERNEL Installd, adbd, servicemanger... System Server Zygote App 1 , App 2 …App N INIT
  • 5. Kernel  Special forked version of Linux  Features :  Wake locks  Low Memory Killer (OOM adjustment)  Provides Binder driver
  • 6. A Typical Android Boot-Up KERNEL Installd, adbd, servicemanger... System Server Zygote App 1 , App 2 …App N INIT
  • 7. INIT  Root / First User Space process  Responsibilities :  Set up file system permissions  Start native daemons
  • 8. A Typical Android Boot-Up KERNEL Installd, adbd, servicemanger... System Server Zygote App 1 , App 2 …App N INIT
  • 9. A Typical Android Boot-Up KERNEL Installd, adbd, servicemanger... System Server Zygote App 1 , App 2 …App N INIT
  • 10. Zygote  Base of all other java processes  The app_process command invokes Android Runtime to start the first DVM/ART  The VM then invokes zygotes main method (ZygoteInit.java)
  • 11. Zygote Register Zygote Socket fork systemserver Preloads Classes And Resources Wait for requests fork()
  • 12. Zygote Register Zygote Socket fork systemserver Preloads Classes And Resources Wait for requests fork()
  • 13. Zygote Register Zygote Socket fork systemserver Preloads Classes And Resources Wait for requests fork()
  • 14. Zygote Register Zygote Socket fork systemserver Preloads Classes And Resources Wait for requests fork()
  • 15. Zygote Register Zygote Socket fork systemserver Preloads Classes And Resources Wait for requests fork()
  • 16. A Typical Android Boot-Up KERNEL Installd, adbd, servicemanger... System Server Zygote App 1 , App 2 …App N INIT
  • 17. A Typical Android Boot-Up KERNEL Installd, adbd, servicemanger... System Server Zygote App 1 , App 2 …App N INIT
  • 18. System Server  Heart of the Android System  Start system services  Register services with the service manager
  • 19. System Server Creates system context Start bootstrap services Start Other Services Start core services ActivityManagerService PackageManagerService WindowManagerService Wifi/Bluetooth Service SystemUI Loads server library
  • 20. System Server Creates system context Start bootstrap services Start Other Services Start core services ActivityManagerService PackageManagerService WindowManagerService Wifi/Bluetooth Service SystemUI Loads server library
  • 21. System Server Creates system context Start bootstrap services Start Other Services Start core services ActivityManagerService PackageManagerService WindowManagerService Wifi/Bluetooth Service SystemUI Loads server library
  • 22. System Server Creates system context Start bootstrap services Start Other Services Start core services ActivityManagerService PackageManagerService WindowManagerService Wifi/Bluetooth Service SystemUI Loads server library
  • 23. System Server Creates system context Start bootstrap services Start Other Services Start core services ActivityManagerService PackageManagerService WindowManagerService Wifi/Bluetooth Service SystemUI Loads server library
  • 24. System Server Creates system context Start bootstrap services Start Other Services Start core services ActivityManagerService PackageManagerService WindowManagerService Wifi/Bluetooth Service SystemUI Loads server library
  • 25. System Server Creates system context Start bootstrap services Start Other Services Start core services ActivityManagerService PackageManagerService WindowManagerService Wifi/Bluetooth Service SystemUI Loads server library
  • 26. System Server Creates system context Start bootstrap services Start Other Services Start core services ActivityManagerService PackageManagerService WindowManagerService Wifi/Bluetooth Service SystemUI Loads server library
  • 27. System Server Creates system context Start bootstrap services Start Other Services Start core services ActivityManagerService PackageManagerService WindowManagerService Wifi/Bluetooth Service SystemUI Loads server library
  • 28. Package Manager Service  Responsibilties :  Installation/Uninstallation of apps  Managing Permissions & Certificate Handling  Exposing APIs to 3rd party applications
  • 29. Package Manager Service(Flow) Scan Packages Grant Permissions Initialization Manifest Parsing Perform DexOpt Collect Certificates Generate Package Info Asset Loading
  • 30. Package Manager Service(Flow) Scan Packages Grant Permissions Initialization Manifest Parsing Perform DexOpt Collect Certificates Generate Package Info Asset Loading
  • 31. Package Manager Service(Flow) Scan Packages Grant Permissions Initialization Manifest Parsing Perform DexOpt Collect Certificates Generate Package Info Asset Loading
  • 32. Package Manager Service(Flow) Scan Packages Grant Permissions Initialization Manifest Parsing Perform DexOpt Collect Certificates Generate Package Info Asset Loading
  • 33. Package Manager Service(Flow) Scan Packages Grant Permissions Initialization Manifest Parsing Perform DexOpt Collect Certificates Generate Package Info Asset Loading
  • 34. Package Manager Service(Flow) Scan Packages Grant Permissions Initialization Manifest Parsing Perform DexOpt Collect Certificates Generate Package Info Asset Loading
  • 35. Package Manager Service(Flow) Scan Packages Grant Permissions Initialization Manifest Parsing Perform DexOpt Collect Certificates Generate Package Info Asset Loading
  • 36. Package Manager Service(Flow) Scan Packages Grant Permissions Initialization Manifest Parsing Perform DexOpt Collect Certificates Generate Package Info Asset Loading
  • 37. Package Manager Service(Flow) Scan Packages Grant Permissions Initialization Manifest Parsing Perform DexOpt Collect Certificates Generate Package Info Asset Loading
  • 38. Package Manager Service  Package information is cached into /data/system/packages.xml  Runtime permissions are cached into /data/system/0/runtime_packages.xml
  • 39. PackageIntsaller Offers the ability to install, upgrade, and remove applications on the device.
  • 40. PackageInstallerActivity  Launched when a new application is installed via side loading  Display parsing errors via a dialog.  Enable unknown applications setting.  Memory check  Check for same existing package  Install app
  • 41. Installd  PMS lacks root privileges  Creating , deleting & changing the ownership of applications directories requires superuser capabilities .  The PMS delegates these operations to the installd daemon
  • 42. A Quick Recap Native Daemons Zygote Launcher System Server Activity Manager Android Runtime Kernel Init
  • 43. A Quick Recap Native Daemons Zygote Launcher System Server Activity Manager Android Runtime Kernel - Initialization - Mount root FS - Starts Init Process Init
  • 44. A Quick Recap Native Daemons Zygote Launcher System Server Activity Manager Android Runtime Kernel Init - Set up env variables - Mount FS - Set UP FS perm - Start native daemons
  • 45. A Quick Recap Native Daemons - servicemanager - app_process -X Zygote - adbd - installd Zygote Launcher System Server Activity Manager Android Runtime Kernel Init
  • 46. A Quick Recap Native Daemons Zygote Launcher System Server Activity Manager Android Runtime - Start first VM - Call zygote’s main method Kernel Init
  • 47. A Quick Recap Native Daemons Zygote - Register Zygote socket - Preload classes & res. - Start systemserver process - Listen for connections Launcher System Server Activity Manager Android Runtime Kernel Init
  • 48. A Quick Recap Native Daemons Zygote Launcher System Server - Start services - Register with service manager Activity Manager Android Runtime Kernel Init
  • 49. A Quick Recap Native Daemons Zygote Launcher System Server Activity Manager - Init itself - Send Intent.Category_HOME - Send BOOT_COMPLETE Android Runtime Kernel Init
  • 50. A Quick Recap Native Daemons Zygote Launcher - Init itself - Register OnClick handlers System Server Activity Manager Android Runtime Kernel Init
  • 51. A Quick Recap Native Daemons Zygote Launcher System Server Activity Manager Android Runtime Kernel Init Click
  • 52. A Quick Recap Native Daemons Zygote Launcher System Server Activity Manager Android Runtime Kernel Init Click
  • 53. A Quick Recap Native Daemons Zygote Launcher System Server Activity Manager Android Runtime Kernel Init Click
  • 54. A Quick Recap Native Daemons Zygote Launcher System Server Activity Manager Android Runtime Kernel Init Click
  • 55. A Quick Recap Native Daemons - servicemanager - app_process -X Zygote - adbd - installd Zygote - Register Zygote socket - Preload classes & resources - Start systemserver process - Listen for connections Launcher - Init itself - Register OnClick handlers Click System Server - Start services - Register with servicemanager Activity Manager - Init itself - Send Intent.Category_HOME - Send BOOT_COMPLETE broadcast New app Android Runtime - Start first VM - Call zygote’s main method Kernel - Initialization - Mount root FS - Starts Init Process Init - Set up env variables - Mount FS - Set UP FS perm - Start native daemons
  • 56. THANK YOU  References :  Embedded Android – Karim Yaghmour  https://android.googlesource.com/ www.bangaloretechevents.com rajeshkhetan.rk@gmail.com Contact :