1. Introduction

This document enumerates the requirements that must be met in order for devices to be compatible with Android 9.

The use of “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” is per the IETF standard defined in RFC2119.

As used in this document, a “device implementer” or “implementer” is a person or organization developing a hardware/software solution running Android 9. A “device implementation” or “implementation" is the hardware/software solution so developed.

To be considered compatible with Android 9, device implementations MUST meet the requirements presented in this Compatibility Definition, including any documents incorporated via reference.

Where this definition or the software tests described in section 10 are silent, ambiguous, or incomplete, it is the responsibility of the device implementer to ensure compatibility with existing implementations.

For this reason, the Android Open Source Project is both the reference and preferred implementation of Android. Device implementers are STRONGLY RECOMMENDED to base their implementations to the greatest extent possible on the “upstream” source code available from the Android Open Source Project. While some components can hypothetically be replaced with alternate implementations, it is STRONGLY RECOMMENDED to not follow this practice, as passing the software tests will become substantially more difficult. It is the implementer’s responsibility to ensure full behavioral compatibility with the standard Android implementation, including and beyond the Compatibility Test Suite. Finally, note that certain component substitutions and modifications are explicitly forbidden by this document.

Many of the resources linked to in this document are derived directly or indirectly from the Android SDK and will be functionally identical to the information in that SDK’s documentation. In any cases where this Compatibility Definition or the Compatibility Test Suite disagrees with the SDK documentation, the SDK documentation is considered authoritative. Any technical details provided in the linked resources throughout this document are considered by inclusion to be part of this Compatibility Definition.

1.1 Document Structure

1.1.1. Requirements by Device Type

Section 2 contains all of the requirements that apply to a specific device type. Each subsection of Section 2 is dedicated to a specific device type.

All the other requirements, that universally apply to any Android device implementations, are listed in the sections after Section 2. These requirements are referenced as "Core Requirements" in this document.

1.1.2. Requirement ID

Requirement ID is assigned for MUST requirements.

Each ID is defined as below:

1.1.3. Requirement ID in Section 2

The Requirement ID in Section 2 starts with the corresponding section ID that is followed by the Requirement ID described above.

2. Device Types

While the Android Open Source Project provides a software stack that can be used for a variety of device types and form factors, there are a few device types that have a relatively better established application distribution ecosystem.

This section describes those device types, and additional requirements and recommendations applicable for each device type.

All Android device implementations that do not fit into any of the described device types MUST still meet all requirements in the other sections of this Compatibility Definition.

2.1 Device Configurations

For the major differences in hardware configuration by device type, see the device-specific requirements that follow in this section.

2.2. Handheld Requirements

An Android Handheld device refers to an Android device implementation that is typically used by holding it in the hand, such as an mp3 player, phone, or tablet.

Android device implementations are classified as a Handheld if they meet all the following criteria:

The additional requirements in the rest of this section are specific to Android Handheld device implementations.

Note: Requirements that do not apply to Android Tablet devices are marked with an *.

2.2.1. Hardware

Handheld device implementations:

If Handheld device implementations claim support for high dynamic range displays through Configuration.isScreenHdr() , they:

Handheld device implementations:

If Handheld device implementations include a 3-axis accelerometer, they:

If Handheld device implementations include a gyroscope, they:

Handheld device implementations that can make a voice call and indicate any value other than PHONE_TYPE_NONE in getPhoneType:

Handheld device implementations:

If Handheld device implementations include a metered connection, they:

Handheld device implementations:

If Handheld device implementations are 32-bit:

If Handheld device implementations are 64-bit:

Note that the "memory available to the kernel and userspace" above refers to the memory space provided in addition to any memory already dedicated to hardware components such as radio, video, and so on that are not under the kernel’s control on device implementations.

Handheld device implementations:

If handheld device implementations include a USB port supporting peripheral mode, they:

Handheld device implementations:

If Handheld device implementations are capable of meeting all the performance requirements for supporting VR mode and include support for it, they:

2.2.2. Multimedia

Handheld device implementations MUST support the following audio encoding:

Handheld device implementations MUST support the following audio decoding:

Handheld device implementations MUST support the following video encoding and make it available to third-party applications:

Handheld device implementations MUST support the following video decoding:

2.2.3. Software

Handheld device implementations:

If Handheld device implementations support Assist action, they:

If Android Handheld device implementations support a lock screen, they:

If Handheld device implementations support a secure lock screen, they:

Handheld device implementations:

If Android handheld device implementations declare FEATURE_BLUETOOTH or FEATURE_WIFI support, they:

2.2.4. Performance and Power

Handheld device implementations:

If Handheld device implementations include features to improve device power management that are included in AOSP or extend the features that are included in AOSP, they:

Handheld device implementations:

If Handheld device implementations include a screen or video output, they:

2.2.5. Security Model

Handheld device implementations:

When Handheld device implementations support a secure lock screen, they:

2.3. Television Requirements

An Android Television device refers to an Android device implementation that is an entertainment interface for consuming digital media, movies, games, apps, and/or live TV for users sitting about ten feet away (a “lean back” or “10-foot user interface”).

Android device implementations are classified as a Television if they meet all the following criteria:

The additional requirements in the rest of this section are specific to Android Television device implementations.

2.3.1. Hardware

Television device implementations:

If Television device implementations include a gyroscope, they:

Television device implementations:

If Television device implementations include a USB port that supports host mode, they:

If TV device implementations are 32-bit:

If TV device implementations are 64-bit:

Note that the "memory available to the kernel and userspace" above refers to the memory space provided in addition to any memory already dedicated to hardware components such as radio, video, and so on that are not under the kernel’s control on device implementations.

Television device implementations:

2.3.2. Multimedia

Television device implementations MUST support the following audio encoding formats:

Television device implementations MUST support the following video encoding formats:

Television device implementations:

Television device implementations MUST support the following video decoding formats:

Television device implementations are STRONGLY RECOMMENDED to support the following video decoding formats:

Television device implementations MUST support H.264 decoding, as detailed in Section 5.3.4, at standard video frame rates and resolutions up to and including:

Television device implementations with H.265 hardware decoders MUST support H.265 decoding, as detailed in Section 5.3.5, at standard video frame rates and resolutions up to and including:

If Television device implementations with H.265 hardware decoders support H.265 decoding and the UHD decoding profile, they:

Television device implementations MUST support VP8 decoding, as detailed in Section 5.3.6, at standard video frame rates and resolutions up to and including:

Television device implementations with VP9 hardware decoders MUST support VP9 decoding, as detailed in Section 5.3.7, at standard video frame rates and resolutions up to and including:

If Television device implementations with VP9 hardware decoders support VP9 decoding and the UHD decoding profile, they:

Television device implementations:

If Television device implementations support UHD decoding and have support for external displays, they:

If Television device implementations do not support UHD decoding but have support for external displays, they:

2.3.3. Software

Television device implementations:

If Android Television device implementations support a lock screen,they:

Television device implementations:

If Television device implementations report the feature android.hardware.audio.output, they:

Television device implementations:

2.3.4. Performance and Power

If Television device implementations include features to improve device power management that are included in AOSP or extend the features that are included in AOSP, they:

Television device implementations:

2.4. Watch Requirements

An Android Watch device refers to an Android device implementation intended to be worn on the body, perhaps on the wrist.

Android device implementations are classified as a Watch if they meet all the following criteria:

The additional requirements in the rest of this section are specific to Android Watch device implementations.

2.4.1. Hardware

Watch device implementations:

2.4.2. Multimedia

No additional requirements.

2.4.3. Software

Watch device implementations:

Watch device implementations:

Watch device implementations that declare the android.hardware.audio.output feature flag:

If Watch device implementations report the feature android.hardware.audio.output, they:

2.4.4. Performance and Power

If Watch device implementations include features to improve device power management that are included in AOSP or extend the features that are included in AOSP, they:

Watch device implementations:

2.5. Automotive Requirements

Android Automotive implementation refers to a vehicle head unit running Android as an operating system for part or all of the system and/or infotainment functionality.

Android device implementations are classified as an Automotive if they declare the feature android.hardware.type.automotive or meet all the following criteria.

The additional requirements in the rest of this section are specific to Android Automotive device implementations.

2.5.1. Hardware

Automotive device implementations:

If Automotive device implementations include a 3-axis accelerometer, they:

If Automotive device implementations include a GPS/GNSS receiver and report the capability to applications through the android.hardware.location.gps feature flag:

If Automotive device implementations include a gyroscope, they:

Automotive device implementations:

Automotive device implementations:

Automotive device implementations:

If Automotive device implementations provide shared external storage via a portion of the internal non-removable storage, they:

If Automotive device implementations are 32-bit:

If Automotive device implementations are 64-bit:

Note that the "memory available to the kernel and userspace" above refers to the memory space provided in addition to any memory already dedicated to hardware components such as radio, video, and so on that are not under the kernel’s control on device implementations.

Automotive device implementations:

Automotive device implementations:

Automotive device implementations:

2.5.2. Multimedia

Automotive device implementations MUST support the following audio encoding:

Automotive device implementations MUST support the following video encoding:

Automotive device implementations MUST support the following video decoding:

Automotive device implementations are STRONGLY RECOMMENDED to support the following video decoding:

2.5.3. Software

Automotive device implementations:

If Automotive device implementations include a push-to-talk button, they:

Automotive device implementations:

2.5.4. Performance and Power

If Automotive device implementations include features to improve device power management that are included in AOSP or extend the features that are included in AOSP, they:

Automotive device implementations:

2.5.5. Security Model

If Automotive device implementations support multiple users, they:

If Automotive device implementations support a secure lock screen, they:

Automotive device implementations:

2.6. Tablet Requirements

An Android Tablet device refers to an Android device implementation that is typically used by holding in both hands and not in a clamshell form-factor.

Android device implementations are classified as a Tablet if they meet all the following criteria:

