Android 17 Compatibility Definition

1. Introduction

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

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 17. A "device implementation" or "implementation" is the hardware/software solution so developed.

To be considered compatible with Android 17, 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 is 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 IDs in Section 2 have two parts. The first corresponds to a section ID as described above. The second part identifies the form factor and the form-factor specific requirement.

section ID that is followed by the Requirement ID described above.

2. Device Types

The Android Open Source Project provides a software stack that can be used for a variety of device types and form factors. To support security on devices, the software stack, including any replacement OS or an alternate kernel implementation, is expected to execute in a secure environment as described in section 9 and elsewhere within this CDD. 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.

2.2.1. Hardware

Handheld device implementations:

If handheld device implementations include support for Vulkan, they:

Start of requirements changed in Android 17

If Handheld device implementations declare support of any 64-bit ABI (with or without any 32-bit ABI) and return false for ActivityManager.isLowRamDevice(), they:

  • [7.1.4.2/H-2-1] MUST support Vulkan 1.1 or higher.

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

Handheld device implementations:

If Handheld device implementations declare support via a system property graphics.gpu.profiler.support, they:

Handheld device implementations:

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

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

If Handheld device implementations include a 3-axis 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:

Start of requirements added in Android 17

If Handheld device implementations support cellular data connectivity, they:

  • [7.4.1/H-1-1] MUST declare the android.hardware.telephony.data feature flag.

Handheld device implementations that include support for Bluetooth LE:

If device implementations include support for 802.11 (Wi-Fi) they:

If devices support Wi-Fi Neighbor Awareness Networking (NAN) protocol by declaring PackageManager.FEATURE_WIFI_AWARE and Wi-Fi Location (Wi-Fi Round Trip Time — RTT) by declaring PackageManager.FEATURE_WIFI_RTT, they:

It is STRONGLY RECOMMENDED to follow the measurement setup steps specified in Presence Calibration.

Start of requirements added in Android 17

If handheld device implementations support the Wi-Fi Proximity Detection (PD) protocol - indicated by the PackageManager.FEATURE_WIFI_RTT declaration and a non-null return from the WifiRttManager#getProximityDetectionCharacteristics(), then:

  • [7.4.2.6/H-1-1] If devices advertise support for 160 MHz, they MUST use 160 MHz bandwidth for ranging measurements.

  • [7.4.2.6/H-1-2] When using the IEEE 802.11az standard, devices MUST report the range accurately at the 68th percentile (calculated via the Cumulative Distribution Function) at distances of 10 cm, 1 m, 3 m, and 5 m as observed via the WifiRttManager#startContinuousRanging Android API:

    • +/-0.5 m at 160 MHz bandwidth
    • +/-1 m at 80 MHz bandwidth
    • +/-2 m at 40 MHz bandwidth
    • +/-4 m at 20 MHz bandwidth
  • [7.4.2.6/H-1-3] When using the IEEE 802.11mc standard, devices MUST report the range accurately at the 68th percentile (calculated via the Cumulative Distribution Function) at distances of 10 cm, 1 m, 3 m, and 5 m as observed via the WifiRttManager#startContinuousRanging Android API:

    • +/-2 m at 80 MHz bandwidth
    • +/-4 m at 40 MHz bandwidth
    • +/-8 m at 20 MHz bandwidth
  • [7.4.2.6/H-SR-1] When using the IEEE 802.11az standard, devices are STRONGLY RECOMMENDED to report the range accurately at the 90th percentile (calculated via the Cumulative Distribution Function) at a distance of 10 cm, as observed via the WifiRttManager#startContinuousRanging Android API:

    • +/-0.5 m at 160 MHz bandwidth
    • +/-1 m at 80 MHz bandwidth
    • +/-2 m at 40 MHz bandwidth
    • +/-4 m at 20 MHz bandwidth
  • [7.4.2.6/H-SR-2] When using the IEEE 802.11mc standard, devices are STRONGLY RECOMMENDED to report the range accurately at the 90th percentile (calculated via the Cumulative Distribution Function) at a distance of 10 cm, as observed via the WifiRttManager#startContinuousRanging Android API:

    • +/-2 m at 80 MHz bandwidth
    • +/-4 m at 40 MHz bandwidth
    • +/-8 m at 20 MHz bandwidth

The conditions for compliance are clear LOS between the two devices, an open test environment with minimal nearby reflectors to reduce multipath, no people moving around the devices during the testing to minimize channel variations.

It is STRONGLY RECOMMENDED to follow the measurement setup steps specified in Presence Calibration.

Start of requirements added in Android 17

If handheld devices support Wi-Fi Proximity Detection (PD) protocol by declaring PackageManager.FEATURE_WIFI_PD and Wi-Fi Location (Wi-Fi Round Trip Time — RTT) by declaring PackageManager.FEATURE_WIFI_RTT, then they:

  • [7.4.2.10/H-1-1] MUST use at least 160 MHz bandwidth.

  • [7.4.2.10/H-1-2] MUST report the range accurately to within +/-0.25 meters at 160 MHz bandwidth at the 68th percentile (as calculated with the Cumulative Distribution Function), as observed via the WifiRttManager#startRanging Android API.

It is STRONGLY RECOMMENDED to follow the measurement setup steps specified in Presence Calibration.

If Handheld device implementations declare FEATURE_BLUETOOTH_LE, they:

Start of requirements added in Android 17

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

  • [7.5.1/H-1-1] MUST have a resolution of at least 2 megapixels.

If Handheld device implementations include a logical camera device that lists capabilities using CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA, they:

Handheld device implementations:

If Handheld device implementations declare support of only a 32-bit ABI:

If Handheld device implementations declare support of any 64-bit ABI (with or without any 32-bit ABI):

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.

If Handheld device implementations include less than or equal to 1 GB of memory available to the kernel and userspace, they:

If Handheld device implementations include more than 1 GB of memory available to the kernel and userspace, they:

If Handheld device implementations include greater than or equal to 2 GB and less than 4 GB of memory available to the kernel and userspace, they:

If Handheld device implementations include less than 2 GB of memory available to the kernel and userspace, they:

Handheld device implementations:

If handheld device implementations include a USB port with a controller operating in peripheral mode, they:

If Handheld device implementations include a USB port supporting host 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:

If Handheld device implementations include one or more USB-C port(s) in host mode and implement (USB audio class), in addition to requirements in section 7.7.2, they:

Function Mappings Context Behavior
A HID usage page: 0x0C
HID usage: 0x0CD
Kernel key: KEY_PLAYPAUSE
Android key: KEYCODE_MEDIA_PLAY_PAUSE
Media playback Input: Short press
Output: Play or pause
Input: Long press
Output: Launch voice command
Sends: android.speech.action.VOICE_SEARCH_HANDS_FREE if the device is locked or its screen is off. Sends android.speech.RecognizerIntent.ACTION_WEB_SEARCH otherwise
Incoming call Input: Short press
Output: Accept call
Input: Long press
Output: Reject call
Ongoing call Input: Short press
Output: End call
Input: Long press
Output: Mute or unmute microphone
B HID usage page: 0x0C
HID usage: 0x0E9
Kernel key: KEY_VOLUMEUP
Android key: VOLUME_UP
Media playback, Ongoing call Input: Short or long press
Output: Increases the system or headset volume
C HID usage page: 0x0C
HID usage: 0x0EA
Kernel key: KEY_VOLUMEDOWN
Android key: VOLUME_DOWN
Media playback, Ongoing call Input: Short or long press
Output: Decreases the system or headset volume
D HID usage page: 0x0C
HID usage: 0x0CF
Kernel key: KEY_VOICECOMMAND
Android key: KEYCODE_VOICE_ASSIST
All. Can be triggered in any instance. Input: Short or long press
Output: Launch voice command

When the USB audio terminal types 0x0302 is detected, they:

When the USB audio terminal types 0x0402 is detected, they:

When API AudioManager.getDevices() is called while the USB peripheral is connected they:

For Handheld device implementations that declare android.hardware.audio.output and android.hardware.microphone, see the RTL and TTL requirements in section 5.6.

A linear resonant actuator (LRA) is a single-mass spring system which has a dominant resonant frequency where the mass translates in the direction of desired motion.

If Handheld device implementations include at least one general purpose 7.10 linear resonant actuator, they:

If Handheld device implementations have a general purpose haptic actuator which is X-axis linear resonant actuator (LRA), they:

If handheld device implementations follow haptic constants mapping, they:

2.2.2. Multimedia

Handheld device implementations MUST support the following audio encoding and decoding formats and make them available to third-party applications:

Start of requirements added in Android 17
  • [5.1/H-0-6] MPEG-D USAC with MPEG-D DRC (Extended High Efficiency AAC)

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

Handheld device implementations MUST support the following video decoding formats and make them available to third-party applications:

2.2.3. Software

Handheld device implementations:

Start of requirements changed in Android 17

Start of requirements added in Android 17
  • [3.8.1/H-0-1] MUST implement a default launcher that supports in-app pinning of widgets.

Start of requirements changed in Android 17
  • [3.8.2/H-SR-1] Are STRONGLY RECOMMENDED to support third-party app widgets.

  • [3.8.2/H-0-1] MUST support third-party app widgets.

If Handheld device implementations support MediaStyle notifications they:

An app's Live Update Notification can be promoted when the app meets all the promotion characteristics. Such notification is described as Promoted Live Update Notification in this document. Handheld device implementations MUST prominently display Promoted Live Update Notification per the following requirements.

If Handheld device implementations declare API level 36.1 or higher, they:

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

If Handheld device implementations support Assist action, they:

If Handheld device implementations support conversation notifications and group them into a separate section from alerting and silent non-conversation notifications, they:

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

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

If Handheld device implementations include support for ControlsProviderService and Control APIs and allow third-party applications to publish device controls, they:

Conversely, If Handheld device implementations do not implement such controls, they:

If handheld device implementations are not running in lock task mode, when content is copied to the clipboard they:

Handheld device implementations:

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

If the navigation function is provided as an on-screen, gesture-based action:

Start of requirements added in Android 17

Handheld device implementations:

  • [3.20.1/H-0-1] MUST implement all Assistant Audio Stream requirements.

If Handheld device implementations provide a navigation function as a gesture from anywhere on the left and right edges of the screen:

If Handheld device implementations support a secure lock screen and have greater than or equal to 2 GB of memory available to the kernel and userspace, they:

If Android handheld device implementations declare the support for camera via android.hardware.camera.any they:

If device implementation's settings application implements a split functionality, using activity embedding, they:

Start of requirements removed in Android 17

If device implementations allow users to place calls of any sort, 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:

Handheld device implementations:

2.2.5. Security Model

Handheld device implementations:

If Handheld device implementations include a default application to support the VoiceInteractionService they:

Device implementations MUST declare support for android.software.credentials and:

Handheld device implementations:

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.

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

