Open-source, Linux-based OS optimized for battery-powered, low-memory devices with access to various interfaces
Versions: name and API version (eg. Android 12 supports both API 31 and API 32)

Linux kernel services

Android automatically manages the process lifecycle and interprocess communication, file and network I/O, device drivers, …
Security management: apps run in sandboxes, with permissions given by the user
Power management: screen dimming, process killing, JobScheduler API

Native libraries
  • System C library
  • Surface manager (composing windows), OpenGL (3D graphics)
  • OpenMAX, Media Framework (audio / video / image processing)
  • SQLite (relational database engine)
  • Webkit (browser engine)
Android runtime

Compilation process:

  • programmer Java/Kotlin source
  • ==javac/kotlinc Java bytecode/class files==
  • ==Proguard obfuscated Java bytecode/class files==
  • ==DX DEX bytecode file==
  • ==Zip .apk file (resources + code)==
  • ==dex2out .elf file (readable to hardware)==

Process VM - compilation of .apk to native machine code:

  • Dalvik (until 4.4 KitKat): trace-based just-in-time compilation (saving storage space, but lower performance)
  • Android Runtime - ART (from 5.0 Lollypop): ahead-of-time compilation

Gradle: Automated build system, dependency manager, APK signing, ProGuard support

Application framework
  • Package manager: manage installed applications
  • Window manager: connect view to activity’s window
  • Content provider: manage inter-application data sharing access
  • Location manager / Google Play Location Services: provide location information
  • Notification manager: manage sound, vibration, LED flash and content of notifications
  • Resource manager: manage (programmatically accessible) application resources
  • Activity manager: manage application lifecycle and application stack navigation
  • View system: build application UI from a layout definition, slowly deprecated for Jetpack Compose
System applications

Handling certain Intents