Tablet device implementations have similar requirements to handheld device implementations. The exceptions are in indicated by an * in that section and noted for reference in this section.

2.4.1. Hardware

Screen Size

Minimum Memory and Storage (Section 7.6.1)

The screen densities listed for small/normal screens in the handheld requirements are not applicable to tablets.

USB peripheral mode (Section 7.7.1)

If tablet device implementations include a USB port supporting peripheral mode, they:

Virtual Reality Mode (Section 7.9.1)

Virtual Reality High Performance (Section 7.9.2)

Virtual reality requirements are not applicable to tablets.

3. Software

3.1. Managed API Compatibility

The managed Dalvik bytecode execution environment is the primary vehicle for Android applications. The Android application programming interface (API) is the set of Android platform interfaces exposed to applications running in the managed runtime environment.

Device implementations:

3.1.1. Android Extensions

Android includes the support of extending the managed APIs while keeping the same API level version.

3.1.2. Android Library

Due to Apache HTTP client deprecation, device implementations:

The AOSP implementation meets these requirements.

3.2. Soft API Compatibility

In addition to the managed APIs from section 3.1, Android also includes a significant runtime-only “soft” API, in the form of such things as intents, permissions, and similar aspects of Android applications that cannot be enforced at application compile time.

3.2.1. Permissions

3.2.2. Build Parameters

The Android APIs include a number of constants on the android.os.Build class that are intended to describe the current device.

Parameter Details
VERSION.RELEASE The version of the currently-executing Android system, in human-readable format. This field MUST have one of the string values defined in 9.
VERSION.SDK The version of the currently-executing Android system, in a format accessible to third-party application code. For Android 9, this field MUST have the integer value 9_INT.
VERSION.SDK_INT The version of the currently-executing Android system, in a format accessible to third-party application code. For Android 9, this field MUST have the integer value 9_INT.
VERSION.INCREMENTAL A value chosen by the device implementer designating the specific build of the currently-executing Android system, in human-readable format. This value MUST NOT be reused for different builds made available to end users. A typical use of this field is to indicate which build number or source-control change identifier was used to generate the build. There are no requirements on the specific format of this field, except that it MUST NOT be null or the empty string ("").
BOARD A value chosen by the device implementer identifying the specific internal hardware used by the device, in human-readable format. A possible use of this field is to indicate the specific revision of the board powering the device. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9_-]+$”.
BRAND A value reflecting the brand name associated with the device as known to the end users. MUST be in human-readable format and SHOULD represent the manufacturer of the device or the company brand under which the device is marketed. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9_-]+$”.
SUPPORTED_ABIS The name of the instruction set (CPU type + ABI convention) of native code. See section 3.3. Native API Compatibility.
SUPPORTED_32_BIT_ABIS The name of the instruction set (CPU type + ABI convention) of native code. See section 3.3. Native API Compatibility.
SUPPORTED_64_BIT_ABIS The name of the second instruction set (CPU type + ABI convention) of native code. See section 3.3. Native API Compatibility.
CPU_ABI The name of the instruction set (CPU type + ABI convention) of native code. See section 3.3. Native API Compatibility.
CPU_ABI2 The name of the second instruction set (CPU type + ABI convention) of native code. See section 3.3. Native API Compatibility.
DEVICE A value chosen by the device implementer containing the development name or code name identifying the configuration of the hardware features and industrial design of the device. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9_-]+$”. This device name MUST NOT change during the lifetime of the product.
FINGERPRINT A string that uniquely identifies this build. It SHOULD be reasonably human-readable. It MUST follow this template:

$(BRAND)/$(PRODUCT)/
    $(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)

For example:

acme/myproduct/
    mydevice:9/LMYXX/3359:userdebug/test-keys

The fingerprint MUST NOT include whitespace characters. If other fields included in the template above have whitespace characters, they MUST be replaced in the build fingerprint with another character, such as the underscore ("_") character. The value of this field MUST be encodable as 7-bit ASCII.

HARDWARE The name of the hardware (from the kernel command line or /proc). It SHOULD be reasonably human-readable. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9_-]+$”.
HOST A string that uniquely identifies the host the build was built on, in human-readable format. There are no requirements on the specific format of this field, except that it MUST NOT be null or the empty string ("").
ID An identifier chosen by the device implementer to refer to a specific release, in human-readable format. This field can be the same as android.os.Build.VERSION.INCREMENTAL, but SHOULD be a value sufficiently meaningful for end users to distinguish between software builds. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9._-]+$”.
MANUFACTURER The trade name of the Original Equipment Manufacturer (OEM) of the product. There are no requirements on the specific format of this field, except that it MUST NOT be null or the empty string (""). This field MUST NOT change during the lifetime of the product.
MODEL A value chosen by the device implementer containing the name of the device as known to the end user. This SHOULD be the same name under which the device is marketed and sold to end users. There are no requirements on the specific format of this field, except that it MUST NOT be null or the empty string (""). This field MUST NOT change during the lifetime of the product.
PRODUCT A value chosen by the device implementer containing the development name or code name of the specific product (SKU) that MUST be unique within the same brand. MUST be human-readable, but is not necessarily intended for view by end users. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9_-]+$”. This product name MUST NOT change during the lifetime of the product.
SERIAL MUST return "UNKNOWN".
TAGS A comma-separated list of tags chosen by the device implementer that further distinguishes the build. This field MUST have one of the values corresponding to the three typical Android platform signing configurations: release-keys, dev-keys, test-keys.
TIME A value representing the timestamp of when the build occurred.
TYPE A value chosen by the device implementer specifying the runtime configuration of the build. This field MUST have one of the values corresponding to the three typical Android runtime configurations: user, userdebug, or eng.
USER A name or user ID of the user (or automated user) that generated the build. There are no requirements on the specific format of this field, except that it MUST NOT be null or the empty string ("").
SECURITY_PATCH A value indicating the security patch level of a build. It MUST signify that the build is not in any way vulnerable to any of the issues described up through the designated Android Public Security Bulletin. It MUST be in the format [YYYY-MM-DD], matching a defined string documented in the Android Public Security Bulletin or in the Android Security Advisory, for example "2015-11-01".
BASE_OS A value representing the FINGERPRINT parameter of the build that is otherwise identical to this build except for the patches provided in the Android Public Security Bulletin. It MUST report the correct value and if such a build does not exist, report an empty string ("").
BOOTLOADER A value chosen by the device implementer identifying the specific internal bootloader version used in the device, in human-readable format. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9._-]+$”.
getRadioVersion() MUST (be or return) a value chosen by the device implementer identifying the specific internal radio/modem version used in the device, in human-readable format. If a device does not have any internal radio/modem it MUST return NULL. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9._-,]+$”.
getSerial() MUST (be or return) a hardware serial number, which MUST be available and unique across devices with the same MODEL and MANUFACTURER. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9._-,]+$”.

3.2.3. Intent Compatibility

3.2.3.1. Core Application Intents

Android intents allow application components to request functionality from other Android components. The Android upstream project includes a list of applications considered core Android applications, which implements several intent patterns to perform common actions.

3.2.3.2. Intent Resolution

Android also includes a mechanism for third-party apps to declare an authoritative default app linking behavior for certain types of web URI intents. When such authoritative declarations are defined in an app's intent filter patterns, device implementations:

3.2.3.3. Intent Namespaces
3.2.3.4. Broadcast Intents

Third-party applications rely on the platform to broadcast certain intents to notify them of changes in the hardware or software environment.

Device implementations:

3.2.3.5. Default App Settings

Android includes settings that provide users an easy way to select their default applications, for example for Home screen or SMS.

Where it makes sense, device implementations MUST provide a similar settings menu and be compatible with the intent filter pattern and API methods described in the SDK documentation as below.

If device implementations report android.software.home_screen, they:

If device implementations report android.hardware.telephony, they:

If device implementations report android.hardware.nfc.hce, they:

If device implementations support the VoiceInteractionService and have more than one application using this API installed at a time, they:

3.2.4. Activities on secondary displays

If device implementations allow launching normal Android Activities on secondary displays, they:

If device implementations allow launching normal Android Activities on secondary displays and primary and secondary displays have different android.util.DisplayMetrics:

If device implementations allow launching normal Android Activities on secondary displays and a secondary display has the android.view.Display.FLAG_PRIVATE flag:

3.3. Native API Compatibility

Native code compatibility is challenging. For this reason, device implementers are:

3.3.1. Application Binary Interfaces

Managed Dalvik bytecode can call into native code provided in the application .apk file as an ELF .so file compiled for the appropriate device hardware architecture. As native code is highly dependent on the underlying processor technology, Android defines a number of Application Binary Interfaces (ABIs) in the Android NDK.

Device implementations:

Note that future releases of Android may introduce support for additional ABIs.

3.3.2. 32-bit ARM Native Code Compatibility

If device implementations report the support of the armeabi ABI, they:

If device implementations report the support of the armeabi-v7a ABI, for apps using this ABI, they:

3.4. Web Compatibility

3.4.1. WebView Compatibility

If device implementations provide a complete implementation of the android.webkit.Webview API, they:

3.4.2. Browser Compatibility

If device implementations include a standalone Browser application for general web browsing, they:

However, If device implementations do not include a standalone Browser application, they:

3.5. API Behavioral Compatibility

Device implementations:

The behaviors of each of the API types (managed, soft, native, and web) must be consistent with the preferred implementation of the upstream Android Open Source Project. Some specific areas of compatibility are:

The above list is not comprehensive. The Compatibility Test Suite (CTS) tests significant portions of the platform for behavioral compatibility, but not all. It is the responsibility of the implementer to ensure behavioral compatibility with the Android Open Source Project. For this reason, device implementers SHOULD use the source code available via the Android Open Source Project where possible, rather than re-implement significant parts of the system.

3.5.1. Background Restriction

If device implementations implement the app restrictions that are included in AOSP or extend the app restrictions, they:

