Starting March 27, 2025, we recommend using android-latest-release instead of aosp-main to build and contribute to AOSP. For more information, see Changes to AOSP.
Stay organized with collections
Save and categorize content based on your preferences.
The Android Open Source Project (AOSP) is publicly available and modifiable
Android source code. Anyone can download and modify AOSP for their device. AOSP
provides a complete and fully functional implementation of the Android mobile
platform.
There are two levels of compatibility for devices implementing AOSP: AOSP
compatibility and Android compatibility. An AOSP-compatible device must
conform to the list of requirements in the
Compatibility Definition Document (CDD). An
Android-compatible device must conform to the list of requirements in the CDD
and Vendor Software Requirements (VSR) and tests such as those in the
Vendor Test Suite (VTS) and
Compatibility Test Suite (CTS). For further
information on Android compatibility, refer to the
Android compatibility program.
AOSP architecture
The software stack for AOSP contains the following layers:
Figure 1. AOSP software stack architecture.
Following is a list of definitions for terms used in Figure 1:
Android app
An app created solely using the Android API. Google
Play Store is widely used to find and download Android apps, though there are
many other alternatives. In some cases, a device manufacturer might want to
preinstall an Android app to support the core functionality of the device. If
you're interested in developing Android apps, refer to
developers.android.com.
Privileged app
An app created using a combination of the Android and system APIs. These apps
must be preinstalled as privileged apps on a device.
Device manufacturer app
An app created using a combination of the Android API, system API, and direct
access to the Android framework implementation. Because a device manufacturer
might directly access unstable APIs within the Android framework, these apps
must be preinstalled on the device and can be updated only when the device's
system software is updated.
System API
The System API represents Android APIs available only to partners and
OEMs for inclusion in bundled applications. These APIs are marked as @SystemApi
in the source code.
Android API
The Android API is the publicly available API for third-party Android app
developers. For information on the Android API, refer to
Android API reference.
Android framework
A group of Java classes, interfaces, and other precompiled code upon which
apps are built. Portions of the framework are publicly accessible through the
use of the Android API. Other portions of the framework are
available only to OEMs through the use of the system APIs. Android
framework code runs inside an app's process.
System services
System services are modular, focused components such as system_server,
SurfaceFlinger, and MediaService. Functionality exposed by Android framework API
communicates with system services to access the underlying hardware.
Android runtime (ART)
A Java runtime environment provided by AOSP. ART performs the
translation of the app's bytecode into processor-specific instructions
that are executed by the device's runtime environment.
Hardware abstraction layer (HAL)
A HAL is an abstraction layer with a standard interface for hardware vendors
to implement. HALs allow Android to be agnostic about lower-level driver
implementations. Using a HAL lets you implement functionality without
affecting or modifying the higher level system. For further information,
see the HAL overview.
Native daemons and libraries
Native daemons in this layer include init, healthd, logd, and
storaged. These daemons interact directly with the kernel or other interfaces
and don't depend on a userspace-based HAL implementation.
Native libraries in this layer include libc, liblog, libutils,
libbinder, and libselinux. These Native libraries interact directly with
the kernel or other interfaces and don't depend on a userspace-based HAL
implementation.
Kernel
The kernel is the central part of any operating system and talks to the
underlying hardware on a device. Where possible, the AOSP kernel is split
into hardware-agnostic modules and vendor-specific modules. For a description,
including definitions, of AOSP kernel components, refer to the
Kernel overview.
What's next?
If you're new to AOSP, and want to get started with development, refer to
the Get started section.
If you want to learn more about a specific layer of AOSP, click the section's
name in the left navigation and begin with the overview for that section.
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-07-24 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-07-24 UTC."],[],[],null,["# Architecture overview\n\nThe *Android Open Source Project (AOSP)* is publicly available and modifiable\nAndroid source code. Anyone can download and modify AOSP for their device. AOSP\nprovides a complete and fully functional implementation of the Android mobile\nplatform.\n| **Note:** AOSP can't provide support for apps that require backend services, such as a cloud messaging or advanced location services app. AOSP also doesn't include a full set of end-user apps that might be needed for particular types of devices.\n\nThere are two levels of compatibility for devices implementing AOSP: AOSP\ncompatibility and Android compatibility. An *AOSP-compatible device* must\nconform to the list of requirements in the\n[Compatibility Definition Document (CDD)](/docs/compatibility/cdd). An\n*Android-compatible device* must conform to the list of requirements in the CDD\nand Vendor Software Requirements (VSR) and tests such as those in the\n[Vendor Test Suite (VTS)](/docs/core/tests/vts) and\n[Compatibility Test Suite (CTS)](/docs/compatibility/cts). For further\ninformation on Android compatibility, refer to the\n[Android compatibility program](/docs/compatibility).\n\nAOSP architecture\n-----------------\n\nThe software stack for AOSP contains the following layers:\n\n**Figure 1.** AOSP software stack architecture.\n\nFollowing is a list of definitions for terms used in Figure 1:\n\n*Android app*\n: An app created solely using the Android API. Google\n Play Store is widely used to find and download Android apps, though there are\n many other alternatives. In some cases, a device manufacturer might want to\n preinstall an Android app to support the core functionality of the device. If\n you're interested in developing Android apps, refer to\n [developers.android.com](https://developer.android.com/).\n\n*Privileged app*\n: An app created using a combination of the Android and system APIs. These apps\n must be preinstalled as privileged apps on a device.\n\n*Device manufacturer app*\n: An app created using a combination of the Android API, system API, and direct\n access to the Android framework implementation. Because a device manufacturer\n might directly access unstable APIs within the Android framework, these apps\n must be preinstalled on the device and can be updated only when the device's\n system software is updated.\n\n*System API*\n: The System API represents Android APIs available only to partners and\n OEMs for inclusion in bundled applications. These APIs are marked as @SystemApi\n in the source code.\n\n*Android API*\n: The Android API is the publicly available API for third-party Android app\n developers. For information on the Android API, refer to\n [Android API reference](https://developer.android.com/reference).\n\n*Android framework*\n: A group of Java classes, interfaces, and other precompiled code upon which\n apps are built. Portions of the framework are publicly accessible through the\n use of the Android API. Other portions of the framework are\n available only to OEMs through the use of the system APIs. Android\n framework code runs inside an app's process.\n\n*System services*\n: System services are modular, focused components such as `system_server`,\n SurfaceFlinger, and MediaService. Functionality exposed by Android framework API\n communicates with system services to access the underlying hardware.\n\n*Android runtime (ART)*\n: A Java runtime environment provided by AOSP. ART performs the\n translation of the app's bytecode into processor-specific instructions\n that are executed by the device's runtime environment.\n\n*Hardware abstraction layer (HAL)*\n: A HAL is an abstraction layer with a standard interface for hardware vendors\n to implement. HALs allow Android to be agnostic about lower-level driver\n implementations. Using a HAL lets you implement functionality without\n affecting or modifying the higher level system. For further information,\n see the [HAL overview](/docs/core/architecture/hal).\n\n*Native daemons and libraries*\n\n: Native daemons in this layer include `init`, `healthd`, `logd`, and\n `storaged`. These daemons interact directly with the kernel or other interfaces\n and don't depend on a userspace-based HAL implementation.\n\n Native libraries in this layer include `libc`, `liblog`, `libutils`,\n `libbinder`, and `libselinux`. These Native libraries interact directly with\n the kernel or other interfaces and don't depend on a userspace-based HAL\n implementation.\n\n*Kernel*\n\n: The kernel is the central part of any operating system and talks to the\n underlying hardware on a device. Where possible, the AOSP kernel is split\n into hardware-agnostic modules and vendor-specific modules. For a description,\n including definitions, of AOSP kernel components, refer to the\n [Kernel overview](/docs/core/architecture/kernel).\n\nWhat's next?\n------------\n\n- If you're new to AOSP, and want to get started with development, refer to the [Get started section](/docs/setup).\n- If you want to learn more about a specific layer of AOSP, click the section's name in the left navigation and begin with the overview for that section."]]