Start of requirements changed in Android 17

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

  • [9.11.1/H-1-1] MUST challenge the user for one of the recommended primary authentication methods (such as PIN, pattern, or password) more frequently than once every 72 hours.

If Handheld device implementations have a secure lock screen and include one or more trust agents that call the TrustAgentService.grantTrust() System API with the FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE flag, they:

  • [9.11.1/H-1-1] MUST call TrustManagerService.revokeTrust() after either:
    • A maximum of 24 hours from granting trust.
    • An 8 hour idle window.

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

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

Restricted settings

Restricted Settings provides a user with visible warnings and solicits user confirmation in order to grant permissions for each application that is either:

For any of the Enforced Permissions and their associated identifiers listed in [9.8/H-0-5] below.

Such applications are labeled "Covered Applications" for the requirements listed in this section.

Device implementations:

Android, through the System API VoiceInteractionService supports a mechanism for secure always-on hotword detection without mic access indication and always-on query detection, without mic or camera access indication.

If Handheld device implementations support the System API HotwordDetectionService or another mechanism for hotword detection without mic access indication, they:

If device implementations include an application that uses the System API HotwordDetectionService, or similar mechanism for hotword detection without mic usage indication, the application:

If Handheld device implementations support the System API VisualQueryDetectionService or another mechanism for query detection without mic and/or camera access indication, they:

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

If Handheld device implementations declare android.hardware.camera.any, they:

Start of requirements added in Android 17

When a non-system, foreground app accesses a device's precise location, the device:

  • [9.8.8/H-6-1] MUST display an indicator visible to the user.

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

2.2.6. Developer Tools and Options Compatibility

Handheld device implementations (* Not applicable for Tablet):

Handheld device implementations:

2.2.7. Handheld Media Performance Class

Changes in CDD 17: 2.2.7 MPC section

We've made significant changes to the Media Performance class requirements structure. Starting with API 37, we added new levels 1, 10, 20, and 37. We also reduced the requirement complexity by referring to a Media Performance Class Measurements page which details each requirement measured by MPC level.

See section 7.11 for the definition of media performance class and the Media Performance Class Definition for all measures.

2.2.7.1. Media

If Handheld device implementations return a non-zero value for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, they:

Start of requirements added in Android 17

Start of requirements added in Android 17
  • [5.6/H-3-1] MUST be able to handle switching between playing sine waves with no underrun of audio buffers corresponding to the device's declared Media Performance Class Level.

  • [5.6/H-3-2] MUST meet USB audio device output channel requirements corresponding to the device's declared Media Performance Class Level.

  • [5.6/H-3-3] MUST meet USB audio device input channel requirements corresponding to the device's declared Media Performance Class Level.

2.2.7.2. Camera

If Handheld device implementations return a non-zero value for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, they:

If Handheld device implementations return a non-zero value for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, they:

Start of requirements added in Android 17

2.2.7.3. Hardware

Start of requirements added in Android 17

If Handheld device implementations return 20 for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, then they:

  • [7.1.1.1/H-1-1] MUST have screen resolution of at least 1080p.
  • [7.1.1.3/H-1-1] MUST have screen density of at least 400 dpi.
  • [7.6/H-1-1] MUST have at least 5.12 GiB available to the kernel as reported by android.app.ActivityManager.MemoryInfo.

If Handheld device implementations return a non-zero value for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, they:

If Handheld device implementations return a non-zero value for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, they:

2.2.7.4. Performance

If Handheld device implementations return a non-zero value for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, they:

If Handheld device implementations return a non-zero value for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, they:

2.2.7.5. Graphics

If Handheld device implementations return a non-zero value for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, 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 3-axis 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 and decoding formats and make them available to third-party applications:

Start of requirements added in Android 17
  • [5.1/T-0-4] MPEG-D USAC with MPEG-D DRC (Extended High Efficiency AAC)

Television device implementations MUST support the following video encoding formats and make them available to third-party applications:

Television device implementations:

Television device implementations MUST support the following video decoding formats and make them available to third-party applications:

Television device implementations MUST support MPEG-2 decoding, as detailed in Section 5.3.1, at standard video frame rates and resolutions up to and including:

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 do not have a built in display, but instead support an external display connected via HDMI, they:

If Television device implementations do not have a built in display, but instead support an external display connected via HDMI, they:

If Television device implementations do not support UHD decoding, but instead support an external display connected via HDMI, 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:

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.

Television device implementations:

The Android Television Tuner Framework (TF) unifies the handling of live content from Tuner with streaming content from IP on Android Television devices. The Tuner Framework provides a standard API to create input services that use Android Television Tuner.

If device implementations support Tuner, they:

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:

If Television device implementations do not have a battery they:

If Television device implementations have a battery they:

Television device implementations:

2.3.5. Security Model

Television device implementations:

If Television device implementations include a default application to support the VoiceInteractionService they:

Television device implementations:

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.

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

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

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

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

If Television device implementations declare android.hardware.camera.any, they:

2.3.6. Developer Tools and Options Compatibility

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:

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

If Watch device implementations include a 3-axis gyroscope, they:

Start of requirements added in Android 17

If Watch device implementations support cellular data connectivity, they:

  • [7.4.1/W-1-1] MUST declare the android.hardware.telephony.data feature.

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.4.5. Security Model

Watch device implementations:

If Watch device implementations include a default application to support the VoiceInteractionService they:

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

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

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

Start of requirements changed in Android 17

Start of requirements added in Android 17

If device implementations have a secure lock screen and include one or more trust agents, which call the TrustAgentService.grantTrust() System API with the FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE flag, they:

  • [9.11.1/W-2-1] MUST meet the following conditions to call grantTrust() with that flag:
    • The device is connected to a proximate physical primary handheld device with a lockscreen of its own, and
    • The user has authenticated their identity against that lockscreen or Class 3 biometric within the last 30 seconds.
  • [9.11.1/W-2-2] MUST set the device's state to TrustState.TRUSTABLE when the wearable device goes either off-wrist or off-body and TrustAgent hasn't revoked trust.

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 support Concurrent Multi-user (where multiple Android users can interact with the device concurrently, each using their own display when config_multiuserVisibleBackgroundUsers is enabled), they:

If Automotive device implementations support OpenGL ES 3.1, they:

If Automotive device implementations include support for Vulkan, they:

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

Automotive device implementations:

If Automotive device implementations declare support via a system property graphics.gpu.profiler.support, they:

Automotive device implementations:

Automotive device implementations:

If Automotive device implementations support Concurrent Multi-user (where multiple Android users can interact with the device concurrently, each using their own display when config_multiuserVisibleBackgroundUsers is enabled), they:

If Automotive device implementations include an accelerometer, they:

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

If Automotive device implementations include an accelerometer with less than 3 axes, they:

If Automotive device implementations include a gyroscope, they:

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

If Automotive device implementations include a gyroscope with less than 3-axes, they:

If Automotive device implementations include a GPS/GNSS receiver, but do not include cellular network-based data connectivity, they:

If automotive device implementations include a TYPE_HEADING sensor, they:

Automotive device implementations:

If Automotive device implementations support Concurrent Multi-user (where multiple Android users can interact with the device concurrently, each using their own display when config_multiuserVisibleBackgroundUsers is enabled), they:

Automotive device implementations:

If device implementations include support for AM/FM broadcast radio and expose the functionality to any application, they:

A rear-facing camera means a world-facing camera which can be located at any place on the vehicle and is facing the outside of the vehicle cabin; that is, it images scenes on the far side of the vehicle body, like the rear-view camera.

A front-facing camera means a user-facing camera which can be located at any place on the vehicle and is facing inside of the vehicle cabin; that is it images the user, such as for video conferencing and similar applications.

Automotive device implementations:

If Automotive device implementations include at least one camera which is world-facing then, for such a camera, they:

If Automotive device implementations include at least one camera which is user-facing then, for such a camera:

If Automotive device implementations include a camera which is accessible via either android.hardware.Camera or android.hardware.camera2 API, they:

Start of requirements removed in Android 17

If Automotive device implementations include a camera which is not accessible via either android.hardware.Camera or android.hardware.camera2 API, then they:

If Automotive device implementations include one or more cameras accessible via Extended View System Service, for such a camera, they:

If automotive device implementations include one or more cameras which are accessible via both Extended View System Service and android.hardware.Camera or android.hardware.Camera2 API then, for such a camera, they:

If Automotive device implementations provide a proprietary camera API, they:

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 support Concurrent Multi-user (where multiple Android users can interact with the device concurrently, each using their own display when config_multiuserVisibleBackgroundUsers is enabled), they:

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:

If Automotive device implementations include a USB port with a controller operating in peripheral mode, they:

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

Automotive device implementations:

Automotive device implementations:

If Automotive device implementations support Concurrent Multi-user (where multiple Android users can interact with the device concurrently, each using their own display when config_multiuserVisibleBackgroundUsers is enabled), they:

When the AudioManager.getDevices() API is called while the USB peripheral is connected, it:

2.5.2. Multimedia

Automotive device implementations MUST support the following audio encoding and decoding formats and make them available to third-party applications:

Start of requirements added in Android 17
  • [5.1/A-0-4] MPEG-D USAC with MPEG-D DRC (Extended High Efficiency AAC)

Automotive device implementations MUST support the following video encoding formats and make them available to third-party applications:

Automotive device implementations MUST support the following video decoding formats and make them available to third-party applications:

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

If Automotive device implementations support Concurrent Multi-user (where multiple Android users can interact with the device concurrently, each using their own display when config_multiuserVisibleBackgroundUsers is enabled), they:

2.5.3. Software

Automotive device implementations:

If Automotive device implementations provide a proprietary API using android.car.CarPropertyManager with android.car.VehiclePropertyIds, they:

Automotive device implementations:

If Automotive device implementation's settings application implements a split functionality, using activity embedding, they:

If Automotive device implementations support Concurrent Multi-user (where multiple Android users can interact with the device concurrently, each using their own display when config_multiuserVisibleBackgroundUsers is enabled), they:

Automotive device implementations:

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

Automotive device implementations:

If Automotive device implementations support User HAL properties, they:

Automotive device implementations:

Start of requirements added in Android 17

Automotive device implementations:

If Automotive device implementations include a default launcher app, they:

Automotive device implementations:

Start of requirements added in Android 17

Automotive device implementations:

While running applications in foreground with android.software.car.display_compatibility feature or applications without android.hardware.type.automotive feature, Automotive devices:

Start of requirements removed in Android 17

If Automotive device implementations allow users to place calls of any sort, they:

2.5.4. Performance and Power

Automotive device implementations:

If Automotive device implementations return android.os.Build.VERSION_CODES.U or greater for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, they:

2.5.5. Security Model

If Automotive device implementations support multiple users, they:

If Automotive device implementations support the System API VisualQueryDetectionService or another mechanism for query detection without mic and/or camera access indication, they:

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