3.6. API Namespaces

Android follows the package and class namespace conventions defined by the Java programming language. To ensure compatibility with third-party applications, device implementers MUST NOT make any prohibited modifications (see below) to these package namespaces:

That is, they:

Device implementers MAY modify the underlying implementation of the APIs, but such modifications:

However, device implementers MAY add custom APIs outside the standard Android namespace, but the custom APIs:

If a device implementer proposes to improve one of the package namespaces above (such as by adding useful new functionality to an existing API, or adding a new API), the implementer SHOULD visit source.android.com and begin the process for contributing changes and code, according to the information on that site.

Note that the restrictions above correspond to standard conventions for naming APIs in the Java programming language; this section simply aims to reinforce those conventions and make them binding through inclusion in this Compatibility Definition.

3.7. Runtime Compatibility

Device implementations:

Note that memory values specified below are considered minimum values and device implementations MAY allocate more memory per application.

Screen Layout Screen Density Minimum Application Memory
Android Watch 120 dpi (ldpi) 32MB
160 dpi (mdpi)
213 dpi (tvdpi)
240 dpi (hdpi) 36MB
280 dpi (280dpi)
320 dpi (xhdpi) 48MB
360 dpi (360dpi)
400 dpi (400dpi) 56MB
420 dpi (420dpi) 64MB
480 dpi (xxhdpi) 88MB
560 dpi (560dpi) 112MB
640 dpi (xxxhdpi) 154MB
small/normal 120 dpi (ldpi) 32MB
160 dpi (mdpi)
213 dpi (tvdpi) 48MB
240 dpi (hdpi)
280 dpi (280dpi)
320 dpi (xhdpi) 80MB
360 dpi (360dpi)
400 dpi (400dpi) 96MB
420 dpi (420dpi) 112MB
480 dpi (xxhdpi) 128MB
560 dpi (560dpi) 192MB
640 dpi (xxxhdpi) 256MB
large 120 dpi (ldpi) 32MB
160 dpi (mdpi) 48MB
213 dpi (tvdpi) 80MB
240 dpi (hdpi)
280 dpi (280dpi) 96MB
320 dpi (xhdpi) 128MB
360 dpi (360dpi) 160MB
400 dpi (400dpi) 192MB
420 dpi (420dpi) 228MB
480 dpi (xxhdpi) 256MB
560 dpi (560dpi) 384MB
640 dpi (xxxhdpi) 512MB
xlarge 120 dpi (ldpi) 48MB
160 dpi (mdpi) 80MB
213 dpi (tvdpi) 96MB
240 dpi (hdpi)
280 dpi (280dpi) 144MB
320 dpi (xhdpi) 192MB
360 dpi (360dpi) 240MB
400 dpi (400dpi) 288MB
420 dpi (420dpi) 336MB
480 dpi (xxhdpi) 384MB
560 dpi (560dpi) 576MB
640 dpi (xxxhdpi) 768MB

3.8. User Interface Compatibility

3.8.1. Launcher (Home Screen)

Android includes a launcher application (home screen) and support for third-party applications to replace the device launcher (home screen).

If device implementations allow third-party applications to replace the device home screen, they:

If device implementations include a default launcher that supports in-app pinning of shortcuts, they:

Conversely, if device implementations do not support in-app pinning of shortcuts, they:

If device implementations implement a default launcher that provides quick access to the additional shortcuts provided by third-party apps through the ShortcutManager API, they:

If device implementations include a default launcher app that shows badges for the app icons, they:

3.8.2. Widgets

Android supports third-party app widgets by defining a component type and corresponding API and lifecycle that allows applications to expose an “AppWidget” to the end user.

If device implementations support third-party app widgets, they:

If device implementations support third-party app widgets and in-app pinning of shortcuts, they:

3.8.3. Notifications

Android includes Notification and NotificationManager APIs that allow third-party app developers to notify users of notable events and attract users' attention using the hardware components (e.g. sound, vibration and light) and software features (e.g. notification shade, system bar) of the device.

3.8.3.1. Presentation of Notifications

If device implementations allow third party apps to notify users of notable events, they:

If device implementations support rich notifications, they:

If device implementation support heads-up notifications: they:

3.8.3.2. Notification Listener Service

Android includes the NotificationListenerService APIs that allow apps (once explicitly enabled by the user) to receive a copy of all notifications as they are posted or updated.

If device implementations report the feature flag android.hardware.ram.normal, they:

If device implementations have a user affordance to snooze notifications, they:

3.8.3.3. DND (Do not Disturb)

If device implementations support the DND feature, they:

Android includes APIs that allow developers to incorporate search into their applications and expose their application’s data into the global system search. Generally speaking, this functionality consists of a single, system-wide user interface that allows users to enter queries, displays suggestions as users type, and displays results. The Android APIs allow developers to reuse this interface to provide search within their own apps and allow developers to supply results to the common global search user interface.

If device implementations implement the global search interface, they:

If no third-party applications are installed that make use of the global search:

Android also includes the Assist APIs to allow applications to elect how much information of the current context is shared with the assistant on the device.

If device implementations support the Assist action, they:

3.8.5. Alerts and Toasts

Applications can use the Toast API to display short non-modal strings to the end user that disappear after a brief period of time, and use the TYPE_APPLICATION_OVERLAY window type API to display alert windows as an overlay over other apps.

If device implementations include a screen or video output, they:

3.8.6. Themes

Android provides “themes” as a mechanism for applications to apply styles across an entire Activity or application.

Android includes a “Holo” and "Material" theme family as a set of defined styles for application developers to use if they want to match the Holo theme look and feel as defined by the Android SDK.

If device implementations include a screen or video output, they:

Android also includes a “Device Default” theme family as a set of defined styles for application developers to use if they want to match the look and feel of the device theme as defined by the device implementer.

Android supports a variant theme with translucent system bars, which allows application developers to fill the area behind the status and navigation bar with their app content. To enable a consistent developer experience in this configuration, it is important the status bar icon style is maintained across different device implementations.

If device implementations include a system status bar, they:

3.8.7. Live Wallpapers

Android defines a component type and corresponding API and lifecycle that allows applications to expose one or more “Live Wallpapers” to the end user. Live wallpapers are animations, patterns, or similar images with limited input capabilities that display as a wallpaper, behind other applications.

Hardware is considered capable of reliably running live wallpapers if it can run all live wallpapers, with no limitations on functionality, at a reasonable frame rate with no adverse effects on other applications. If limitations in the hardware cause wallpapers and/or applications to crash, malfunction, consume excessive CPU or battery power, or run at unacceptably low frame rates, the hardware is considered incapable of running live wallpaper. As an example, some live wallpapers may use an OpenGL 2.0 or 3.x context to render their content. Live wallpaper will not run reliably on hardware that does not support multiple OpenGL contexts because the live wallpaper use of an OpenGL context may conflict with other applications that also use an OpenGL context.

If device implementations implement live wallpapers, they:

3.8.8. Activity Switching

The upstream Android source code includes the overview screen, a system-level user interface for task switching and displaying recently accessed activities and tasks using a thumbnail image of the application’s graphical state at the moment the user last left the application.

Device implementations including the recents function navigation key as detailed in section 7.2.3 MAY alter the interface.

If device implementations including the recents function navigation key as detailed in section 7.2.3 alter the interface, they:

3.8.9. Input Management

Android includes support for Input Management and support for third-party input method editors.

If device implementations allow users to use third-party input methods on the device, they:

If device implementations declare the android.software.autofill feature flag, they:

3.8.10. Lock Screen Media Control

The Remote Control Client API is deprecated from Android 5.0 in favor of the Media Notification Template that allows media applications to integrate with playback controls that are displayed on the lock screen.

3.8.11. Screen savers (previously Dreams)

Android includes support for interactivescreensavers, previously referred to as Dreams. Screen savers allow users to interact with applications when a device connected to a power source is idle or docked in a desk dock. Android Watch devices MAY implement screen savers, but other types of device implementations SHOULD include support for screen savers and provide a settings option for users to configure screen savers in response to the android.settings.DREAM_SETTINGS intent.

3.8.12. Location

If device implementations include a hardware sensor (e.g. GPS) that is capable of providing the location coordinates, they

3.8.13. Unicode and Font

Android includes support for the emoji characters defined in Unicode 10.0.

If device implementations include a screen or video output, they:

If device implementations include an IME, they:

3.8.14. Multi-windows

If device implementations have the capability to display multiple activities at the same time, they:

If device implementations support multi-window mode(s), and the split screen mode, they:

If device implementations support multi-window mode(s) and Picture-in-Picture multi-window mode, they:

3.8.15. Display Cutout

Android supports a Display Cutout as described in the SDK document. The DisplayCutout API defines an area on the edge of the display that is not functional for displaying content.

If device implementations include display cutout(s), they:

3.9. Device Administration

Android includes features that allow security-aware applications to perform device administration functions at the system level, such as enforcing password policies or performing remote wipe, through the Android Device Administration API.

If device implementations implement the full range of device administration policies defined in the Android SDK documentation, they:

3.9.1 Device Provisioning

3.9.1.1 Device owner provisioning

If device implementations declare android.software.device_admin, they:

If device implementations declare android.software.device_admin, but also include a proprietary Device Owner management solution and provide a mechanism to promote an application configured in their solution as a "Device Owner equivalent" to the standard "Device Owner" as recognized by the standard Android DevicePolicyManager APIs, they:

3.9.1.2 Managed profile provisioning

If device implementations declare android.software.managed_users, they:

3.9.2 Managed Profile Support

If device implementations declare android.software.managed_users, they:

3.9.3 Managed User Support

If device implementations declare android.software.managed_users, they:

3.10. Accessibility

Android provides an accessibility layer that helps users with disabilities to navigate their devices more easily. In addition, Android provides platform APIs that enable accessibility service implementations to receive callbacks for user and system events and generate alternate feedback mechanisms, such as text-to-speech, haptic feedback, and trackball/d-pad navigation.

