Android Architecture with Diagram
- Android is an open source, Linux-based software stack created for a wide array of devices and form factors.
- The major components of the Android platform are:
The Linux Kernel
- The foundation of the Android platform is the Linux kernel.
- For example, the Android Runtime (ART) relies on the Linux kernel for underlying functionalities such as threading and low-level memory management.
- Using a Linux kernel allows Android to take advantage of key security features and allows device manufacturers to develop hardware drivers for a well-known kernel.
Hardware Abstraction Layer (HAL)
- The Hardware Abstraction Layer (HAL) provides standard interfaces that expose device hardware capabilities to the higher-level Java API framework.
- The HAL consists of multiple library modules, each of which implements an interface for a specific type of hardware components, such as the camera or Bluetooth module.
- When a framework API makes a call to access device hardware, the Android system loads the library module for that hardware component.
- For devices running Android version 5.0 (API level 21) or higher, each app runs in its own process. And with its own instance of the Android Runtime (ART).
- ART is written to run multiple virtual machines on low-memory devices by executing DEX files, a bytecode format designed especially for Android that’s optimized for minimal memory footprint.
- Build toolchains, such as Jack, compile Java sources into DEX bytecode, which can run on the Android platform.
- Some of the major features of ART include the following:
- Ahead-of-time (AOT) and just-in-time (JIT) compilation
- Optimized garbage collection (GC)
- Better debugging support
Native C/C++ Libraries
- Many core Android Architecture system components and services, such as ART and HAL, are built from native code that requires native libraries written in C and C++.
- The Android platform provides Java framework APIs to expose the functionality of some of these native libraries to apps.
- For example, you can access OpenGL ES through the Android framework’s Java OpenGL API to add support for drawing and manipulating 2D and 3D graphics in your app.
- If you are developing an app that requires C or C++ code. You can use the Android NDK to access some of these native platform libraries directly from your native code.
Java API Framework
- The entire feature-set of the Android Architecture OS is available to you through APIs are written in the Java language.
- These APIs form the building blocks you need to create Android apps by simplifying the reuse of core, modular system components, and services, which include the following:
- A rich and extensible View System you can use to build an app’s UI, including lists, grids, text boxes, buttons, and even an embeddable web browser
- A Resource Manager, providing access to non-code resources such as localized strings, graphics, and layout files
- A Notification Manager that enables all apps to display custom alerts in the status bar
- An Activity Manager that manages the lifecycle of apps and provides a common navigation back stack
- Content Providers that enable apps to access data from other apps, such as the Contacts app. Or to share their own data
- Android Architecture comes with a set of core apps for email, SMS messaging, calendars, internet browsing, contacts, and more.
- Apps included with the platform have no special status among the apps the user chooses to install.
- So a third-party app can become the user’s default web browser, SMS messenger, or even the default keyboard.
- The system apps function both as apps for users and to provide key capabilities that developers can access from their own app.
- e.g., if your app would like to deliver an SMS message, you don’t need to build that functionality yourself. You can instead invoke whichever SMS app is already installed to deliver a message to the recipient you specify.