If Automotive device implementations declare android.hardware.camera.any, they:

Automotive device implementations:

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.

Automotive device implementations:

2.5.6. Developer Tools and Options Compatibility

Automotive device implementations:

2.6. Tablet Requirements

An Android Tablet device refers to an Android device implementation that typically meets all the following criteria:

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

2.6.1. Hardware

Gyroscope

If Tablet device implementations include a 3-axis gyroscope, they:

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.

Virtual Reality Mode (Section 7.9.1)

Virtual Reality High Performance (Section 7.9.2)

Virtual reality requirements are not applicable to tablets.

2.6.2. Security Model

Keys and Credentials (Section 9.11)

Refer to Section [9.11].

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

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

2.6.2. Software

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:

Start of requirements changed in Android 17

3.1.1. Android Extensions

Android supports extending the managed API surface of a particular API level by updating the extension version for that API level. The android.os.ext.SdkExtensions.getExtensionVersion(int apiLevel) API returns the extension version of the provided apiLevel, if there are extensions for that API level.

Android device implementations:

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.

Start of requirements changed in Android 17
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 Permitted Version Strings for Android 17.
VERSION.SDK The version of the currently-executing Android system, in a format accessible to third-party application code. For Android 17, this field MUST have the integer value 17_INT.
VERSION.SDK_INT The version of the currently-executing Android system, in a format accessible to third-party application code. For Android 17, this field MUST have the integer value 17_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. The value of this field MUST be encodable as printable 7-bit ASCII and match the regular expression ^[^ :\/~]+$.
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:17/LMYXX/3359:userdebug/test-keys

The fingerprint MUST NOT include whitespace characters. 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.
SOC_MANUFACTURER The trade of name of the manufacturer of the primary system on chip (SOC) used in the product. Devices with the same SOC manufacturer should use the same constant value. Please ask the SOC manufacturer for the correct constant to use. The value of this field MUST be encodable as 7-bit ASCII, MUST match the regular expression ^([0-9A-Za-z ]+), MUST NOT start or end with whitespace, and MUST NOT be equal to "unknown". This field MUST NOT change during the lifetime of the product.
SOC_MODEL The model name of the primary system on a chip (SOC) used in the product. Devices with the same SOC model should use the same constant value. Please ask the SOC manufacturer for the correct constant to use. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression ^([0-9A-Za-z ._/+-]+)$, MUST NOT start or end with whitespace, and MUST NOT be equal to "unknown". 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 is STRONGLY RECOMMENDED to 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.
ODM_SKU An optional value chosen by the device implementer that contains SKU (Stock Keeping Unit) used to track specific configurations of the device, for example, any peripherals included with the device when sold. The value of this field MUST be encodable as 7-bit ASCII and match the regular expression ^([0-9A-Za-z.,_-]+)$.
SERIAL MUST return "UNKNOWN".
TAGS A comma-separated list of tags chosen by the device implementer that further distinguishes the build. The tags MUST be encodable as 7-bit ASCII and match the regular expression ^[a-zA-Z0-9._-]+ and MUST have one of the values corresponding to the three typical Android platform signing configurations: release-keys, dev-keys, and 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]+$.
STRONGBOX_MANUFACTURER The trade name of the manufacturer of the StrongBox chip used in the product. The StrongBox supplier provides the correct constant. Devices with the same StrongBox supplier should use the same constant value. The value of this field MUST match the regular expression ^([0-9A-Za-z ]+) and MUST NOT be equal to "unsupported". This field MUST NOT change during the lifetime of the product.
STRONGBOX_MODEL The model name of the StrongBox chip used in the product. The StrongBox supplier provides the correct constant. Devices with the same StrongBox supplier SHOULD use the same constant value. The value of this field MUST match the regular expression ^([0-9A-Za-z ._/+-]+)$ and MUST NOT be equal to "unsupported". This field MUST NOT change during the lifetime of the product.

3.2.3. Intent Compatibility

3.2.3.1. Common Application Intents

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

Device implementations:

Please refer to Section 2 for mandatory application intents for each device type.

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. Conditional Application Intents

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.calling, they:

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

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

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

If device implementations support the DND feature, they:

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

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

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

If device implementations provide the data saver mode, they:

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

If device implementations declare support for the camera via android.hardware.camera.any, they:

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

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

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:

If device implementations surface links to the activities specified by AutofillService_passwordsActivity in Settings or links to user passwords through a similar mechanism, they:

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

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

Android includes support for interactive screensavers, 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. Device Implementations:

If device implementations report android.hardware.nfc.uicc or android.hardware.nfc.ese, they:

3.2.4. Activities on secondary/multiple displays

If device implementations allow launching normal Android Activities on more than one display, they:

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:

Start of requirements added in Android 17
  • [C-1-5] The system default user agent string reported by the WebView for apps targeting SDK level 37 or higher MUST be in the following format:

    Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) ; wv)
    AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0
    $(CHROMIUM_MAJOR_VER).0.0.0 Mobile Safari/537.36
    
    • The value of the $(VERSION) string MUST be the static value 10.
    • The $(MODEL) string MUST be the static letter K.
    • The value of the $(CHROMIUM_MAJOR_VER) string MUST be the major version of Chromium in the upstream Android Open Source Project.
    • Device implementations MAY omit Mobile in the user agent string.

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. Application Restriction

If device implementations implement a proprietary mechanism to restrict apps (e.g. changing or restricting API behaviors that are described in the SDK) and that mechanism is more restrictive than the Restricted App Standby Bucket, they:

If an app is pre-installed on the device and has never been explicitly used by a user for more than 30 days, [C-1-3] [C-1-5] are exempted.

If device implementations extend the app restrictions that are implemented in AOSP, they:

3.5.2. Application Hibernation

If device implementations include App Hibernation that is included in AOSP or extends the feature that is included in AOSP, then they:

App Hibernation in AOSP meets the above requirements.

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:

Device implementers MAY add custom APIs in native languages, outside of the NDK APIs, 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
140 dpi (140dpi)
160 dpi (mdpi)
180 dpi (180dpi)
200 dpi (200dpi)
213 dpi (tvdpi)
220 dpi (220dpi) 36MB
240 dpi (hdpi)
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
140 dpi (140dpi)
160 dpi (mdpi)
180 dpi (180dpi) 48MB
200 dpi (200dpi)
213 dpi (tvdpi)
220 dpi (220dpi)
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
140 dpi (140dpi) 48MB
160 dpi (mdpi)
180 dpi (180dpi) 80MB
200 dpi (200dpi)
213 dpi (tvdpi)
220 dpi (220dpi)
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
140 dpi (140dpi) 80MB
160 dpi (mdpi)
180 dpi (180dpi) 96MB
200 dpi (200dpi)
213 dpi (tvdpi)
220 dpi (220dpi)
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:

If device implementations support monochrome icons, these icons:

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:

Start of requirements changed in Android 17

Start of requirements removed in Android 17

Start of requirements added in Android 17

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:

Android 11 introduces support for conversation notifications, which are notifications that use MessagingStyle and provides a published People Shortcut ID.

Device implementations:

If device implementations support conversation notifications and the app provides the required data for bubbles, they:

If device implementations support rich notifications, they:

Heads up notifications are notifications that are presented to the user as they come in independently of the surface the user is on. If device implementations 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.

Device implementations:

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

3.8.3.3. DND (Do not Disturb) / Priority Mode

If device implementations support the DND feature (also called Priority Mode), they:

3.8.3.4. Sensitive Notification Protection

Sensitive notification information includes content such as one-time passwords, one-time confirmation codes, and similar authentication or reset codes that can appear in notifications to users.

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

The AOSP implementation of NotificationAssistantServices exemplifies and meets these requirements. See android.ext.services.notification for an example.

3.8.4. Assist APIs

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

Start of requirements changed in Android 17

If device implementations support the Assist action, they:

  • [C-2-1] MUST indicate clearly to the end user when the context is shared, by either:

    • Each time the assist app accesses the context, displaying a white light around the edges of the screen that meet or exceed the duration and brightness of the Android Open Source Project implementation.

    • For the preinstalled assist app, providing a user affordance less than two navigations away from the default voice input and assistant app settings menu, and only sharing the context when the assist app is explicitly invoked by the user through a hotword or assist navigation key input.

  • [C-2-1] MUST share the context with the assist app only when the app is explicitly invoked by the user through assist navigation key input, a hotword, or other designated entry point.

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:

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)

See section 3.2.3.5 for settings intent to congfigure screen savers.

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:

Android includes support to render Myanmar fonts. Myanmar has several non-Unicode compliant fonts, commonly known as "Zawgyi," for rendering Myanmar languages.

If device implementations include support for Burmese, they:

3.8.14. Multi-windows

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

Start of requirements added in Android 17
  • [C-1-5] MUST show tasks with the selfMovable property in full opacity, with a distinguishable persistent decoration, such as a caption bar, and a method to close such tasks out of their persistent decorations.

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:

If device implementations include more than one Android-compatible display areas and make such areas available to apps, they:

If device implementations support multi-window mode(s), 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 may not be functional for an application due to a display cutout or curved display on the edge(s).

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

3.8.16. Device Controls

Android includes ControlsProviderService and Control APIs to allow third-party applications to publish device controls for quick status and action for users.

See Section 2_2_3 for device-specific requirements.

3.8.17. Clipboard

Device implementations:

If device implementations generate a user-visible preview when content is copied to the clipboard for any ClipData item where ClipData.getDescription().getExtras() contains android.content.extra.IS_SENSITIVE, they:

The AOSP reference implementation satisfies these clipboard requirements.

3.8.18. Location Button

Start of requirements added in Android 17

The Location button is an Android UI element that app developers can embed in their apps to get a precise location permission grant for the session of that app.

Device implementations:

  • [C-0-1] MUST NOT add, modify, nor remove customization options provided to app developers for the location button.

3.9. Device Administration

Android includes features that enable device policy controller applications to perform device administration functions at the system level, such as enforcing password policies or performing remote wipe, through the Device Policy Manager APIs.

3.9.1. Device Provisioning

3.9.1.1. Device owner provisioning

If device implementations declare android.software.device_admin, 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:

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

3.9.3. Managed User Support

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

If device implementations declare android.software.device_admin and provide an on-device user affordance to add additional secondary Users, they:

3.9.4. Device Policy Management Role Requirements

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

If a package name is not defined for config_devicePolicyManagement as described above:

If a package name is defined for config_devicePolicyManagement as described above:

If a package name is defined for config_devicePolicyManagementUpdater as described above:

3.9.5. Device Policy Resolution Framework

If device implementations declare android.software.device_admin, 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 preinstalled 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. N/A

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 and support third-party Quick Settings, they:

3.14. Media UI

If device implementations include non-voice-activated applications (the Apps) that interact with third-party applications through MediaBrowser or MediaSession, the Apps:

3.15. Instant Apps