If device implementations support third-party accessibility services, they:

If device implementations include preloaded accessibility services, they:

3.11. Text-to-Speech

Android includes APIs that allow applications to make use of text-to-speech (TTS) services and allows service providers to provide implementations of TTS services.

If device implementations reporting the feature android.hardware.audio.output, they:

If device implementations support installation of third-party TTS engines, they:

3.12. TV Input Framework

The Android Television Input Framework (TIF) simplifies the delivery of live content to Android Television devices. TIF provides a standard API to create input modules that control Android Television devices.

If device implementations support TIF, they:

3.13. Quick Settings

Android provides a Quick Settings UI component that allows quick access to frequently used or urgently needed actions.

If device implementations include a Quick Settings UI component, they:

3.14. Media UI

If device implementations include the UI framework that supports third-party apps that depend on MediaBrowser and MediaSession , they:

3.15. Instant Apps

Device implementations MUST satisfy the following requirements:

3.16. Companion Device Pairing

Android includes support for companion device pairing to more effectively manage association with companion devices and provides the CompanionDeviceManager API for apps to access this feature.

If device implementations support the companion device pairing feature, they:

3.17. Heavyweight Apps

If device implementations declare the feature FEATURE_CANT_SAVE_STATE, then they:

If device implementations don't declare the feature FEATURE_CANT_SAVE_STATE, then they:

4. Application Packaging Compatibility

Devices implementations:

Device implementations:

5. Multimedia Compatibility

Device implementations:

Device implementations:

All of the codecs listed in the section below are provided as software implementations in the preferred Android implementation from the Android Open Source Project.

Please note that neither Google nor the Open Handset Alliance make any representation that these codecs are free from third-party patents. Those intending to use this source code in hardware or software products are advised that implementations of this code, including in open source software or shareware, may require patent licenses from the relevant patent holders.

5.1. Media Codecs

5.1.1. Audio Encoding

See more details in 5.1.3. Audio Codecs Details.

If device implementations declare android.hardware.microphone, they MUST support the following audio encoding:

5.1.2. Audio Decoding

See more details in 5.1.3. Audio Codecs Details.

If device implementations declare support for the android.hardware.audio.output feature, they must support decoding the following audio formats:

If device implementations support the decoding of AAC input buffers of multichannel streams (i.e. more than two channels) to PCM through the default AAC audio decoder in the android.media.MediaCodec API, the following MUST be supported:

When decoding USAC audio, MPEG-D (ISO/IEC 23003-4):

MPEG-4 AAC, HE AAC, and HE AACv2 profile decoders:

If ISO/IEC 23003-4 is supported and if both ISO/IEC 23003-4 and ISO/IEC 14496-3 metadata are present in a decoded bitstream, then:

5.1.3. Audio Codecs Details

Format/Codec Details Supported File Types/Container Formats
MPEG-4 AAC Profile
(AAC LC)
Support for mono/stereo/5.0/5.1 content with standard sampling rates from 8 to 48 kHz.
  • 3GPP (.3gp)
  • MPEG-4 (.mp4, .m4a)
  • ADTS raw AAC (.aac, ADIF not supported)
  • MPEG-TS (.ts, not seekable)
MPEG-4 HE AAC Profile (AAC+) Support for mono/stereo/5.0/5.1 content with standard sampling rates from 16 to 48 kHz.
MPEG-4 HE AACv2
Profile (enhanced AAC+)
Support for mono/stereo/5.0/5.1 content with standard sampling rates from 16 to 48 kHz.
AAC ELD (enhanced low delay AAC) Support for mono/stereo content with standard sampling rates from 16 to 48 kHz.
USAC Support for mono/stereo content with standard sampling rates from 7.35 to 48 kHz.
  • MPEG-4 (.mp4, .m4a)
  • LATM/LOAS (.loas, .xhe)
AMR-NB 4.75 to 12.2 kbps sampled @ 8 kHz 3GPP (.3gp)
AMR-WB 9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16 kHz
FLAC Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1 kHz is RECOMMENDED on devices with 44.1 kHz output, as the 48 to 44.1 kHz downsampler does not include a low-pass filter). 16-bit RECOMMENDED; no dither applied for 24-bit. FLAC (.flac) only
MP3 Mono/Stereo 8-320Kbps constant (CBR) or variable bitrate (VBR) MP3 (.mp3)
MIDI MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for ringtone formats RTTTL/RTX, OTA, and iMelody
  • Type 0 and 1 (.mid, .xmf, .mxmf)
  • RTTTL/RTX (.rtttl, .rtx)
  • OTA (.ota)
  • iMelody (.imy)
Vorbis
  • Ogg (.ogg)
  • Matroska (.mkv, Android 4.0+)
PCM/WAVE 16-bit linear PCM (rates up to limit of hardware). Devices MUST support sampling rates for raw PCM recording at 8000, 11025, 16000, and 44100 Hz frequencies. WAVE (.wav)
Opus Matroska (.mkv), Ogg(.ogg)

5.1.4. Image Encoding

See more details in 5.1.6. Image Codecs Details.

Device implementations MUST support encoding the following image encoding:

5.1.5. Image Decoding

See more details in 5.1.6. Image Codecs Details.

Device implementations MUST support decoding the following image encoding:

5.1.6. Image Codecs Details

Format/Codec Details Supported File Types/Container Formats
JPEG Base+progressive JPEG (.jpg)
GIF GIF (.gif)
PNG PNG (.png)
BMP BMP (.bmp)
WebP WebP (.webp)
Raw ARW (.arw), CR2 (.cr2), DNG (.dng), NEF (.nef), NRW (.nrw), ORF (.orf), PEF (.pef), RAF (.raf), RW2 (.rw2), SRW (.srw)
HEIF Image, Image collection, Image sequence HEIF (.heif), HEIC (.heic)

5.1.7. Video Codecs

If device implementations include a video decoder or encoder:

If device implementations advertise HDR profile support through Display.HdrCapabilities, they:

If device implementations advertise intra refresh support through FEATURE_IntraRefresh in the MediaCodecInfo.CodecCapabilities class, they:

5.1.8. Video Codecs List

Format/Codec Details Supported File Types/
Container Formats
H.263
  • 3GPP (.3gp)
  • MPEG-4 (.mp4)
H.264 AVC See section 5.2 and 5.3 for details
  • 3GPP (.3gp)
  • MPEG-4 (.mp4)
  • MPEG-2 TS (.ts, AAC audio only, not seekable, Android 3.0+)
H.265 HEVC See section 5.3 for details MPEG-4 (.mp4)
MPEG-2 Main Profile MPEG2-TS
MPEG-4 SP 3GPP (.3gp)
VP8 See section 5.2 and 5.3 for details
VP9 See section 5.3 for details

5.2. Video Encoding

If device implementations support any video encoder and make it available to third-party apps, they:

If device implementations include an embedded screen display with the diagonal length of at least 2.5 inches or include a video output port or declare the support of a camera via the android.hardware.camera.any feature flag, they:

If device implementations support any of the H.264, VP8, VP9 or HEVC video encoders and make it available to third-party applications, they:

If device implementations support the MPEG-4 SP video encoder and make it available to third-party apps, they:

5.2.1. H.263

If device implementations support H.263 encoders and make it available to third-party apps, they:

5.2.2. H-264

If device implementations support H.264 codec, they:

If device implementations report support of H.264 encoding for 720p or 1080p resolution videos through the media APIs, they:

SD (Low quality) SD (High quality) HD 720p HD 1080p
Video resolution 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
Video frame rate 20 fps 30 fps 30 fps 30 fps
Video bitrate 384 Kbps 2 Mbps 4 Mbps 10 Mbps

5.2.3. VP8

If device implementations support VP8 codec, they:

If device implementations report support of VP8 encoding for 720p or 1080p resolution videos through the media APIs, they:

SD (Low quality) SD (High quality) HD 720p HD 1080p
Video resolution 320 x 180 px 640 x 360 px 1280 x 720 px 1920 x 1080 px
Video frame rate 30 fps 30 fps 30 fps 30 fps
Video bitrate 800 Kbps 2 Mbps 4 Mbps 10 Mbps

5.2.4. VP9

If device implementations support VP9 codec, they:

5.3. Video Decoding

If device implementations support VP8, VP9, H.264, or H.265 codecs, they:

If device implementations declare support for the Dolby Vision decoder through HDR_TYPE_DOLBY_VISION , they:

5.3.1. MPEG-2

If device implementations support MPEG-2 decoders, they:

5.3.2. H.263

If device implementations support H.263 decoders, they:

5.3.3. MPEG-4

If device implementations with MPEG-4 decoders, they:

5.3.4. H.264

If device implementations support H.264 decoders, they:

If the height that is reported by the Display.getSupportedModes() method is equal or greater than the video resolution, device implementations:

SD (Low quality) SD (High quality) HD 720p HD 1080p
Video resolution 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
Video frame rate 30 fps 30 fps 60 fps 30 fps (60 fpsTelevision)
Video bitrate 800 Kbps 2 Mbps 8 Mbps 20 Mbps

5.3.5. H.265 (HEVC)

If device implementations support H.265 codec, they:

If the height that is reported by the Display.getSupportedModes() method is equal to or greater than the video resolution, then:

SD (Low quality) SD (High quality) HD 720p HD 1080p UHD
Video resolution 352 x 288 px 720 x 480 px 1280 x 720 px 1920 x 1080 px 3840 x 2160 px
Video frame rate 30 fps 30 fps 30 fps 30/60 fps (60 fpsTelevision with H.265 hardware decoding) 60 fps
Video bitrate 600 Kbps 1.6 Mbps 4 Mbps 5 Mbps 20 Mbps

5.3.6. VP8

If device implementations support VP8 codec, they:

If the height as reported by the Display.getSupportedModes() method is equal or greater than the video resolution, then:

SD (Low quality) SD (High quality) HD 720p HD 1080p
Video resolution 320 x 180 px 640 x 360 px 1280 x 720 px 1920 x 1080 px
Video frame rate 30 fps 30 fps 30 fps (60 fpsTelevision) 30 (60 fpsTelevision)
Video bitrate 800 Kbps 2 Mbps 8 Mbps 20 Mbps

5.3.7. VP9

If device implementations support VP9 codec, they:

If device implementations support VP9 codec and a hardware decoder:

If the height that is reported by the Display.getSupportedModes() method is equal to or greater than the video resolution, then:

SD (Low quality) SD (High quality) HD 720p HD 1080p UHD
Video resolution 320 x 180 px 640 x 360 px 1280 x 720 px 1920 x 1080 px 3840 x 2160 px
Video frame rate 30 fps 30 fps 30 fps 30 fps (60 fpsTelevision with VP9 hardware decoding) 60 fps
Video bitrate 600 Kbps 1.6 Mbps 4 Mbps 5 Mbps 20 Mbps

5.4. Audio Recording

While some of the requirements outlined in this section are listed as SHOULD since Android 4.3, the Compatibility Definition for future versions are planned to change these to MUST. Existing and new Android devices are STRONGLY RECOMMENDED to meet these requirements that are listed as SHOULD, or they will not be able to attain Android compatibility when upgraded to the future version.

5.4.1. Raw Audio Capture

If device implementations declare android.hardware.microphone, they:

If device implementations allow AM radio and DVD quality capture of raw audio content, they:

5.4.2. Capture for Voice Recognition

If device implementations declare android.hardware.microphone, they:

If device implementations declare android.hardware.microphone and noise suppression (reduction) technologies tuned for speech recognition, they:

5.4.3. Capture for Rerouting of Playback

The android.media.MediaRecorder.AudioSource class includes the REMOTE_SUBMIX audio source.

If device implementations declare both android.hardware.audio.output and android.hardware.microphone, they:

5.5. Audio Playback

Android includes the support to allow apps to playback audio through the audio output peripheral as defined in section 7.8.2.

5.5.1. Raw Audio Playback

If device implementations declare android.hardware.audio.output, they:

5.5.2. Audio Effects

Android provides an API for audio effects for device implementations.

If device implementations declare the feature android.hardware.audio.output, they:

5.5.3. Audio Output Volume

Automotive device implementations:

5.6. Audio Latency

Audio latency is the time delay as an audio signal passes through a system. Many classes of applications rely on short latencies, to achieve real-time sound effects.

For the purposes of this section, use the following definitions:

If device implementations declare android.hardware.audio.output they are STRONGLY RECOMMENDED to meet or exceed the following requirements:

If device implementations meet the above requirements, after any initial calibration, when using both the OpenSL ES PCM buffer queue and AAudio native audio APIs, for continuous output latency and cold output latency over at least one supported audio output device, they are:

If device implementations do not meet the requirements for low-latency audio via both the OpenSL ES PCM buffer queue and AAudio native audio APIs, they:

If device implementations include android.hardware.microphone, they are STRONGLY RECOMMENDED to meet these input audio requirements:

5.7. Network Protocols

Device implementations MUST support the media network protocols for audio and video playback as specified in the Android SDK documentation.

If device implementations include an audio or a video decoder, they:

Media Segment Formats

Segment formats Reference(s) Required codec support
MPEG-2 Transport Stream ISO 13818 Video codecs:
  • H264 AVC
  • MPEG-4 SP
  • MPEG-2
See section 5.1.3 for details on H264 AVC, MPEG2-4 SP,
and MPEG-2.

Audio codecs:

  • AAC
See section 5.1.1 for details on AAC and its variants.
AAC with ADTS framing and ID3 tags ISO 13818-7 See section 5.1.1 for details on AAC and its variants
WebVTT WebVTT

RTSP (RTP, SDP)

Profile name Reference(s) Required codec support
H264 AVC RFC 6184 See section 5.1.3 for details on H264 AVC
MP4A-LATM RFC 6416 See section 5.1.1 for details on AAC and its variants
H263-1998 RFC 3551
RFC 4629
RFC 2190
See section 5.1.3 for details on H263
H263-2000 RFC 4629 See section 5.1.3 for details on H263
AMR RFC 4867 See section 5.1.1 for details on AMR-NB
AMR-WB RFC 4867 See section 5.1.1 for details on AMR-WB
MP4V-ES RFC 6416 See section 5.1.3 for details on MPEG-4 SP
mpeg4-generic RFC 3640 See section 5.1.1 for details on AAC and its variants
MP2T RFC 2250 See MPEG-2 Transport Stream underneath HTTP Live Streaming for details

5.8. Secure Media

If device implementations support secure video output and are capable of supporting secure surfaces, they:

If device implementations declare support for Display.FLAG_SECURE and support wireless display protocol, they:

If device implementations declare support for Display.FLAG_SECURE and support wired external display, they:

5.9. Musical Instrument Digital Interface (MIDI)

If device implementations report support for feature android.software.midi via the android.content.pm.PackageManager class, they:

5.10. Professional Audio

If device implementations report support for feature android.hardware.audio.pro via the android.content.pm.PackageManager class, they:

If device implementations meet all of the above requirements, they:

If device implementations include a 4 conductor 3.5mm audio jack, they:

If device implementations omit a 4 conductor 3.5mm audio jack and include a USB port(s) supporting USB host mode, they:

If device implementations include an HDMI port, they:

5.11. Capture for Unprocessed

Android includes support for recording of unprocessed audio via the android.media.MediaRecorder.AudioSource.UNPROCESSED audio source. In OpenSL ES, it can be accessed with the record preset SL_ANDROID_RECORDING_PRESET_UNPROCESSED.

If device implementations intent to support unprocessed audio source and make it available to third-party apps, they:

All SPL measurements are made directly next to the microphone under test. For multiple microphone configurations, these requirements apply to each microphone.

If device implementations declare android.hardware.microphone but do not support unprocessed audio source, they:

6. Developer Tools and Options Compatibility

6.1. Developer Tools

Device implementations:

If device implementations report the support of Vulkan 1.0 or higher via the android.hardware.vulkan.version feature flags, they:

6.2. Developer Options

Android includes support for developers to configure application development-related settings.

Device implementations MUST provide a consistent experience for Developer Options, they:

7. Hardware Compatibility

If a device includes a particular hardware component that has a corresponding API for third-party developers:

If an API in the SDK interacts with a hardware component that is stated to be optional and the device implementation does not possess that component:

A typical example of a scenario where these requirements apply is the telephony API: Even on non-phone devices, these APIs must be implemented as reasonable no-ops.

7.1. Display and Graphics

Android includes facilities that automatically adjust application assets and UI layouts appropriately for the device to ensure that third-party applications run well on a variety of hardware configurations. Devices MUST properly implement these APIs and behaviors, as detailed in this section.

The units referenced by the requirements in this section are defined as follows:

7.1.1. Screen Configuration

7.1.1.1. Screen Size and Shape

The Android UI framework supports a variety of different logical screen layout sizes, and allows applications to query the current configuration's screen layout size via Configuration.screenLayout with the SCREENLAYOUT_SIZE_MASK and Configuration.smallestScreenWidthDp.

Device implementations:

If device implementations support UI_MODE_TYPE_NORMAL and include a display with rounded corners, they:

7.1.1.2. Screen Aspect Ratio

While there is no restriction to the screen aspect ratio value of the physical screen display, the screen aspect ratio of the logical display that third-party apps are rendered within, as can be derived from the height and width values reported through the view.Display APIs and Configuration API, MUST meet the following requirements:

7.1.1.3. Screen Density

The Android UI framework defines a set of standard logical densities to help application developers target application resources.

If there is an affordance to change the display size of the device:

7.1.2. Display Metrics

If device implementations include a screen or video output, they:

If device implementations does not include an embedded screen or video output, they:

7.1.3. Screen Orientation

Device implementations:

If device implementations support both screen orientations, they:

7.1.4. 2D and 3D Graphics Acceleration

7.1.4.1 OpenGL ES

Device implementations:

If device implementations include a screen or video output, they:

If device implementations support any of the OpenGL ES versions, they:

If device implementations declare support for OpenGL ES 3.0, 3.1, or 3.2, they:

If device implementations support OpenGL ES 3.2, they:

If device implementations support the OpenGL ES Android Extension Pack in its entirety, they:

If device implementations expose support for the EGL_KHR_mutable_render_buffer extension, they:

7.1.4.2 Vulkan

Android includes support for Vulkan , a low-overhead, cross-platform API for high-performance 3D graphics.

If device implementations support OpenGL ES 3.1, they:

If device implementations include a screen or video output, they:

If device implementations include support for Vulkan 1.0, they:

If device implementations do not include support for Vulkan 1.0, they:

If device implementations include support for Vulkan 1.1, they:

7.1.4.3 RenderScript
7.1.4.4 2D Graphics Acceleration

Android includes a mechanism for applications to declare that they want to enable hardware acceleration for 2D graphics at the Application, Activity, Window, or View level through the use of a manifest tag android:hardwareAccelerated or direct API calls.

Device implementations:

Android includes a TextureView object that lets developers directly integrate hardware-accelerated OpenGL ES textures as rendering targets in a UI hierarchy.

Device implementations:

7.1.4.5 Wide-gamut Displays

If device implementations claim support for wide-gamut displays through Configuration.isScreenWideColorGamut() , they:

Conversely, if device implementations do not support wide-gamut displays, they:

7.1.5. Legacy Application Compatibility Mode

Android specifies a “compatibility mode” in which the framework operates in a 'normal' screen size equivalent (320dp width) mode for the benefit of legacy applications not developed for old versions of Android that pre-date screen-size independence.

7.1.6. Screen Technology

The Android platform includes APIs that allow applications to render rich graphics to the display. Devices MUST support all of these APIs as defined by the Android SDK unless specifically allowed in this document.