If device implementations support Instant Apps, they 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:

3.18. Contacts

Android includes Contacts Provider APIs to allow applications to manage contact information stored on the device. Contact data that is entered directly into the device is typically synchronized with a web service, but the data MAY also only reside locally on the device. Contacts that are only stored on the device are referred to as local contacts.

RawContacts are "associated with" or "stored in" an Account when the ACCOUNT_NAME, and ACCOUNT_TYPE, columns for the raw contacts match the corresponding Account.name and Account.type fields of the account.

Default local account: An account for raw contacts that are only stored on the device and not associated with an Account in the AccountManager, which are created with null values for the ACCOUNT_NAME, and ACCOUNT_TYPE, columns.

Custom local account: An account for raw contacts that are only stored on the device and not associated with an Account in the AccountManager, which are created with non-null values for both the ACCOUNT_NAME and ACCOUNT_TYPE columns.

Device implementations:

If device implementations use a custom local account:

Start of requirements added in Android 17

SIM account(s): Account(s) for raw contacts that are mirrored from one or more of the physical SIM cards inserted into the device and that are not associated with an Account in the AccountManager.

Device implementations:

If device implementations use SIM account(s):

3.18.2. System Contacts Picker

Start of requirements added in Android 17

Android includes support for a System Contacts Picker that allows apps to access limited contact information without requiring broad access permissions.

If device implementations support Android contacts, they:

  • [C-1-1] MUST implement the System Contacts Picker (com.android.contactspicker) for apps targeting API level 37 or higher.

  • [C-1-2] MUST implement the Intent.ACTION_PICK_CONTACTS intent.

3.19. Language Settings

Device implementations:

3.20. Assistant-based experiences

Start of requirements added in Android 17

Android assistant development framework enables voice-forward control of Android apps. Using Assistant, users can use their voice to launch apps, perform tasks, access content, and more.

For this section, refer to the following classifications for specialized device implementations:

  • Fixed-volume: A fixed-volume device is one with volume controls but prevents apps from changing the audio stream level using standard AudioManager methods (for example, Android Automotive OS cars).

  • Full-volume: A full-volume device is one whose volume is locked at a full, unattenuated level and where software control is prevented (for example, a TV with external speakers).

  • Single-volume: A single-volume device is one that maps all audio streams to a single-volume stream resulting in volume adjustments affecting all audio streams uniformly (for example, a TV).

3.20.1. Assistant Audio Stream requirements

Start of requirements added in Android 17

An application holding the MANAGE_ASSISTANT_AUDIO permission:

  • [C-0-1] MUST be allowed to change STREAM_ASSISTANT volume programmatically.

If device implementations don't declare android.hardware.type.watch, and aren't fixed-volume, single-volume, or full-volume, they:

  • [C-1-1] MUST implement STREAM_ASSISTANT as a decoupled audio stream and MUST NOT be aliased to any other stream.

  • [C-1-2] MUST ensure that audio playback using AudioAttributes with USAGE_ASSISTANT has its playback volume controlled by STREAM_ASSISTANT.

  • [C-1-3] MUST ensure that for a given bluetooth headset, the STREAM_ASSISTANT volume index remains the same when the headset switches between A2DP and HFP audio profiles.

  • [C-1-4] MUST prevent any stream other than STREAM_ASSISTANT to be able to change the volume of STREAM_ASSISTANT or the attenuation applied to USAGE_ASSISTANT playback, while the MODE_ASSISTANT_CONVERSATION is active.

  • [C-1-5] MUST change STREAM_ASSISTANT stream volume and no other stream volumes, when volume is adjusted via device or peripheral (such as a bluetooth headset) volume keys and when:

    • MODE_ASSISTANT_CONVERSATION is active, and
    • There's no app-specific customization or active remote playback.
  • [C-1-6] MUST reflect any change to the Assistant volume in the user interface.

3.21. Companion Device Sync Features Support

Start of requirements added in Android 17

Android includes support for data sync features across companion devices.

If device implementations support the Do Not Disturb sync feature, they:

  • [C-1-1] MUST implement the ContextualModeManager#isModeSyncSupported() API.

  • [C-1-2] MUST sync the setting indicating that Do Not Disturb is enabled through the CompanionDeviceManager secure channel using a data format compatible with the default CompanionDeviceManagerService implementation.

  • [C-1-3] MUST enable this sync if ContextualModeManager#isModeSyncEnabled() returns true.

If device implementations support the Airplane mode sync feature, they:

  • [C-1-4] MUST sync the setting indicating that Airplane mode is enabled through the CompanionDeviceManager secure channel using a data format compatible with the default CompanionDeviceManagerService implementation.

  • [C-1-5] MUST enable this sync if Settings.Global.AIRPLANE_MODE_SYNC is enabled.

4. Application Packaging Compatibility

Devices implementations:

Start of requirements changed in Android 17

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 encoding the following audio formats and make them available to third-party apps:

Start of requirements added in Android 17
  • [C-1-4] MPEG-D USAC with MPEG-D DRC (Extended High Efficiency AAC)

All audio encoders MUST support:

Start of requirements added in Android 17

When encoding MPEG-D USAC with MPEG-D DRC (Extended High Efficiency AAC) audio:

  • [C-3-2] All bitstreams MUST contain the metadata sets conforming to the MPEG-D loudness control profile or to the MPEG-D dynamic range control profile, level 1 or higher, in accordance with ISO/IEC 23003-4.

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:

Start of requirements added in Android 17
  • [C-1-12] IAMF v1.0 containing audio streams encoded in AAC, FLAC, Opus, or PCM

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:

All audio decoders MUST support outputting:

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, then the following MUST be supported:

Start of requirements added in Android 17

All Handheld or Tablet devices that feature a Spatializer effect, and all Automotive and television devices:

  • [C-8-1] MUST support decoding of IAMF v1.0 containing audio streams encoded in AAC, FLAC, Opus, or PCM, and MUST present an IAMF decoder through the android.media.MediaCodec API.
  • [C-8-2] MUST ensure the IAMF decoder respects the channel mask being used to configure it via the KEY_CHANNEL_MASK key, using android.media.AudioFormat constants such asCHANNEL_OUT_5POINT1.

  • [C-8-3] MUST ensure the IAMF decoder advertises the active channel mask on the output format via the KEY_CHANNEL_MASK key, using android.media.AudioFormat constants such as CHANNEL_OUT_5POINT1.

If device implementations support audio decoders other than the default AAC audio decoder and are capable of outputting multi-channel audio (i.e. more than 2 channels) when fed compressed multi-channel content, then:

5.1.3. Audio Codecs Details