Device implementations:

7.1.7. Secondary Displays

Android includes support for secondary display to enable media sharing capabilities and developer APIs for accessing external displays.

If device implementations support an external display either via a wired, wireless, or an embedded additional display connection, they:

7.2. Input Devices

Device implementations:

7.2.1. Keyboard

If device implementations include support for third-party Input Method Editor (IME) applications, they:

Device implementations: [C-0-1] MUST NOT include a hardware keyboard that does not match one of the formats specified in android.content.res.Configuration.keyboard (QWERTY or 12-key). SHOULD include additional soft keyboard implementations. * MAY include a hardware keyboard.

7.2.2. Non-touch Navigation

Android includes support for d-pad, trackball, and wheel as mechanisms for non-touch navigation.

Device implementations:

If device implementations lack non-touch navigations, they:

7.2.3. Navigation Keys

The Home, Recents, and Back functions typically provided via an interaction with a dedicated physical button or a distinct portion of the touch screen, are essential to the Android navigation paradigm and therefore, device implementations:

If the Home, Recents, or Back functions are provided, they:

Device implementations:

If device implementations provide the Menu function, they:

If device implementations do not provide the Menu function, for backwards compatibility, they: * [C-3-1] MUST make the Menu function available to applications when targetSdkVersion is less than 10, either by a physical button, a software key, or gestures. This Menu function should be accessible unless hidden together with other navigation functions.

If device implementations provide the Assist function, they: [C-4-1] MUST make the Assist function accessible with a single action (e.g. tap, double-click or gesture) when other navigation keys are accessible. [SR] STRONGLY RECOMMENDED to use long press on HOME function as this designated interaction.

If device implementations use a distinct portion of the screen to display the navigation keys, they:

7.2.4. Touchscreen Input

Android includes support for a variety of pointer input systems, such as touchscreens, touch pads, and fake touch input devices. Touchscreen-based device implementations are associated with a display such that the user has the impression of directly manipulating items on screen. Since the user is directly touching the screen, the system does not require any additional affordances to indicate the objects being manipulated.

Device implementations:

If device implementations include a touchscreen (single-touch or better), they:

If device implementations include a touchscreen that can track more than a single touch, they:

If device implementations do not include a touchscreen (and rely on a pointer device only) and meet the fake touch requirements in section 7.2.5, they:

7.2.5. Fake Touch Input

Fake touch interface provides a user input system that approximates a subset of touchscreen capabilities. For example, a mouse or remote control that drives an on-screen cursor approximates touch, but requires the user to first point or focus then click. Numerous input devices like the mouse, trackpad, gyro-based air mouse, gyro-pointer, joystick, and multi-touch trackpad can support fake touch interactions. Android includes the feature constant android.hardware.faketouch, which corresponds to a high-fidelity non-touch (pointer-based) input device such as a mouse or trackpad that can adequately emulate touch-based input (including basic gesture support), and indicates that the device supports an emulated subset of touchscreen functionality.

If device implementations do not include a touchscreen but include another pointer input system which they want to make available, they:

If device implementations declare support for android.hardware.faketouch, they:

If device implementations declare support for android.hardware.faketouch.multitouch.distinct, they:

If device implementations declare support for android.hardware.faketouch.multitouch.jazzhand, they:

7.2.6. Game Controller Support

7.2.6.1. Button Mappings

If device implementations declare the android.hardware.gamepad feature flag, they:

Button HID Usage2 Android Button
A1 0x09 0x0001 KEYCODE_BUTTON_A (96)
B1 0x09 0x0002 KEYCODE_BUTTON_B (97)
X1 0x09 0x0004 KEYCODE_BUTTON_X (99)
Y1 0x09 0x0005 KEYCODE_BUTTON_Y (100)
D-pad up1
D-pad down1
0x01 0x00393 AXIS_HAT_Y4
D-pad left1
D-pad right1
0x01 0x00393 AXIS_HAT_X4
Left shoulder button1 0x09 0x0007 KEYCODE_BUTTON_L1 (102)
Right shoulder button1 0x09 0x0008 KEYCODE_BUTTON_R1 (103)
Left stick click1 0x09 0x000E KEYCODE_BUTTON_THUMBL (106)
Right stick click1 0x09 0x000F KEYCODE_BUTTON_THUMBR (107)
Home1 0x0c 0x0223 KEYCODE_HOME (3)
Back1 0x0c 0x0224 KEYCODE_BACK (4)

1 KeyEvent

2 The above HID usages must be declared within a Game pad CA (0x01 0x0005).

3 This usage must have a Logical Minimum of 0, a Logical Maximum of 7, a Physical Minimum of 0, a Physical Maximum of 315, Units in Degrees, and a Report Size of 4. The logical value is defined to be the clockwise rotation away from the vertical axis; for example, a logical value of 0 represents no rotation and the up button being pressed, while a logical value of 1 represents a rotation of 45 degrees and both the up and left keys being pressed.

4 MotionEvent

Analog Controls1 HID Usage Android Button
Left Trigger 0x02 0x00C5 AXIS_LTRIGGER
Right Trigger 0x02 0x00C4 AXIS_RTRIGGER
Left Joystick 0x01 0x0030
0x01 0x0031
AXIS_X
AXIS_Y
Right Joystick 0x01 0x0032
0x01 0x0035
AXIS_Z
AXIS_RZ

1 MotionEvent

7.2.7. Remote Control

See Section 2.3.1 for device-specific requirements.

7.3. Sensors

If device implementations include a particular sensor type that has a corresponding API for third-party developers, the device implementation MUST implement that API as described in the Android SDK documentation and the Android Open Source documentation on sensors.

Device implementations:

If device implementations include a particular sensor type that has a corresponding API for third-party developers, they:

The list above is not comprehensive; the documented behavior of the Android SDK and the Android Open Source Documentations on sensors is to be considered authoritative.

Some sensor types are composite, meaning they can be derived from data provided by one or more other sensors. (Examples include the orientation sensor and the linear acceleration sensor.)

Device implementations:

If device implementations include a composite sensor, they:

7.3.1. Accelerometer

If device implementations include a 3-axis accelerometer, they:

If device implementations include a 3-axis accelerometer and any of the TYPE_SIGNIFICANT_MOTION, TYPE_TILT_DETECTOR, TYPE_STEP_DETECTOR, TYPE_STEP_COUNTER composite sensors are implemented:

If device implementations include a 3-axis accelerometer and a gyroscope sensor, they:

If device implementations include a 3-axis accelerometer, a gyroscope sensor and a magnetometer sensor, they:

7.3.2. Magnetometer

If device implementations include a 3-axis magnetometer, they:

If device implementations include a 3-axis magnetometer, an accelerometer sensor and a gyroscope sensor, they:

If device implementations include a 3-axis magnetometer, an accelerometer, they:

If device implementations include a 3-axis magnetometer, an accelerometer and TYPE_GEOMAGNETIC_ROTATION_VECTOR sensor, they:

7.3.3. GPS

Device implementations:

If device implementations include a GPS/GNSS receiver and report the capability to applications through the android.hardware.location.gps feature flag, they:

If device implementations include a GPS/GNSS receiver and report the capability to applications through the android.hardware.location.gps feature flag and the LocationManager.getGnssYearOfHardware() Test API reports the year "2016" or newer, they:

If device implementations include a GPS/GNSS receiver and report the capability to applications through the android.hardware.location.gps feature flag and the LocationManager.getGnssYearOfHardware() Test API reports the year "2017" or newer, they:

If device implementations include a GPS/GNSS receiver and report the capability to applications through the android.hardware.location.gps feature flag and the LocationManager.getGnssYearOfHardware() Test API reports the year "2018" or newer, they:

7.3.4. Gyroscope

Device implementations:

If device implementations include a gyroscope, they:

If device implementations include a gyroscope, an accelerometer sensor and a magnetometer sensor, they:

If device implementations include a gyroscope and an accelerometer sensor, they:

7.3.5. Barometer

If device implementations include a barometer, they:

7.3.6. Thermometer

Device implementations: MAY include an ambient thermometer (temperature sensor). MAY but SHOULD NOT include a CPU temperature sensor.

If device implementations include an ambient thermometer (temperature sensor), they:

Note the SENSOR_TYPE_TEMPERATURE sensor type was deprecated in Android 4.0.

7.3.7. Photometer

7.3.8. Proximity Sensor

If device implementations include a proximity sensor, they:

7.3.9. High Fidelity Sensors

If device implementations include a set of higher quality sensors as defined in this section, and make available them to third-party apps, they:

If device implementations declare android.hardware.sensor.hifi_sensors, they:

Note that all power consumption requirements in this section do not include the power consumption of the Application Processor. It is inclusive of the power drawn by the entire sensor chain—the sensor, any supporting circuitry, any dedicated sensor processing system, etc.

If device implementations include direct sensor support, they:

7.3.10. Biometric Sensors

7.3.10.1. Fingerprint Sensors

If device implementations include a secure lock screen, they:

If device implementations include a fingerprint sensor and make the sensor available to third-party apps, they:

7.3.10.2. Other Biometric Sensors

If device implementations include one or more non-fingerprint-based-biometric sensors and make them available to third-party apps they:

7.3.11. Android Automotive-only sensors

Automotive-specific sensors are defined in the android.car.CarSensorManager API.

7.3.11.1. Current Gear

See Section 2.5.1 for device-specific requirements.

7.3.11.2. Day Night Mode

See Section 2.5.1 for device-specific requirements.

7.3.11.3. Driving Status

This requirement is deprecated.

7.3.11.4. Wheel Speed

See Section 2.5.1 for device-specific requirements.

7.3.11.5. Parking Brake

See Section 2.5.1 for device-specific requirements.

7.3.12. Pose Sensor

Device implementations:

If device implementations support pose sensor with 6 degrees of freedom, they:

7.4. Data Connectivity

7.4.1. Telephony

“Telephony” as used by the Android APIs and this document refers specifically to hardware related to placing voice calls and sending SMS messages via a GSM or CDMA network. While these voice calls may or may not be packet-switched, they are for the purposes of Android considered independent of any data connectivity that may be implemented using the same network. In other words, the Android “telephony” functionality and APIs refer specifically to voice calls and SMS. For instance, device implementations that cannot place calls or send/receive SMS messages are not considered a telephony device, regardless of whether they use a cellular network for data connectivity.

If device implementations include GSM or CDMA telephony, they:

If device implementations do not include telephony hardware, they:

7.4.1.1. Number Blocking Compatibility

If device implementations report the android.hardware.telephony feature, they:

7.4.1.2. Telecom API

If device implementations report android.hardware.telephony, they:

7.4.2. IEEE 802.11 (Wi-Fi)

Device implementations:

If device implementations include support for 802.11 and expose the functionality to a third-party application, they:

If device implementations support Wi-Fi and use Wi-Fi for location scanning, they:

7.4.2.1. Wi-Fi Direct

Device implementations:

If device implementations include support for Wi-Fi Direct, they:

Device implementations:

If device implementations include support for TDLS and TDLS is enabled by the WiFiManager API, they:

7.4.2.3. Wi-Fi Aware

Device implementations:

If device implementations include support for Wi-Fi Aware and expose the functionality to third-party apps, then they:

If device implementations include support for Wi-Fi Aware and Wi-Fi Location as described in Section 7.4.2.5 and exposes these functionalities to third-party apps, then they:

7.4.2.4. Wi-Fi Passpoint

Device implementations:

If device implementations include support for Wi-Fi Passpoint, they:

Conversely if device implementations do not include support for Wi-Fi Passpoint:

7.4.2.5. Wi-Fi Location (Wi-Fi Round Trip Time - RTT)

Device implementations:

If device implementations include support for Wi-Fi Location and expose the functionality to third-party apps, then they:

7.4.3. Bluetooth

If device implementations support Bluetooth Audio profile, they:

If device implementations support HFP, A2DP and AVRCP, they:

If device implementations declare android.hardware.vr.high_performance feature, they:

Android includes support for Bluetooth and Bluetooth Low Energy.

If device implementations include support for Bluetooth and Bluetooth Low Energy, they:

If device implementations include support for Bluetooth Low Energy, they:

If device implementations support Bluetooth LE and use Bluetooth LE for location scanning, they:

7.4.4. Near-Field Communications

Device implementations:

If device implementations include NFC hardware and plan to make it available to third-party apps, they:

Note that publicly available links are not available for the JIS, ISO, and NFC Forum specifications cited above.

Android includes support for NFC Host Card Emulation (HCE) mode.

If device implementations include an NFC controller chipset capable of HCE (for NfcA and/or NfcB) and support Application ID (AID) routing, they:

If device implementations include an NFC controller chipset capable of HCE for NfcF, and implement the feature for third-party applications, they:

If device implementations include general NFC support as described in this section and support MIFARE technologies (MIFARE Classic, MIFARE Ultralight, NDEF on MIFARE Classic) in the reader/writer role, they:

7.4.5. Minimum Network Capability

Device implementations:

The required level of IPv6 support depends on the network type, as shown in the following requirements.

If device implementations support Wi-Fi, they:

If device implementations support Ethernet, they:

If device implementations support Cellular data, they:

If device implementations support more than one network type (e.g., Wi-Fi and cellular data), they:

7.4.6. Sync Settings

Device implementations:

7.4.7. Data Saver

If device implementations include a metered connection, they are:

If device implementations provide the data saver mode, they:

If device implementations do not provide the data saver mode, they:

7.4.8. Secure Elements

If device implementations support Open Mobile API capable secure elements and make them available to 3rd-party apps, they:

7.5. Cameras

If device implementations include at least one camera, they:

7.5.1. Rear-Facing Camera

A rear-facing camera is a camera located on the side of the device opposite the display; that is, it images scenes on the far side of the device, like a traditional camera.

Device implementations:

If device implementations include at least one rear-facing camera, they:

If the camera includes a flash:

7.5.2. Front-Facing Camera

A front-facing camera is a camera located on the same side of the device as the display; that is, a camera typically used to image the user, such as for video conferencing and similar applications.

Device implementations:

If device implementations include at least one front-facing camera, they:

If device implementations are capable of being rotated by user (such as automatically via an accelerometer or manually via user input):

7.5.3. External Camera

Device implementations:

If device implementations include support for an external camera, they:

If camera-based video encoding is supported:

7.5.4. Camera API Behavior

Android includes two API packages to access the camera, the newer android.hardware.camera2 API expose lower-level camera control to the app, including efficient zero-copy burst/streaming flows and per-frame controls of exposure, gain, white balance gains, color conversion, denoising, sharpening, and more.

The older API package,android.hardware.Camera, is marked as deprecated in Android 5.0 but as it should still be available for apps to use. Android device implementations MUST ensure the continued support of the API as described in this section and in the Android SDK.

All features that are common between the deprecated android.hardware.Camera class and the newer android.hardware.camera2 package MUST have equivalent performance and quality in both APIs. For example, with equivalent settings, autofocus speed and accuracy must be identical, and the quality of captured images must be the same. Features that depend on the different semantics of the two APIs are not required to have matching speed or quality, but SHOULD match as closely as possible.

Device implementations MUST implement the following behaviors for the camera-related APIs, for all available cameras. Device implementations:

7.5.5. Camera Orientation

If device implementations have a front- or a rear-facing camera, such camera(s):

7.6. Memory and Storage

7.6.1. Minimum Memory and Storage

Device implementations:

7.6.2. Application Shared Storage

Device implementations:

Device implementations MAY meet the above requirements using either of the following:

If device implementations use removable storage to satisfy the above requirements, they:

If device implementations use a portion of the non-removable storage to satisfy the above requirements, they:

If device implementations include multiple shared storage paths (such as both an SD card slot and shared internal storage), they:

If device implementations have a USB port with USB peripheral mode support, they:

If device implementations have a USB port with USB peripheral mode and support Media Transfer Protocol, they:

7.6.3. Adoptable Storage

If the device is expected to be mobile in nature unlike Television, device implementations are:

If the removable storage device port is in a long-term stable location, such as within the battery compartment or other protective cover, device implementations are:

7.7. USB

If device implementations have a USB port, they:

7.7.1. USB peripheral mode

If device implementations include a USB port supporting peripheral mode:

If device implementations include a USB port and implement the AOA specification, they:

7.7.2. USB host mode

If device implementations include a USB port supporting host mode, they:

If device implementations include a USB port supporting host mode and the USB audio class, they:

If device implementations include a USB port supporting host mode and the Storage Access Framework (SAF), they:

If device implementations include a USB port supporting host mode and USB Type-C, they:

7.8. Audio

7.8.1. Microphone

If device implementations include a microphone, they:

If device implementations omit a microphone, they:

7.8.2. Audio Output

If device implementations include a speaker or an audio/multimedia output port for an audio output peripheral such as a 4 conductor 3.5mm audio jack or USB host mode port using USB audio class, they:

If device implementations do not include a speaker or audio output port, they:

For the purposes of this section, an "output port" is a physical interface such as a 3.5mm audio jack, HDMI, or USB host mode port with USB audio class. Support for audio output over radio-based protocols such as Bluetooth, WiFi, or cellular network does not qualify as including an "output port".

7.8.2.1. Analog Audio Ports

In order to be compatible with the headsets and other audio accessories using the 3.5mm audio plug across the Android ecosystem, if device implementations include one or more analog audio ports, they:

If device implementations have a 4 conductor 3.5mm audio jack, they:

If device implementations have a 4 conductor 3.5mm audio jack and support a microphone, and broadcast the android.intent.action.HEADSET_PLUG with the extra value microphone set as 1, they:

7.8.3. Near-Ultrasound

Near-Ultrasound audio is the 18.5 kHz to 20 kHz band.

Device implementations:

If PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND is "true", the following requirements MUST be met by the VOICE_RECOGNITION and UNPROCESSED audio sources:

If PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND is "true":

7.9. Virtual Reality

Android includes APIs and facilities to build "Virtual Reality" (VR) applications including high quality mobile VR experiences. Device implementations MUST properly implement these APIs and behaviors, as detailed in this section.

7.9.1. Virtual Reality Mode

Android includes support for VR Mode, a feature which handles stereoscopic rendering of notifications and disables monocular system UI components while a VR application has user focus.

7.9.2. Virtual Reality Mode - High Performance

If device implementations support VR mode, they:

If exclusive core is supported, then the core:

8. Performance and Power

Some minimum performance and power criteria are critical to the user experience and impact the baseline assumptions developers would have when developing an app.

8.1. User Experience Consistency

A smooth user interface can be provided to the end user if there are certain minimum requirements to ensure a consistent frame rate and response times for applications and games. Device implementations, depending on the device type, MAY have measurable requirements for the user interface latency and task switching as described in section 2.

8.2. File I/O Access Performance

Providing a common baseline for a consistent file access performance on the application private data storage (/data partition) allows app developers to set a proper expectation that would help their software design. Device implementations, depending on the device type, MAY have certain requirements described in section 2 for the following read and write operations:

8.3. Power-Saving Modes

If device implementations include features to improve device power management that are included in AOSP or extend the features that are included in AOSP, they:

In addition to the power-saving modes, Android device implementations MAY implement any or all of the 4 sleeping power states as defined by the Advanced Configuration and Power Interface (ACPI).

If device implementations implement S3 and S4 power states as defined by the ACPI, they:

8.4. Power Consumption Accounting

A more accurate accounting and reporting of the power consumption provides the app developer both the incentives and the tools to optimize the power usage pattern of the application.

Device implementations:

8.5. Consistent Performance