Start of requirements changed in Android 17
Format/Codec Details File Types/Container Formats to be supported G.711 μ-law and A-law Support for mono/stereo/5.1 content sampled at 8 kHz
  • output latency. The interval between when an application writes a frame of PCM-coded data and when the corresponding sound is presented to the environment at an on-device transducer or the signal leaves the device via a port and can be observed externally.

  • cold output latency. The time between starting an output stream and the presentation time of the first frame based on timestamps, when the audio output system has been idle and powered down prior to the request.

  • continuous output latency. The output latency for subsequent frames, after the device is playing audio.

  • input latency. The interval between when a sound is presented by environment to device at an on-device transducer or signal enters the device via a port and when an application reads the corresponding frame of PCM-coded data.

  • lost input. The initial portion of an input signal that is unusable or unavailable.

  • cold input latency. The time between starting the stream and when the first valid frame is received, when the audio input system has been idle and powered down prior to the request.

  • continuous input latency. The input latency for subsequent frames, while the device is capturing audio.

  • continuous round-trip latency. The sum of continuous input latency plus continuous output latency plus one buffer period. The buffer period allows time for the app to process the signal and time for the app to mitigate phase difference between input and output streams.

  • OpenSL ES PCM buffer queue API. The set of PCM-related OpenSL ES APIs within Android NDK.

  • AAudio native audio API. The set of AAudio APIs within Android NDK.

  • Timestamp. A pair consisting of a relative frame position within a stream and the estimated time when that frame enters or leaves the audio processing pipeline on the associated endpoint. See also AudioTimestamp.

  • glitch. A temporary interruption or incorrect sample value in the audio signal, typically caused by a buffer underrun for output, buffer overrun for input, or any other source of digital or analog noise.

  • mean absolute deviation (MAD). The average of the absolute value of the deviations from the mean for a set of values.

  • tap-to-tone latency (TTL), as measured by CTS Verifier, is the time between when the screen is tapped and when a tone generated as a result of that tap is heard on the speaker. This is averaged over 5 measurements using the AAudio native audio API for output.
  • round-trip latency (RTL), as measured by the CTS Verifier, is the Mean Continuous latency over 5 measurements, measured over a loopback path that feeds the output back to the input, using the AAudio native audio API.

    The loopback paths are:

  • FEATURE_AUDIO_LOW_LATENCY. The android.hardware.audio.low_latency feature is declared.

  • FEATURE_AUDIO_PRO. The android.hardware.audio.pro feature is declared.

  • MPC. Media Performance Class.

  • head-tracking latency. The time it takes from the head motion captured by the inertial measurement unit (IMU) to the headphone transducers' detection of the change in sound caused by this motion.

  • Start of requirements added in Android 17

    Device implementations:

    • [C-0-1] MUST ensure that when an application calls android.media.AudioManager.setCommunicationDevice() with a supported device (such as wired headsets, built-in speakers or ear-pieces, or USB headsets), the android.media.AudioManager.OnCommunicationDeviceChangedListener.onCommunicationDeviceChanged() callback is invoked with that audio device within 1500 ms of the setCommunicationDevice() call returning true.

    If device implementations declare android.hardware.audio.output, they MUST meet or exceed the following requirements:

    If device implementations include android.hardware.microphone, they MUST meet these input audio requirements:

    The following table defines the requirements for RTL for Handheld device implementations as defined in 2.2.1 that declare android.hardware.audio.output and android.hardware.microphone.

    Start of requirements changed in Android 17
    Device and Declarations RTL (ms) MAD (ms) Loopback Paths
    Handheld 200 25 speaker/mic, analog 3.5mm (if supported), USB (if supported)
    MPC 37 and higher 65 10 at least one path
    >= MPC_T (13) MPC 33 through MPC 36 80 15 at least one path
    FEATURE_AUDIO_LOW_LATENCY 50 10 at least one path
    FEATURE_AUDIO_PRO 25 5 at least one path
    FEATURE_AUDIO_PRO 20 5 analog (if supported)
    FEATURE_AUDIO_PRO 25 5 USB (if analog not supported)

    The following table defines the requirements for TTL for Handheld device implementations as defined in 2.2.1 that declare android.hardware.audio.output and android.hardware.microphone.

    Start of requirements changed in Android 17
    Device and Declarations TTL (ms)
    Handheld 250
    MPC 37 and higher 65
    >= MPC_T (13) MPC 33 through MPC 36 80
    MPC_S (12) MPC 31 100
    FEATURE_AUDIO_PRO 80

    If device implementations include support for spatial audio with head tracking and declare the PackageManager.FEATURE_AUDIO_SPATIAL_HEADTRACKING_LOW_LATENCY flag, they:

    5.7. Network Protocols

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

    For each codec and container format that a device implementation is required to support, the device implementation:

    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.8 for details on H264 AVC, MPEG2-4 SP,
    and MPEG-2.

    Audio codecs:

    • AAC
    See section 5.1.3 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.8 for details on H264 AVC
    MP4A-LATM RFC 6416 See section 5.1.3 for details on AAC and its variants
    H263-1998 RFC 3551
    RFC 4629
    RFC 2190
    See section 5.1.8 for details on H263
    H263-2000 RFC 4629 See section 5.1.8 for details on H263
    AMR RFC 4867 See section 5.1.3 for details on AMR-NB
    AMR-WB RFC 4867 See section 5.1.3 for details on AMR-WB
    MP4V-ES RFC 6416 See section 5.1.8 for details on MPEG-4 SP
    mpeg4-generic RFC 3640 See section 5.1.3 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 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:

    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:

    5.12. HDR Video

    Android 13 supports the HDR technologies as described in an upcoming document.

    Pixel Format

    If a video decoder advertises support for COLOR_FormatYUVP010, then:

    If a video decoder advertises support for COLOR_Format32bitABGR2101010, it:

    If a video encoder advertises support for COLOR_FormatYUVP010, it:

    If a video encoder advertises support for COLOR_Format32bitABGR2101010, it:

    HDR Capture Requirements

    For all video encoders that support HDR profiles, device implementations:

    If device implementations support HDR capture using the CamcorderProfile APIs they:

    HDR Editing Requirements

    If device implementations include video encoders that support HDR editing, they:

    If device implementation includes codecs that support FEATURE_HdrEditing, then those codecs:

    If device implementation includes codecs that support FEATURE_HdrEditing, then the device:

    HDR Display Requirements

    If device implementations receive buffer content encoded with ADATASPACE_TRANSFER_HLG, and that content is sent to the display through SurfaceControl.Transaction#setBuffer, they:

    6. Developer Tools and Options Compatibility

    6.1. Developer Tools

    Device implementations:

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

    If device implementations support adb connections to a host machine via Wi-Fi or Ethernet, they:

    If device implementations support adb connections to a host machine via Wi-Fi or Ethernet, and includes at least one camera, they:

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

    Start of requirements added in Android 17

    If device implementations set both system properties graphics.gpu.profiler.support and graphics.gpu.profiler.support.gpu_frequency to true, they:

    • [C-6-1] MUST report a GPU Frequency tracepoint as specified by the format power/gpu_frequency, as defined in power.proto.

    If device implementations set both system properties graphics.gpu.profiler.support and graphics.gpu.profiler.support.gpu_counters to true, they:

    • [C-7-1] MUST provide a Perfetto data producer for a data source named gpu.counters, queryable using: perfetto --query.

    • [C-7-2] MUST report GPU counters descriptions in compliance with the GPU counter trace packet proto.

    • [C-7-3] MUST report conformant values for the device's GPU counters following the gpu counter trace packet proto.

    • [C-7-4] MUST record the text descriptions for all enabled GPU Counters with no timestamp to perfetto trace.

    • [C-7-6] MUST provide a non-empty default set of GPU performance counters for profiling, as specified in GpuCounterSpec#select_by_default.

      • It MUST be possible to enable all of these default counters at the same time.
      • They MUST all emit values to Perfetto when enabled.
    • [C-7-7] MUST reflect the GPU utilization for at least one counter selected by default, using GpuCounterSpec#select_by_default.

    If device implementations set both system properties graphics.gpu.profiler.support and graphics.gpu.profiler.support.gpu_counters.period to true, they:

    • [C-8-1] MUST respect counter_period_ns for the GPU counters sampling rate. The supported sampling rate MUST be 1 ms or faster.

    • [C-SR-5] Are STRONGLY RECOMMENDED to support a sampling rate of 0.2 ms or faster.

    If device implementations set both system properties graphics.gpu.profiler.support and graphics.gpu.profiler.support.gpu_counters.groups to true, they:

    • [C-9-1] MUST have at least one counter in each of the following GPU counter groups, as specified by GpuCounterSpec: COMPUTE, FRAGMENTS, MEMORY, PRIMITIVES, and VERTICES.

    If device implementations set both system properties graphics.gpu.profiler.support and graphics.gpu.profiler.support.gpu_counters.groups to true, and the device supports ray tracing, they:

    • [C-10-1] MUST have a counter in the RAY_TRACING group.

    If device implementations set both system properties graphics.gpu.profiler.support and graphics.gpu.profiler.support.gpu_counters.zeroes_optimization to true, they:

    • [C-11-1] Within the same Perfetto trace session, the GPU counters MUST only report zero values if either the preceding or following reported value is non-zero.

    If device implementations set both system properties graphics.gpu.profiler.support and graphics.gpu.profiler.support.render_stages to true, they:

    • [C-12-1] MUST provide a Perfetto data producer for a data source named gpu.renderstages, queryable using perfetto --query.

    • [C-12-2] MUST report conformant values for GPU render stages following the GPU render stage event proto.

    If device implementations set both system properties graphics.gpu.profiler.support and graphics.gpu.profiler.support.render_stages.queue_submit to true, they:

    • [C-13-1] For each Vulkan queue submission call, MUST have the Vulkan driver emit a Perfetto trace event according to the Vulkan API event message specification.
      • This event MUST contain a unique, monotonically increasing submission_id that matches the submission_id in the corresponding GPU render stage event.

    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 displays and configurations. An Android-compatible display is a display screen that implements all of the behaviors and APIs described in Android Developers - Screen compatibility overview, this section (7.1) and its subsections, as well as any additional device-type specific behaviors documented in section 2 of this CDD.

    Device implementations:

    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 screens capable of the UI_MODE_TYPE_NORMAL size configuration and use physical display(s) with rounded corners to render these screens, they:

    If device implementations are only capable of NO_KEYS keyboard configuration, and intend to report support for the UI_MODE_TYPE_NORMAL UI mode configuration, they:

    For details on correctly implementing the sidecar or extension APIs refer to the public documentation of Window Manager Jetpack.

    7.1.1.2. Screen Aspect Ratio

    This section was removed in Android 14.

    7.1.1.3. Screen Density

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

    Device Implementations:

    If device implementations provide an affordance to change the display size of the device, they:

    7.1.2. Display Metrics

    If device implementations include the Android-compatible display(s) or video output to the Android-compatible display screen(s), 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:

    The OpenGL ES dEQP tests are partitioned into a number of test lists, each with an associated date/version number. These are in the Android source tree at external/deqp/android/cts/main/glesXX-master-YYYY-MM-DD.txt. A device that supports OpenGL ES at a self-reported level indicates that it can pass the dEQP tests in all test lists from this level and earlier.

    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:

    The Vulkan dEQP tests are partitioned into a number of test lists, each with an associated date/version. These are in the Android source tree at external/deqp/android/cts/main/vk-master-YYYY-MM-DD.txt. A device that supports Vulkan at a self-reported level indicates that it can pass the dEQP tests in all test lists from this level and earlier.

    If device implementations include support for Vulkan, they:

    Start of requirements changed in Android 17

    Start of requirements changed in Android 17

    Start of requirements changed in Android 17

    If device implementations include support for Vulkan, they:

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

    Start of requirements changed in Android 17

    If device implementations include support for Vulkan 1.1 and declare any of the Vulkan feature flags described here or higher, they:

    7.1.4.3. RenderScript

    Device implementations:

    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 (320 dp 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 an Android-compatible display. Devices MUST support all of these APIs as defined by the Android SDK unless specifically allowed in this document.

    All of a device implementation's Android-compatible displays:

    7.1.7. Secondary Displays

    Android includes support for secondary Android-compatible displays 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:

    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:

    If device implementations provide the Assist function, they:

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

    If the navigation function is provided as an on-screen, gesture-based action:

    If a navigation function is provided from anywhere on the left and right edges of the current orientation of the screen:

    If the back navigation function is provided and the user cancels the Back gesture, then:

    If the back navigation function is provided but the foreground application does NOT have an OnBackInvokedCallback registered, then:

    If device implementations provide support for the system API setNavBarMode to allow any system app with android.permission.STATUS_BAR permission to set the navigation bar mode, then 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) on a primary Android-compatible display, they:

    If device implementations include a touchscreen that can track more than a single touch on a primary Android-compatible display, they:

    If device implementations rely on an external input device such as mouse or trackball (i.e. not directly touching the screen) for input on a primary Android-compatible display 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

    Device implementations:

    If device implementations embed a controller or ship with a separate controller in the box that would provide means to input all the events listed in the below tables, 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)
    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.

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

    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:

    If device implementations include a particular sensor type that has a corresponding API for third-party developers and the sensor only reports one value, then device implementations:

    If device implementations include a particular sensor type which supports SensorAdditionalInfo#TYPE_VEC3_CALIBRATION and the sensor is exposed to third-party developers, they:

    If device implementations include a combination of 3-axis accelerometer, a 3-axis gyroscope sensor, or a magnetometer sensor, they are:

    7.3.1. Accelerometer

    Device implementations:

    If device implementations include an accelerometer, they:

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

    If device implementations include an accelerometer with less than 3 axes, 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 3-axis gyroscope sensor, they:

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

    7.3.2. Magnetometer

    Device implementations:

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

    If device implementations include a 3-axis magnetometer, an accelerometer sensor, and a 3-axis 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:

    7.3.4. Gyroscope

    Device implementations:

    If device implementations include a gyroscope, they:

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

    If device implementations include a gyroscope with less than 3 axes, they:

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

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

    7.3.5. Barometer

    Device implementations:

    If device implementations include a barometer, they:

    Device implementations that declare the system property sensor.barometer.high_quality.implemented:

    7.3.6. Thermometer

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

    If device implementations include a thermometer sensor that measures a temperature other than ambient temperature, such as CPU temperature, they:

    If device implementations include a sensor for monitoring skin temperature, they:

    7.3.7. Photometer

    7.3.8. Proximity Sensor

    If device implementations include a proximity sensor and they report only a binary "near" or "far" reading, 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

    For additional background on Measuring Biometric Unlock Security, please see Measuring Biometric Security documentation.

    If device implementations include a secure lock screen, they:

    Biometric sensors can be classified as Class 3 (formerly Strong),

    Class 2 (formerly Weak), or Class 1 (formerly Convenience) based on their spoof and imposter acceptance rates, and on the security of the biometric pipeline. This classification determines the capabilities the biometric sensor has to interface with the platform and with third-party applications. Sensors need to meet additional requirements as detailed below if they wish to be classified as either Class 1, Class 2 or Class 3. Both Class 2 and Class 3 biometrics get additional capabilities as detailed below.

    If device implementations make a biometric sensor available to third-party applications via android.hardware.biometrics.BiometricManager, android.hardware.biometrics.BiometricPrompt, and android.provider.Settings.ACTION_BIOMETRIC_ENROLL, they:

    If device implementations support passive biometrics, they:

    If device implementations have multiple biometric sensors, they:

    In order for device implementations to allow access to keystore keys to third-party applications, they:

    If device implementations wish to treat a biometric sensor as Class 1 (formerly Convenience), they:

    If device implementations wish to treat a biometric sensor as Class 2 (formerly Weak), they:

    If device implementations wish to treat a biometric sensor as Class 3 (formerly Strong), they:

    If device implementations contain an under-display fingerprint sensor (UDFPS), they:

    7.3.11. Pose Sensor

    Device implementations:

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

    7.3.12. Hinge Angle Sensor

    If device implementations support a hinge angle sensor, they:

    7.3.13. IEEE 802.1.15.4 (UWB)

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

    Passing the relevant conformance and certification tests defined by standard organizations, including FIRA, CCC and CSA helps ensure 802.1.15.4 functions correctly.

    7.3.14. Custom sensors

    To help provide a differentiated experience, device implementations MAY include additional sensors not covered by Android or Wear OS, which preloaded apps may access.

    For such sensors, the sensor ID:

    If the custom sensor is intended for health or fitness related purposes, it:

    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, or establishing mobile data via a mobile (e.g., GSM, CDMA, LTE, NR) GSM or CDMA network. A device supporting "Telephony" may choose to offer some or all of the call, messaging and data services as fits the product.

    If device implementations include GSM or CDMA telephony, they:

    If device implementations do not include telephony hardware, they:

    If device implementations support eUICCs or eSIMs/embedded SIMs and include a proprietary mechanism to make eSIM functionality available for third-party developers, they:

    If device implementations don't set the system property ro.telephony.iwlan_operation_mode to legacy, they:

    If device implementations support a single IP Multimedia Subsystem (IMS) registration for both multimedia telephony service (MMTEL) and rich communication service (RCS) features and are expected to comply with cellular carrier requirements regarding using a single IMS registration for all IMS signalling traffic, they:

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

    If the device implementations report the android.hardware.telephony feature and provide a system status bar, then:

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

    If device implementations report the android.hardware.telephony feature and all active, non-opportunistic subscriptions that share a group UUID are disabled, physically removed from the device, or marked opportunistic, then the device:

    If device implementations include GSM telephony but not CDMA telephony, they:

    If the device implementations support eUICCs with multiple ports and profiles, they:

    Start of requirements added in Android 17

    If device implementations support cellular data connectivity, they:

    • [C-SR-11] Are STRONGLY RECOMMENDED to declare the android.hardware.telephony.data feature.

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

    • [C-12-1] MUST support at least two simultaneous cellular data network connections, such as PDP contexts, PDN connections, and DN connections.

    7.4.1.1. Number Blocking Compatibility

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

    7.4.1.2. Telecom API

    Start of requirements added in Android 17

    If device implementations declare android.hardware.microphone and android.hardware.audio.output and they don't declare android.hardware.type.television, they:

    • [C-0-1] MUST declare the feature flag android.software.telecom.

    • [C-0-2] MUST implement the telecom framework.

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

    7.4.1.3. Cellular NAT-T Keepalive Offload

    Device implementations:

    If device implementations include support for Cellular keepalive offload and exposes the functionality to third-party apps, they:

    If device implementations do not include support for cellular keepalive offload, 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 include support for Wi-Fi power save mode as defined in IEEE 802.11 standard, 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, 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, they:

    7.4.2.4. Wi-Fi Passpoint

    If device implementations include support for 802.11 (Wi-Fi) they:

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

    If a global Passpoint disable user control switch is provided, implementations:

    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, they:

    7.4.2.6. Wi-Fi Keepalive Offload

    Device implementations:

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

    If device implementations do not include support for Wi-Fi keepalive offload, they:

    7.4.2.7. Wi-Fi Easy Connect (Device Provisioning Protocol)

    Device implementations:

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

    7.4.2.8. Enterprise Wi-Fi Server Certificate Validation

    If the Wi-Fi server certificate is not validated or the Wi-Fi server domain name is not set, device implementations:

    7.4.2.9. Trust On First Use (TOFU)

    If device implementations support Trust on first usage (TOFU) and allow the user to define WPA/WPA2/WPA3-Enterprise configurations, they:

    7.4.2.10. Wi-Fi Proximity Detection (Peer-to-Peer Proximity Ranging)

    Start of requirements added in Android 17

    If device implementations include support for Wi-Fi Proximity Detection, then they:

    • [C-1-1] MUST include support for Proximity Detection.

    • [C-1-2] MUST declare the android.hardware.wifi.rtt feature flag.

    • [C-1-3] MUST have the WifiRttManager#getProximityDetectionCharacteristics() method return non-null.

    • [C-1-4] MUST implement the WifiRttManager continuous ranging APIs.

    • [C-1-5] MUST support Wi-Fi and Wi-Fi Proximity Detection operations concurrently.

    • [C-1-6] MUST be accurate to within 2 meters at 80 MHz bandwidth at the 68th percentile (as calculated with the Cumulative Distribution Function).

    • [C-1-7] MUST perform Proximity Detection (PD) ranging in the highest available frequency band (6 GHz, 5 GHz, or 2.4 GHz) using the maximum supported bandwidth in the following order of priority: 160 MHz, 80 MHz, 40 MHz, and 20 MHz.

    • [C-SR-1] Are STRONGLY RECOMMENDED to report it accurately to within 1.5 meters at 80 MHz bandwidth at the 68th percentile (as calculated with the Cumulative Distribution Function).

    • [C-SR-2] Are STRONGLY RECOMMENDED to support 802.11az NTB ranging.

    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 (BLE), they:

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

    If device implementations include support for Bluetooth LE and Hearing Aids Profile, as described in Hearing Aid Audio Support Using Bluetooth LE, they:

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

    If device implementations include support for Bluetooth or Bluetooth Low Energy and the app manifest does not include a declaration from the developer stating that they are not deriving location from Bluetooth, they:

    If device implementations return true for the BluetoothAdapter.isLeAudioSupported() API, they:

    If device implementations return true for the BluetoothAdapter.isLeAudioBroadcastSourceSupported() API, they:

    If device implementations return true for the BluetoothAdapter.isLeAudioBroadcastAssistantSupported() API, they:

    If device implementations declare FEATURE_BLUETOOTH_LE, they:

    If device implementations declare FEATURE_BLUETOOTH_LE_CHANNEL_SOUNDING, they:

    If device implementations declare FEATURE_BLUETOOTH_LE, they:

    It is STRONGLY RECOMMENDED to follow the measurement setup steps specified in Presence Calibration Requirements.

    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. Networking protocols and APIs

    7.4.5.1. Minimum Network Capability

    Device implementations:

    7.4.5.2. IPv6

    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.5.3. Captive Portals

    A captive portal refers to a network that requires sign-in in order to obtain internet access.

    If device implementations provide a complete implementation of the android.webkit.Webview API, 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 third-party apps, they:

    7.4.9. UWB

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

    7.5. Cameras

    If device implementations include at least one camera, they:

    Start of requirements added in Android 17
    • [C-1-6] MUST label each camera device type using the CameraCharacteristics.INFO_DEVICE_TYPE field as either BUILT_IN, EXTERNAL, or VIRTUAL. MUST also label each camera output frame using the CaptureResult.INFO_DEVICE_TYPE field.
      Ensuring CaptureResult.INFO_DEVICE_TYPE is correctly labeled is especially important in situations where a camera ID is dynamically remapped to a different camera source.

    If device implementations include at least one camera, and the pre-installed camera application handles the intents MediaStore.ACTION_MOTION_PHOTO_CAPTURE or MediaStore.ACTION_MOTION_PHOTO_CAPTURE_SECURE, they:

    If device implementations support HDR 10-bit output capability, they:

    For Logical camera devices which support 10-bit HDR that implement the android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO API, they:

    7.5.1. Rear-Facing Camera

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

    Device implementations:

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

    Start of requirements removed in Android 17

    If the camera includes a flash:

    7.5.2. Front-Facing Camera

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

    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

    An external camera is a camera that can be physically attached or detached from the device implementation at any time and can face any direction; such as USB cameras.

    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:

    If device implementations provide a proprietary camera API to 3rd-party apps, they:

    Start of requirements added in Android 17

    If device implementations tune their third-party camera pipeline to be in parity with their built-in camera pipeline for the primary front-facing and the primary rear-facing camera, they:

    • [C-2-1] MUST declare the ro.camera.default_app_social_media_parity_enabled system property.

    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 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

    Start of requirements added in Android 17

    Definitions

    • USB host mode is when a device implementation acts as the USB host, provides power on the bus, and communicates with peripherals.

    • USB device mode, also known as peripheral mode, occurs when a device implementation acts as a USB peripheral, connects to a host via an upstream port, and responds to requests from the host.

    • USB port is a mechanism for providing USB connectivity, either a physical USB receptacle, or a non-standard interface (for example, pogo pins).

    If device implementations have a USB port, they:

    7.7.1. USB device mode

    Start of requirements changed in Android 17

    If device implementations include a USB port supporting peripheral device mode:

    • [C-SR-1] The port SHOULD use micro-B, micro-AB or Type-C USB form factor. Existing and new Android devices are STRONGLY RECOMMENDED to meet these requirements so they will be able to upgrade to the future platform releases.

    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.7.3. USB Power Delivery

    Start of requirements added in Android 17

    If device implementations include a USB Type-C port, they:

    • [C-SR-1] are STRONGLY RECOMMENDED to implement the kernel's USB Type-C Connector Class and implement the necessary nodes that describe USB Type-C connections and power and data roles. Refer to the Android USB Type-C Documentation for implementation details.

    If device implementations include a USB Type-C port and support power delivery, they:

    • [C-SR-2] Are STRONGLY RECOMMENDED to implement all nodes that describe USB Power Delivery. Refer to the Android USB PD Documentation for implementation details.

    If device implementations include a USB Type-C port and support alternate modes, they:

    • [C-SR-3] Are STRONGLY RECOMMENDED to implement the Alternate Modes and identity related properties of the kernel's USB Type-C Connector Class. Refer to the Android USB Type-C Documentation for implementation details.

    If device implementations include a USB Type-C port and support the Thunderbolt 3 alternate mode, they:

    • [C-SR-4] Are STRONGLY RECOMMENDED to implement the ability to override the current alternate mode via the type-C connector class.

    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, Wi-Fi, 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.2.2. Digital Audio Ports

    See Section 2.2.1 for device-specific requirements.

    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.8.4. Signal Integrity

    Device implementations:

    The test requires an audio loopback dongle, used directly in a 3.5mm jack, and/or in combination with a USB-C to 3.5mm adapter. All audio output ports SHOULD be tested.

    OboeTester currently supports AAudio paths, so the following combinations SHOULD be tested for glitches using AAudio:

    Perf Mode Sharing Out Sample Rate In Chans Out Chans
    LOW_LATENCY EXCLUSIVE UNSPECIFIED 1 2
    LOW_LATENCY EXCLUSIVE UNSPECIFIED 2 1
    LOW_LATENCY SHARED UNSPECIFIED 1 2
    LOW_LATENCY SHARED UNSPECIFIED 2 1
    NONE SHARED 48000 1 2
    NONE SHARED 48000 2 1
    NONE SHARED 44100 1 2
    NONE SHARED 44100 2 1
    NONE SHARED 16000 1 2
    NONE SHARED 16000 2 1

    A reliable stream SHOULD meet the following criteria for Signal to Noise Ratio (SNR) and Total Harmonic Distortion (THD) for 2000 Hz sine.

    Transducer THD SNR
    primary built-in speaker, measured using an external reference microphone < 3.0% >= 50 dB
    primary built-in microphone, measured using an external reference speaker < 3.0% >= 50 dB
    built-in analog 3.5 mm jacks, tested using loopback adapter < 1% >= 60 dB
    USB adapters supplied with the phone, tested using loopback adapter < 1.0% >= 60 dB

    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:

    7.10. Haptics

    Devices intended to be hand-held or worn may include a general purpose haptic actuator, available to applications for purposes including getting attention through ringtones, alarms, notifications, as well as general touch feedback.

    If device implementations DO NOT include such a general purpose haptic actuator, they:

    If device implementations DO include at least one such general purpose haptic actuator, they:

    If device implementations follow the haptic constants mapping, they:

    7.11. Media Performance Class

    The media performance class of the device implementation can be obtained from the android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS API. Requirements for media performance class are defined for each Android version starting with R (version 30). The special value of 0 designates that the device is not of a media performance class.

    If device implementations return non-zero value for android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, they:

    In other words, media performance class in Android T is only defined for handheld devices at version T, S or R.

    See section 2.2.7 for device-specific requirements.

    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 (e.g. App Standby Bucket, Doze) or extend the features to apply stronger restrictions than the RESTRICTED App Standby Bucket, they:

    If device implementations extend power management features that are included in AOSP and that extension applies more stringent restrictions than the Rare App Standby Bucket, refer to section 3.5.1.

    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 S4 power states as defined by the ACPI, they:

    If device implementations implement S3 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:

    8.6. App Memory Limits

    Start of requirements added in Android 17

    MemoryLimiter, a new component of ActivityManagerService, and default app memory limits, which are derived from available physical memory, will impose limits on the amount of DRAM used per individual app process. This restriction applies to all memory allocated within the app process, ensuring that the limits function as critical contractual behavior with app developers.

    Device implementations:

    • [C-0-1] MUST NOT use any methods, allowlists, or policies to bypass the runtime memory limits set for applications.

    9. Security Model Compatibility

    Device implementations:

    If device implementations declare the android.hardware.security.model.compatible feature, they:

    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:

    Device implementations:

    More specifically, device implementations:

    The only exceptions to the Android location permission properties above are for apps not accessing Location to derive or identify user location; specifically:

    Permissions can be marked as restricted altering their behavior.

    If devices include data sensors exposing health-related biometrics such as heart rate or skin temperature, those biometrics:

    If devices report android.software.managed_users, they:

    If device implementations provide a user affordance to choose which apps can draw on top of other apps with an activity that handles the ACTION_MANAGE_OVERLAY_PERMISSION intent, they:

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

    If device implementations pre-install any packages that hold any of the System UI Intelligence, System Ambient Audio Intelligence, System Audio Intelligence, System Notification Intelligence, System Text Intelligence, or System Visual Intelligence roles, the packages:

    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 and clone user profiles with partial isolation (i.e. single additional user profile of type android.os.usertype.profile.CLONE).

    If device implementations include support for multiple users, they:

    If device implementations include support for multiple users, then for all users except users specifically created for running dual instances of the same app, they:

    Device implementations MAY create a single additional user profile of type android.os.usertype.profile.CLONE against the primary user (and only against the primary user) for the purpose of running dual instances of the same app. These dual instances share partially isolated storage, are presented to the end user in the launcher at the same time and appear in the same recents view. For example, this could be used to support the user installing two separate instances of a single app on a dual-SIM device.

    If device implementations create the additional user profile discussed above, they:

    If device implementations create the additional user profile discussed above, they:

    If device implementations create the additional user profile discussed above, they include at least one camera, and the pre-installed camera application handles the intents MediaStore.ACTION_MOTION_PHOTO_CAPTURE or MediaStore.ACTION_MOTION_PHOTO_CAPTURE_SECURE, 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 that is capable of supporting SELinux, they:

    Start of requirements changed in Android 17

    If device implementations use kernel other than Linux or Linux without SELinux, they:

    If device implementations use I/O devices capable of DMA, they:

    Android contains multiple defense-in-depth features that are integral to device security. In addition, Android focuses on reducing key classes of common bugs that contribute to poor quality and security.

    In order to reduce memory bugs, device implementations:

    If device implementations use an Arm TrustZone-based TEE, they:

    A Memory Safety technology is a technology that mitigates at least the following classes of bugs with a high (> 90%) probability in applications that use the android:memtagMode manifest option:

    Device implementations:

    If device implementations set the system property ro.arm64.memtag.bootctl_supported to true, they:

    If a device declares android.hardware.telephony, supports the radio capability CAPABILITY_USES_ALLOWED_NETWORK_TYPES_BITMASK, and includes a cellular modem that supports 2G connections, the device implementation:

    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:

    Device implementations:

    If device implementations include functionality in the system that either captures the contents displayed on the screen and/or records the audio stream played on the device other than via the System API ContentCaptureService, or other proprietary means described in Section 9.8.6 OS-level and ambient data, they:

    If device implementations include a component enabled out-of-box, capable of recording ambient audio and/or record the audio played on the device to infer useful information about user's context, they:

    A "microphone indicator" refers to a view on screen, which is constantly visible to the user and cannot be obscured, which users understand as a microphone is in use(through unique text, color, icon, or some combination).

    A "camera indicator" refers to a view on screen, which is constantly visible to the user and cannot be obscured, which users understand as a camera is in use (through unique text, color, icon, or some combination).

    After the first one second displayed, an indicator can change visually, such as becoming smaller, and is not required to show as originally presented and understood.

    The microphone indicator may be merged with an actively displayed camera indicator, provided that text, icons, or colors indicate to the user that microphone use has begun.

    The camera indicator may be merged with an actively displayed microphone indicator, provided that text, icons, or colors indicate to the user that the camera use has begun.

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

    If device implementations declare android.hardware.camera.any, 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.8.5. Device Identifiers

    Device implementations:

    9.8.6. OS-level and ambient data protector

    Start of requirements changed in Android 17

    Android, through the System APIs, supports a mechanism for device implementations to capture the following sensitive data:

    • Any data captured by DynamicInstrumentationEventService

    Start of requirements changed in Android 17

    If device implementations capture or share any of the sensitive data above, they: without clear, discrete, user intent or a user-visible privacy indicator, the data MUST be processed within a protected execution environment. This environment:

    • [C-1-3] MUST NOT send such data off the device except under one of the following conditions:

      • When explicitly initiated by user intent * for the specific computation every time the data is shared.

      • When using a privacy-preserving mechanism such as, differential privacy technologies such as RAPPOR or confidential federated computations.

      • When data is processed in a protected execution environment that protects it from the service provider and infrastructure, such as no admin access, confidential VM, remote attestation, no private data egress, disabled logging, IP blinding, and encryption.

        • Any implementation using this method must provide an affordance for users to opt-out.

    • [C-1-3] MAY process data through a trusted computing base cloud environment that protects it from the service provider and infrastructure (e.g., no administrator access, confidential VM, remote attestation, no private data egress, disabled logging, IP blinding, and encryption). Any implementation using this method:
      • MUST provide an affordance for users to opt out, and
      • MUST provide users with a method for generating accessible and comprehensive logs detailing data ingress and egress from the environment.

    • [C-1-4] MUST NOT associate such data with any user identity (such as Account) on the device, except with explicit user consent each time the data is associated.

    • [C-1-4] MAY show this data on system owned UI surfaces.

    Start of requirements added in Android 17
    • [C-1-8] MUST provide a method for generating accessible and comprehensive logs detailing data ingress and egress from the environment.

    • [C-1-9] MUST NOT have direct internet access.

    • [C-1-10] MAY show UI remotely as long as no data is made visible to the host apk showing the UI.

    • [C-1-11] MUST keep the services separate from other system components (e.g. not binding the service or sharing process IDs with implementations not in the protected execution environment).

    • [C-1-12] MUST only allow sensitive data to exit when:

      • Explicitly initiated by user intent* for the specific computation every time the data is shared; OR
      • Using a privacy-preserving mechanism (e.g., differential privacy technologies such as RAPPOR / confidential federated computations).
    • [C-1-13] MUST only allow exfiltration of sensitive data through:

      • A system service that is allowlisted in the PCCSandbox system service AND follows the requirements for a protected execution environment (9.8.6) itself, OR
      • A designated Private Compute Core (PCC) Gateway APK (defined in 9.8.15).
    • [C-1-14] MUST NOT perform cloud back-ups of data inferred from sensitive data unless end-to-end encrypted (e.g. using Android Backup Service).

    Start of requirements changed in Android 17

    If device implementations include a service that implements the System API ContentCaptureService, AppSearchManager.index, DynamicInstrumentationEventService, or any proprietary service that captures the data as described as above, they:

    9.8.7. Clipboard Access

    Device implementations:

    9.8.8. Location

    Location includes information in the Android Location class( such as Latitude, Longitude, Altitude), as well as identifiers that can be converted to Location. Location can be as fine as DGPS (Differential Global Positioning System) or as coarse as country level locations (like the country code location - MCC - Mobile Country Code).

    The following is a list of location types that either directly derive a user's location or can be converted to a user's location. This is not a comprehensive list, but should be used as an example on what Location can directly or indirectly be derived from:

    As a primary point of reference, see the Android APIs which require ACCESS_FINE_Location or ACCESS_COARSE_Location permissions.

    Device implementations:

    Start of requirements added in Android 17

    When a non-system, foreground app is accessing a device's precise location, the device:

    • [C-SR-1] Is STRONGLY RECOMMENDED to display an indicator visible to the user.

    9.8.9. Installed apps

    Android apps targeting API level 30 or higher cannot see details about other installed apps by default (see Package visibility in the Android SDK documentation).

    Device implementations:

    9.8.10. Connectivity Bug Report

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

    If device implementations include additional information (e.g., vendor logs) in bug reports and that information has privacy/security/battery/storage/memory impact, they:

    9.8.11. Data blobs sharing

    Android, through BlobStoreManager allows apps to contribute data blobs to the System to be shared with a selected set of apps.

    If device implementations support shared data blobs as described in the SDK documentation, they:

    9.8.12. Music Recognition

    Android, through the System API MusicRecognitionManager, supports a mechanism for device implementations to request music recognition, given an audio record, and delegate the music recognition to a privileged app implementing the MusicRecognitionService API.

    If device implementations include a service that implements the System API MusicRecognitionManager or any proprietary service that streams audio data as described as above, they:

    If device implementations of MusicRecognitionManagerService or MusicRecognitionService store any audio data captured, they:

    9.8.13. SensorPrivacyManager

    If device implementations provide the user a software affordance to turn off the camera and/or microphone input for the device implementation, they:

    9.8.14. N/A

    Start of requirements changed in Android 17

    9.8.15. Private Compute Core and Gateway Application implementations

    Start of requirements changed in Android 17

    Android, through a set of delegate APIs provides a mechanism to process secure OS-level and ambient data. Such processing can be delegated to a preinstalled apk with privileged access and reduced communication capabilities, known as a Sandboxed API Implementation.

    Device implementations that include applications performing on-device processing of sensitive data described in section 9.8.6 (OS-level and ambient data) are STRONGLY RECOMMENDED to use the Private Compute Core (PCC) framework described below.

    Any Sandboxed API implementation components in the PCC environment:

    • [C-0-1] MUST NOT request the INTERNET permission.

    • [C-0-1] MUST be declared with an android:isPrivateComputeCoreProcess="true" attribute in its manifest declaration.

    • [C-0-2] MUST only access the internet through structured APIs backed by publicly available open-source implementations using privacy-preserving mechanisms, or indirectly via Android SDK APIs. The privacy-preserving mechanism is defined as "those which allow only analysis in aggregate and prevent matching of logged events or derived outcomes to individual users", to prevent any per-user data being introspectable (e.g., implemented using a differential privacy technology such as RAPPOR).

    • [C-0-2] MUST be preloaded on the device system image.

    • [C-0-9] MUST run in a dedicated process with a unique, framework-assigned UID, separate from the main application process and other sandboxed components.

    Start of requirements added in Android 17

    Any network access required by the PCC environment components MUST be proxied through a designated APK acting as a PCC Gateway Application. The designated component(s):

    • [C-1-1] MUST be granted the android.permission.PROVIDE_PRIVATE_COMPUTE_SERVICES privileged permission. This permission designates the application as a PCC Gateway Application.

    • [C-1-2] MUST have its source code made available for public verifiability.

    • [C-1-3] MUST utilize privacy-preserving mechanisms for any data egress, as defined in section 9.8.6

    • [C-1-4] MUST support the PCC framework's audit mode, which includes logging network requests, server endpoints, and other data relevant for verifying privacy-preserving behavior when enabled

    9.8.16. Continuous Audio and Camera data

    If device implementations capture any of the data as described in section 9.8.2 or section 9.8.6, and if such implementations make use of Audio data obtained in background (continuously) through AudioRecord, SoundTrigger, or other Audio APIs OR Camera data obtained in background (continuously) through CameraManager or other Camera APIs, they:

    If device implementations receive Camera or Microphone data from a remote wearable device and the data is accessed in an unencrypted form outside of Android OS, sandboxed implementation or a sandboxed functionality built by WearableSensingManager, they:

    If devices provide capability to engage with a Digital Assistant Application without the assigned keyword (either handling generic user queries, or analyzing user presence through camera), they:

    9.8.17. Telemetry

    Android stores system and app logs using StatsLog APIs. These logs are managed via StatsManager APIs which can be used by privileged system applications.

    StatsManager also provides a way to collect data categorized as privacy sensitive from devices with a privacy preserving mechanism. In particular, StatsManager::query API provides the ability to query restricted metric categories defined in StatsLog.

    Any implementation querying and collecting restricted metrics from StatsManager:

    9.8.18. Agentic Functions Privacy

    Start of requirements added in Android 17

    Device implementations:

    • [C-0-1] MUST ensure any components executing AppFunctions hold either the EXECUTE_APP_FUNCTIONS or the EXECUTE_APP_FUNCTIONS_SYSTEM permission and are preloaded on the device.

    • [C-0-2] MUST invoke an AppFunction call only as a direct result of an explicit user action, and this MUST clearly indicate to the user both which application is invoked and the primary action to be performed within that application.

    • [C-0-3] MUST NOT proxy or modify a third-party app's request to discover or execute AppFunctions, unless [C-0-1] and [C-0-2] are met.

    • [C-0-4] MUST NOT allow sensitive OS-level or ambient data (as defined in 9.8.6 OS-level and ambient data protections) or its derivatives, to be used by system components to generate or parameterize nudges, unless the system components operate in a Protected Execution Environment as defined in 9.8.6.

    9.9. Data Storage Encryption

    All devices MUST meet the requirements of section 9.9.1. Devices which launched on an API level earlier than that of this document are exempted from the requirements of sections 9.9.2 and 9.9.3; instead they MUST meet the requirements in section 9.9 of the Android Compatibility Definition document corresponding to the API level on which the device launched.

    9.9.1. Direct Boot

    Device implementations:

    9.9.2. Encryption requirements

    Device implementations:

    9.9.3. Encryption Methods

    If device implementations are encrypted, they:

    9.9.3.1. File Based Encryption with Metadata Encryption

    If device implementations use File Based Encryption with Metadata Encryption, they:

    The upstream Android Open Source project provides a preferred implementation of File Based Encryption based on the Linux kernel "fscrypt" encryption feature, and of Metadata Encryption based on the Linux kernel "dm-default-key" feature.

    9.9.3.2. Per-User Block-Level Encryption

    If device implementations use per-user block-level encryption, they:

    Per-user block-level encryption can be implemented using the Linux kernel "dm-crypt" feature over per-user partitions.

    9.9.4. Resume on Reboot

    Resume on Reboot allows unlocking the CE storage of all apps, including those that do not yet support Direct Boot, after a reboot initiated by an OTA. This feature enables users to receive notifications from installed apps after the reboot.

    An implementation of Resume-on-Reboot must continue to ensure that when a device falls into an attacker's hands, it is extremely difficult for that attacker to recover the user's CE-encrypted data, even if the device is powered on, CE storage is unlocked, and the user has unlocked the device after receiving an OTA. For insider attack resistance, we also assume the attacker gains access to broadcast cryptographic signing keys.

    Specifically:

    By way of example, a device implementation that implements and complies with all of the descriptions found here will be compliant with [C-0-1].

    9.10. Device Integrity

    The following requirements ensure 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 cannot 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:

    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.

    If device implementations have the ability to verify file content on the per-page basis, then they:

    If device implementations are already launched without the ability to verify file content against a trusted key on an earlier Android version and can not add support for this feature with a system software update, they MAY be exempted from the requirement. The upstream Android Open Source project provides a preferred implementation of this feature based on the Linux kernel fs-verity feature.

    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:

    Start of requirements changed in Android 17

    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.

    Start of requirements added in Android 17
    • [C-SR-1] Are STRONGLY RECOMMENDED to enforce a minimum time interval between unique failed attempts for their primary authentication methods (such as PIN, pattern, or password), based on the following:

      Number of unique failed attempts Minimum timeout
      0-4 0
      5 1 minute
      6 5 minutes
      7 15 minutes
      8 30 minutes
      9 90 minutes
      10 4 hours
      11 12 hours
      12 24 hours
      13 4 days
      14 13 days
      15 41 days
      16 123 days
      17 1 year
      18 3 years
      19 9 years

    9.11.1. Secure Lock Screen, Authentication, and Virtual Devices

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

    Device implementations:

    If device implementations set a numerical PIN as the recommended primary authentication method, then:

    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 requirements for Class 3 (formerly Strong) 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:

    If device implementations allow applications to create secondary virtual displays and do not support associated input events, such as via VirtualDeviceManager, they:

    If device implementations allow applications to create secondary virtual displays and support associated input events, such as via VirtualDeviceManager, they:

    When device implementations allow the user to transfer the primary authentication knowledge-factor from a source device to a target device, such as for initial setup of the target device, they:

    If device implementations have a secure lock screen and include one or more trust agents, which call the TrustAgentService.grantTrust() System API with the FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE flag, they:

    Start of requirements changed in Android 17

    .

    If device implementations allow applications to create secondary virtual displays and support associated input events such as via VirtualDeviceManager and the displays are not marked with VIRTUAL_DISPLAY_FLAG_SECURE, they:

    If device implementations support separate display power states through DeviceStateManager AND support separate display lock states through KeyguardDisplayManager, they:

    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. Such a dedicated secure processor is called "StrongBox". Requirements C-1-3 through C-1-11 below define the requirements a device must meet to qualify as a StrongBox.

    Device implementations that have a dedicated secure processor:

    If device implementations support StrongBox, they:

    To validate compliance with [C-1-3] through [C-1-9], device implementations:

    9.11.3. Identity Credential

    The Identity Credential System is defined and achieved by implementing all APIs in the android.security.identity.* package. These APIs allows app developers to store and retrieve user identity documents. Device implementations:

    If device implementations implement the Identity Credential System, they:

    The upstream Android Open Source Project provides a reference implementation of a trusted application (libeic) that can be used to implement the Identity Credential system.

    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:

    9.16. Application Data Migration

    If device implementations include a capability to migrate data from a device to another device and do not limit the application data it copies to what is configured by the application developer in the manifest via android:fullBackupContent attribute, they:

    9.17. Android Virtualization Framework

    The Android Virtualization Framework (AVF) APIs (android.system.virtualmachine.*) allows applications to create on-device virtual machines (VMs), protected (pVMs), and non-protected (non-pVMs) that load and run native binaries as payloads.

    Start of requirements added in Android 17

    If device implementations set FEATURE_VIRTUALIZATION_FRAMEWORK to true, they:

    9.18. Developer Verification

    Device implementations declaring API level 36.1 or higher:

    Device implementations declaring API level 36.1 or higher and configure a developer verifier by defining config_developerVerificationServiceProviderPackageName in config.xml:

    Device implementations declaring API level 36.1 or higher:

    If a developer verifier is configured, device implementations:

    If a verifier is invoked as part of a package installation session, device implementations:

    Start of requirements changed in Android 17

    Start of requirements removed in Android 17

    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 17.

    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 includes support for an unmetered data connection such as 802.11 or Bluetooth PAN (Personal Area Network) profile, then, they:

    Device implementations SHOULD verify that the system image is binary identical to the 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

    Starting with Android 16, there's no separately maintained changelog. All changes from the prior version are highlighted within this document.

    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.