Performance can fluctuate dramatically for high-performance long-running apps, either because of the other apps running in the background or the CPU throttling due to temperature limits. Android includes programmatic interfaces so that when the device is capable, the top foreground application can request that the system optimize the allocation of the resources to address such fluctuations.

Device implementations:

If device implementations report support of Sustained Performance Mode, they:

If device implementations include two or more CPU cores, they:

If device implementations support reserving one exclusive core for the top foreground application, they:

If device implementations do not support an exclusive core, they:

9. Security Model Compatibility

Device implementations:

9.1. Permissions

Device implementations:

Permissions with a protection level of dangerous are runtime permissions. Applications with targetSdkVersion > 22 request them at runtime.

Device implementations:

If device implementations include a pre-installed app or wish to allow third-party apps to access the usage statistics, they:

If device implementations intend to disallow any apps, including pre-installed apps, from accessing the usage statistics, they:

9.2. UID and Process Isolation

Device implementations:

9.3. Filesystem Permissions

Device implementations:

9.4. Alternate Execution Environments

Device implementations MUST keep consistency of the Android security and permission model, even if they include runtime environments that execute applications using some other software or technology than the Dalvik Executable Format or native code. In other words:

9.5. Multi-User Support

Android includes support for multiple users and provides support for full user isolation.

If device implementations include multiple users, they:

If device implementations include multiple users and do not declare the android.hardware.telephony feature flag, they:

If device implementations include multiple users and declare the android.hardware.telephony feature flag, they:

9.6. Premium SMS Warning

Android includes support for warning users of any outgoing premium SMS message. Premium SMS messages are text messages sent to a service registered with a carrier that may incur a charge to the user.

If device implementations declare support for android.hardware.telephony, they:

9.7. Security Features

Device implementations MUST ensure compliance with security features in both the kernel and platform as described below.

The Android Sandbox includes features that use the Security-Enhanced Linux (SELinux) mandatory access control (MAC) system, seccomp sandboxing, and other security features in the Linux kernel. Device implementations:

Kernel integrity and self-protection features are integral to Android security. Device implementations:

If device implementations use a Linux kernel, they:

If device implementations use kernel other than Linux, they:

Android contains multiple defense-in-depth features that are integral to device security.

Device implementations:

9.8. Privacy

9.8.1. Usage History

Android stores the history of the user's choices and manages such history by UsageStatsManager.

Device implementations:

Android stores the system events using the StatsLog identifiers, and manages such history via the StatsManager and the IncidentManager System API.

Device implementations:

9.8.2. Recording

Device implementations:

If device implementations include functionality in the system that captures the contents displayed on the screen and/or records the audio stream played on the device, they:

If device implementations include a component enabled out-of-box, capable of recording ambient audio to infer useful information about user’s context, they:

9.8.3. Connectivity

If device implementations have a USB port with USB peripheral mode support, they:

9.8.4. Network Traffic

Device implementations:

If device traffic is routed through a VPN, device implementations:

If device implementations have a mechanism, enabled out-of-box by default, that routes network data traffic through a proxy server or VPN gateway (for example, preloading a VPN service with android.permission.CONTROL_VPN granted), they:

If device implementations implement a user affordance to toggle on the "always-on VPN" function of a 3rd-party VPN app, they:

9.9. Data Storage Encryption

If Advanced Encryption Standard (AES) crypto performance, measured with the most performant AES technology available on the device (e.g. the ARM Cryptography Extensions), is above 50 MiB/sec, device implementations:

If device implementations are already launched on an earlier Android version and cannot meet the requirement through a system software update, they MAY be exempted from the above requirements.

Device implementations:

9.9.1. Direct Boot

Device implementations:

9.9.2. File Based Encryption

If device implementations support FBE, they:

The upstream Android Open Source project provides a preferred implementation of this feature based on the Linux kernel ext4 encryption feature.

9.9.3. Full Disk Encryption

If device implementations support full disk encryption (FDE), they:

The upstream Android Open Source project provides a preferred implementation of this feature, based on the Linux kernel feature dm-crypt.

9.10. Device Integrity

The following requirements ensures there is transparency to the status of the device integrity. Device implementations:

If device implementations are already launched without supporting Verified Boot on an earlier version of Android and can not add support for this feature with a system software update, they MAY be exempted from the requirement.

Verified Boot is a feature that guarantees the integrity of the device software. If device implementations support the feature, they:

If device implementations are already launched without supporting C-1-8 through C-1-10 on an earlier version of Android and can not add support for these requirements with a system software update, they MAY be exempted from the requirements.

The upstream Android Open Source Project provides a preferred implementation of this feature in the external/avb/ repository, which can be integrated into the bootloader used for loading Android.

Device implementations:

If device implementations support the Android Protected Confirmation API they:

9.11. Keys and Credentials

The Android Keystore System allows app developers to store cryptographic keys in a container and use them in cryptographic operations through the KeyChain API or the Keystore API. Device implementations:

When the device implementation supports a secure lock screen, it:

Note that if a device implementation is already launched on an earlier Android version, such a device is exempted from the requirement to have a keystore backed by an isolated execution environment and support the key attestation, unless it declares the android.hardware.fingerprint feature which requires a keystore backed by an isolated execution environment.

9.11.1. Secure Lock Screen

The AOSP implementation follows a tiered authentication model where a knowledge-factory based primary authentication can be backed by either a secondary strong biometric, or by weaker tertiary modalities.

Device implementations:

Note that the above authentication methods are referred as the recommended primary authentication methods in this document.

If device implementations add or modify the recommended primary authentication methods and use a new authentication method as a secure way to lock the screen, the new authentication method:

If device implementations add or modify the authentication methods to unlock the lock screen if based on a known secret and use a new authentication method to be treated as a secure way to lock the screen:

If device implementations add or modify the recommended primary authentication methods to unlock the lock screen and use a new authentication method that is based on biometrics to be treated as a secure way to lock the screen, the new method:

If the biometric authentication methods do not meet the spoof and imposter acceptance rates as described in section 7.3.10:

If device implementations add or modify the authentication methods to unlock the lock screen and a new authentication method is based on a physical token or the location:

If device implementations have a secure lock screen and include one or more trust agent, which implements the TrustAgentService System API, they:

If device implementations add or modify the authentication methods to unlock the lock screen that is not a secure lock screen as described above, and use a new authentication method to unlock the keyguard:

9.11.2. StrongBox

The Android Keystore System allows app developers to store cryptographic keys in a dedicated secure processor as well as the isolated execution environment described above.

Device implementations:

If device implementations support StrongBox, they:

9.12. Data Deletion

All device implementations:

9.13. Safe Boot Mode

Android provides Safe Boot Mode, which allows users to boot up into a mode where only preinstalled system apps are allowed to run and all third-party apps are disabled. This mode, known as "Safe Boot Mode", provides the user the capability to uninstall potentially harmful third-party apps.

Device implementations are:

If device implementations implement Safe Boot Mode, they:

9.14. Automotive Vehicle System Isolation

Android Automotive devices are expected to exchange data with critical vehicle subsystems by using the vehicle HAL to send and receive messages over vehicle networks such as CAN bus.

The data exchange can be secured by implementing security features below the Android framework layers to prevent malicious or unintentional interaction with these subsystems.

9.15. Subscription Plans

"Subscription plans" refer to the billing relationship plan details provided by a mobile carrier through SubscriptionManager.setSubscriptionPlans().

All device implementations:

10. Software Compatibility Testing

Device implementations MUST pass all tests described in this section. However, note that no software test package is fully comprehensive. For this reason, device implementers are STRONGLY RECOMMENDED to make the minimum number of changes as possible to the reference and preferred implementation of Android available from the Android Open Source Project. This will minimize the risk of introducing bugs that create incompatibilities requiring rework and potential device updates.

10.1. Compatibility Test Suite

Device implementations:

The CTS is designed to be run on an actual device. Like any software, the CTS may itself contain bugs. The CTS will be versioned independently of this Compatibility Definition, and multiple revisions of the CTS may be released for Android 9.

Device implementations:

10.2. CTS Verifier

The CTS Verifier is included with the Compatibility Test Suite, and is intended to be run by a human operator to test functionality that cannot be tested by an automated system, such as correct functioning of a camera and sensors.

Device implementations:

The CTS Verifier has tests for many kinds of hardware, including some hardware that is optional.

Device implementations:

Test cases for features noted as optional by this Compatibility Definition Document MAY be skipped or omitted.

11. Updatable Software

If the device implementations include support for an unmetered data connection such as 802.11 or Bluetooth PAN (Personal Area Network) profile, then, they:

For device implementations that are launching with Android 6.0 and later, the update mechanism SHOULD support verifying that the system image is binary identical to expected result following an OTA. The block-based OTA implementation in the upstream Android Open Source Project, added since Android 5.1, satisfies this requirement.

Also, device implementations SHOULD support A/B system updates. The AOSP implements this feature using the boot control HAL.

If an error is found in a device implementation after it has been released but within its reasonable product lifetime that is determined in consultation with the Android Compatibility Team to affect the compatibility of third-party applications, then:

Android includes features that allow the Device Owner app (if present) to control the installation of system updates. If the system update subsystem for devices report android.software.device_admin then, they:

12. Document Changelog

For a summary of changes to the Compatibility Definition in this release:

For a summary of changes to individuals sections:

  1. Introduction
  2. Device Types
  3. Software
  4. Application Packaging
  5. Multimedia
  6. Developer Tools and Options
  7. Hardware Compatibility
  8. Performance and Power
  9. Security Model
  10. Software Compatibility Testing
  11. Updatable Software
  12. Document Changelog
  13. Contact Us

12.1. Changelog Viewing Tips

Changes are marked as follows:

For best viewing, append the pretty=full and no-merges URL parameters to your changelog URLs.

13. Contact Us

You can join the android-compatibility forum and ask for clarifications or bring up any issues that you think the document does not cover.