This page summarizes the major features in the Android 12 and Android 12L releases and provides links to additional information. These feature summaries are organized according to the feature's documentation location on this site.
Architecture
AlwaysOnHotwordDetector class updates
Starting in Android 12, the
AlwaysOnHotwordDetector class
including its factory method,
android.service.voice.VoiceInteractionService.createAlwaysOnHotwordDetector()
,
is a system API (@SystemApi
) instead of a public API. The
AlwaysOnHotwordDetector
class is intended for use by Assistant apps with
system-level privileges, which are commonly bundled with the OS release. In
Android 11 and lower, the API is protected by checks
that ensure that the caller is the
currently active Assistant app, making the API unusable by other third-party
apps.
Additionally, Android 12 includes sound trigger feature
enhancements to improve the attribution and enforcement of permissions related
to microphone usage through the sound trigger API. Microphone usage, including
indirect usage such as through the SoundTriggerManager
or
AlwaysOnHotwordDetector
classes, is attributed to the originating package
(Assistant app) that calls the AlwaysOnHotwordDetector
class. This improves
user privacy and transparency on the packages that use the microphone. In
Android 11 and lower, microphone usage is
attributed to the system user because the originating package doesn't use the
sound trigger API directly but through higher-level services residing in the
system_server
process.
The impact of these changes is as follows:
- Nonsystem apps using the
AlwaysOnHotwordDetector
class fail to compile against the Android 12 API because the API was removed from the public surface. - Existing system apps using the
AlwaysOnHotwordDetector
class might be denied from using sound trigger features at runtime. To address this issue and allow these apps to access the microphone through sound trigger, declare theRECORD_AUDIO
andCAPTURE_AUDIO_HOTWORD
permissions for these apps.
Android Rust language support
Android 12 now supports Rust code usage. A new section added to the Setup documentation provides guidance for developing on Android with Rust.
For more information about Android Rust, various modules, and to see examples (as well as to get IDE setup information), see the new Android Rust section at Android Rust Introduction.
Boot image header
Android 12 adds the use of boot image header
version 4, which is the primary boot image for devices supporting the
Generic Kernel Image (GKI)
architecture. Android 12 also provides a
boot_signature
for checking the integrity of the kernel and the ramdisk. The
check, which is done in
VtsSecurityAvbTest,
is required for devices using the GKI architecture.
To read more, see the Boot Image Header page.
Changes to implementing bootconfig
The bootconfig feature in Android 12, a mechanism
for passing configuration details from the build and bootloader to
Android 12, replaces the androidboot.*
kernel
cmdline options used with Android 11 and lower.
This feature provides a way to separate the configuration parameters for Android
user-space from those for the kernel.
To read more, visit Implementing Bootconfig.
Custom font fallback
Prior to Android 12, updating device-installed
font files in AOSP (in the /system/fonts
partition) or the vendor partitions
(in the /product/fonts
or /system/fonts
partitions) required a system update
from the OEM. This requirement has a significant impact on emoji compatibility.
In Android 12 you can use the FontManager
system
service to manage installed font files and update device-installed font files
without a system update.
For information on this new feature, see Implementing Custom Font Fallback.
DMA-BUF Heaps
In Android 12, GKI 2.0 replaces the ION allocator with DMA-BUF heaps.
Enable locale filters
Android 12 introduces a feature that you can use to
configure default system languages and locale filters for new device types. This
enables you to set the filter property value and default language through
oem/oem.prop
during factory calibration, and to configure restrictions without
baking the filter into the system image.
For more information, see Enabling the locale filter.
Flash vendor ramdisks
Android 12 introduces support for flashing vendor
ramdisks through a fastboot command that pulls the full vendor_boot
image from
a device. The command prompts the host-side fastboot tool to read the vendor
boot header, reimage, and flash the new image. This support includes bootloader
and fastbootd changes to obtain necessary data, such as partition size and
offset.
For more information, see Flashing vendor ramdisks on the Fastboot in Userspace page.
GKI versioning
Starting in Android 12, the Android release part of the KMI version can be extracted from the kernel and injected into the device manifest at build time.
For further details, see GKI Versioning.
MM events-historical memory statistics
Devices that launch on Android 12 can utilize
mm_events
, a set of memory-related statistics that get captured periodically
while a system experiences memory pressure. mm_events
is integrated with
perfetto
tracing mechanisms and adds minimal performance overhead. The
statistics collection stays active for a configurable period of time, capturing
statistics at regular intervals.
For information on how to utilize mm_events
stats, see
MM Events - Historical Memory Statistics.
System Alert window restrictions
To improve the security of the Android Ecosystem, Android 12
has made it harder to acquire the SYSTEM_ALERT_WINDOW
permission and allows third-party apps to block overlays from other third-party
apps.
Preinstalled apps aren't automatically granted the SYSTEM_ALERT_WINDOW
appOp in Android 12. It must be explicitly
granted by the user before a preinstalled app can use it. System apps still get
the permission by default.
Third-party apps can opt-out of having application overlays drawn over them.
This provides a protection mechanism against cloak and dagger
-style attacks. This is available to all apps so that security-sensitive apps,
such as banking apps, can protect themselves. To use this functionality, an app
must declare the HIDE_OVERLAY_WINDOWS
permission in their manifest.
HIDE_NON_SYSTEM_OVERLAY_WINDOWS(signature|privileged)
is deprecated in favor
of HIDE_OVERLAY_WINDOWS
.
Vendor boot partitions changes
Android 12 devices using boot image header version
4 have support for multiple vendor ramdisks in the vendor_boot
partition.
These ramdisk fragments are serially concatenated in the vendor ramdisk section.
A vendor ramdisk table describes the layout of the vendor ramdisk section and
the metadata of each vendor ramdisk fragment.
Because of the changes to the vendor boot partitions in Android 12
and higher, you can't use default
as a vendor ramdisk fragment name; it’s
designated as reserved. Using it to name vendor ramdisk fragments isn't allowed
under any circumstances.
To learn more, see Vendor Boot Partitions and Multiple vendor ramdisks.
Audio
Combined audio device routing
The combined audio device routing feature adds support for streaming audio to multiple audio devices simultaneously. Using this feature, privileged apps can select multiple preferred devices for a particular strategy by way of system APIs. Apps can discover capabilities of audio devices more precisely by using the public APIs provided by this feature.
For more information, see the Combined audio device routing page.
Updates to Audio HAL V7
In order to address backward compatibility issues, Stable AIDL will be mandatory for all HAL changes starting Android 13. To prepare for and enhance this future AIDL adoption, significant changes are made to version 7 of the Audio HAL in Android 12.
For more information, see Updates to the Audio HAL V7 section and the audio policy example.
Camera
Camera static metadata entry for foldable devices
Android 12 introduces the deviceStateOrientationMap
camera static metadata entry that allows the camera HAL to inform the camera
client and camera framework of sensor orientation changes triggered by a
change in the fold state of a device. Foldable devices can optionally use one or
more logical cameras that are composed of physical devices with different sensor
orientations for different device fold states. The deviceStateOrientationMap
metadata entry allows the camera framework to ensure that necessary output
surface transformations are applied when the active physical ID changes in
capture results.
For more detailed information, see
metadata_definitions.xml
.
CameraX vendor extension support requirement
In Android 12, devices supporting CameraX
extensions must have the ro.camerax.extensions.enabled
property set to true
,
which allows for querying whether a device supports extensions.
For more information, see Setting up the vendor library on a device.
Quad bayer camera sensor support
Android 12 introduces platform APIs that let apps take advantage of devices with ultra high-resolution camera sensors, typically with quad or nona bayer patterns that offer flexibility in terms of image quality and low-light performance. The new APIs support the behavior of these sensors taking into account that they might support different stream configurations and combinations when operating in "maximum resolution" mode instead of "default" mode.
To implement camera HAL support for ultra high-resolution camera sensors, device manufacturers must implement changes for the following files:
hardware/interfaces/camera/metadata/3.6/types.hal
: NewCameraMetadata
keyshardware/interfaces/camera/device/3.7/types.hal
NewStream
structure in the camera HAL interface
Compatibility
ADN support requirement for SIM cards
From Android 12, all SIM cards in devices used for CTS testing must have support for storing abbreviated dialing numbers (ADN).
For more details, see Screen and storage.
Camera ITS updates
Android 12 introduces various updates to the Camera Image Test Suite (ITS) including new and updated tests, refactoring to Python 3, and the adoption of the Mobly test framework.
For more information, see Android 12 Camera Image Test Suite Release Notes.
CDD updates
The Android 12 Compatibility Definition Document iterates upon previous versions with updates for new features and changes to requirements for previously released functionality.
Connectivity
5G network slicing
Android 12 provides support for 5G network slicing, the use of network virtualization to divide single network connections into multiple distinct virtual connections that provide different amounts of resources to different types of traffic. This allows network operators to dedicate a portion of the network to providing specific features for a particular segment of customers.
For more information, see 5G Network Slicing.
Companion Device Manager profiles
Apps that target Android 12 and higher can use companion device profiles when connecting to a watch. Using a profile simplifies the enrollment process by bundling the granting of a device-type-specific set of permissions into one step.
The bundled permissions are granted to the companion app once the device connects and last only while the device is associated. Deleting the app or removing the association removes the permissions.
For more information, see Companion Device Profiles.
IMS service entitlement (TS.43)
Android 12 includes support for TS.43 Service Entitlement Configuration, a GSMA specification that defines the entitlement verification step for the activation of services including Voice-over-Wi-Fi (VoWiFi), Voice-over-LTE (VoLTE), SMS over IP (SMSoIP), On-Device Service Activation (ODSA) of eSIM companion devices (associated with the requesting device) and data plan information.
For more information, see IMS Service Entitlement.
IMS single registration
Android 12 adds support for a single registration
model for providing MMTEL and RCS features. This model allows devices to have
all IMS features managed through a single IMS registration provided by the
device's ImsService
. Compared with a dual registration model, where multiple
IMS registrations are managed on one device, single registration reduces
traffic on a carrier's network and increases reliability.
For more information, see IMS Single Registration.
Location time zone detection
Android 12 includes Location Time Zone Detection, an optional automatic time zone detection feature that allows devices to use their location and time zone map data to determine the current time zone.
For more information, see Location Time Zone Detection.
MAC randomization
Android 12 introduces the non-persistent MAC randomization type, which allows Android to re-randomize MAC addresses for certain networks at the start of every connection.
For more information, see MAC Randomization Behavior.
Network selection
Android 12 introduces a new network selection
mechanism using the NetworkScore
class. Network selection affects how
Android fulfills app and system network requests, and influences how the
default network for an app is chosen.
For more information, see Network Selection.
Notification CallStyle
Starting in Android 12, we recommend that apps use
the new notification style,
CallStyle
,
for incoming and ongoing voice and video calls. This notification style includes
action buttons for answering, declining, and hanging up phone calls. It also
uses the same person-centric style used by
conversations,
which is consistent with its behavior of ranking call notifications at the top
of the shade.
For apps to use the CallStyle
notification style, they must use either a full
screen intent or a foreground service (with the associated permission). This
style ranks notifications for calls at the top of the shade. For calls in the
ongoing state, this style adds a chip to the status bar allowing users
to quickly return to the calling app.
For more information, see Call Notifications.
Passpoint updates
Android 12 introduces Passpoint R3 and other Passpoint features such as terms and conditions, venue information URLs, decorated identity prefixes, and deauthentication imminent handling.
For more information about these features, see Passpoint (Hotspot 2.0).
Quick Access Wallet updates
In Android 12 or higher, the Quick Access Wallet
feature is available from the shade instead of from the power menu as in
Android 11. The Wallet UI now runs in System UI and is
located in
frameworks/base/packages/SystemUI/src/com/android/systemui/wallet
.
For more information, see Quick Access Wallet.
Simplified connectivity user experience
Android 12 provides an optional simplified connectivity experience that helps users better understand their network connections, switch between internet providers, and troubleshoot network connectivity issues.
For more information, see Connectivity User Interface.
Time source priority
Starting in Android 12, the framework prioritizes the Network Time Protocol (NTP) time source over the Network Identity and Time Zone (NITZ) source by default.
For details on how to configure and test the time source priority on your device, see Time Source Priority.
Toggle to disable 2G
To improve security, Android 12 introduces a 2G toggle in Settings that allows users to completely disable 2G cellular connections. Radio 1.6 HAL must be implemented for this feature.
The 2G toggle feature is enabled by default. Carriers can disable the feature
at runtime through the
CarrierConfig flag
KEY_HIDE_ENABLE_2G
.
Device manufacturers must ensure that all networks are available during emergency calling.
UICC specifications
In Android 12, to run the CTS carrier API tests, the device needs to use a developer UICC with CTS carrier privileges meeting the requirements specified in the latest version of third-party GSMA TS.48 Test Profile specification.
See Preparing the UICC for more information.
Wi-Fi AP/AP concurrency
Android 12 introduces the Wi-Fi AP/AP concurrency feature, which allows devices to bring up a bridged Dual (AP+AP) tethering hotspot.
For more information, see Wi-Fi AP/AP Concurrency.
Wi-Fi/cellular coex channel avoidance
Android 12 introduces the Wi-Fi/cellular coex channel avoidance feature, which identifies and prevents the use of unsafe Wi-Fi channels when there is interference between cellular channels. This includes interfaces such as STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN).
Wi-Fi security protocol enhancements
Android 12 introduces support for WPA3 Hash-to-Element (H2E), WPA2/WPA3-Enterprise transition mode, and Transition Disable indication.
For more information, see WPA3 and Wi-Fi Enhanced Open.
Wi-Fi STA/STA concurrency
Android 12 introduces the Wi-Fi STA/STA concurrency feature, which allows devices to connect to two Wi-Fi networks concurrently.
For more information, see Wi-Fi STA/STA Concurrency.
Devices
Android 12 new automotive features
See Automotive What's New to learn more about these new features:
- Build Your Own Cloud Emulator
- Per-Application Network Selection (PANS)
- Power Policy
- Security:
- Car Settings Structure:
- Customizing Media
- Rotary Controller:
- Virtualization:
Display
Block untrusted touches
To preserve system security and for a good user experience, Android 12 adds support for blocking untrusted touch events. This prevents apps from consuming touch events where an overlay obscures the app in an unsafe way.
Conversation notifications and widgets
Android 11 added support for customizing the behavior and placement of Conversation Notifications on the Notifications shade by priority and alerting level, allowing Conversations to be marked as Important and conversation specific bubbles to be launched in the Conversation space. Building on these Android 11 features, the Android 12 Conversation Widget feature enables users to add Conversation widgets for important contacts to the home screen, allowing them to easily resume conversations without waiting for a notification.
For more information, see Conversation notifications and widgets.
Window blurs
Public APIs are available in Android 12 for implementing window-blur effects (such as background blur and blur behind). With these APIs, you can blur whatever is behind your own window. You can create windows with blurred backgrounds, creating a frosted glass effect, or show windows with the entire screen behind them blurred, creating a depth of field effect. You can also combine these two.
For more information about this new feature and how to implement it, see the Window blurs page.
Window magnification
In Android 12, low-vision Users can magnify anything on their display by using the window magnification feature. Window magnification lets Users magnify a selected part of the screen, unlike using a zoom function on an entire screen. The selected window can be dragged throughout the display, which enables them to magnify different parts of the screen as needed.
For more information, see Window Magnifier.
Enterprise
Device administration updates
Android 12 includes the following device administration updates:
Managed profile data segregation updates. On personal devices with a work profile, Android 12 removes access to device hardware identifiers (IMEI, MEID, serial number) and provides a unique, enrollment-specific ID that identifies the work profile enrollment for a specific organization. For details, see Device identifiers.
Device provisioning updates. Android 12 includes several changes to device provisioning. For details and a list of changes, see Android 12 updates.
Graphics
Hot plug handling in Composer HAL
Display capabilities (such as display modes and supported HDR types) can change dynamically on devices which have externally connected displays (via HDMI or DisplayPort), such as Android TV set-top-boxes (STB) and over-the-top (OTT) devices. From Android 12 on, changes in the framework support hot plug handling and dynamic display capabilities.
For more information, see Hot plug handling in Composer HAL.
Modular system components
Android 13 contains several new and updated modulular system components. The new modules are:
ART: This module aims to improve the Android experience by offering users the latest managed runtime optimizations, features, and bug fixes.
Device Scheduling: This module contains logic that detects whether or not the device is in an idle state, and can be rebooted without user disruption.
Updates to existing modules:
adbd: Updated the module boundary.
DocumentsUI: Disabled file browsing.
ExtServices: Added
DisplayHashingService
and updated the module boundary.Media: Added a new media component.
NNAPI Runtime: Updated the module boundary.
PermissionController: Made the PermissionController module completely modular and updated the module boundary.
SDK Extensions: Updated the module responsibility and added a new component.
Statsd: Updated the module boundary.
Tethering: Added functionality updated the module boundary.
Time Zone Data: Updated the package format.
Wi-Fi: Updated the modul boundary.
Media
Compatible media transcoding
Compatible media transcoding allows devices to use modern, storage-efficient media formats for video capture, such as HEVC, while maintaining compatibility with apps. With this feature, device manufacturers can use HEVC instead of AVC by default to improve video quality while reducing storage and bandwidth requirements. For more information, see Compatible media transcoding.
Performance
App hibernation
Android 12 offers the ability to hibernate apps that the user doesn't use for a few months, similar to permission auto-revocation.
See App Hibernation for more information.
Cgroup abstraction layer
The control group (cgroup) abstraction layer in Android 12
introduces new features, such as the ability to define specific cgroup
controllers as optional, and to use a new task_profiles
command that replaces
the deprecated writepid
command. This replacement ensures that underlying
cgroup implementations have no effect on upper layers when migrating tasks in
cgroup hierarchies. Android 12 also introduces
support for per-API-level task profiles.
For more information, see Cgroup Abstraction Layer.
Permissions
Bluetooth permissions
Android 12 introduces the following Bluetooth
permissions, which replace the
BLUETOOTH
and
BLUETOOTH_ADMIN
permissions:
BLUETOOTH_SCAN
: Allows apps to discover and pair nearby Bluetooth devices.BLUETOOTH_ADVERTISE
: Allows apps to advertise to nearby Bluetooth devices.BLUETOOTH_CONNECT
: Allows apps to connect to paired Bluetooth devices.
These permissions are part of the new
NEARBY_DEVICES
runtime permission group. This permission group enables use cases such as
connecting to a smartwatch without requiring the LOCATION
runtime permission.
These new permissions are app compatible and no changes are required for apps running on Android 11 or lower. For legacy apps targeting Android 11 or lower, the platform automatically translates requests for the legacy Bluetooth permissions into requests for the new permissions. When an app upgrades to target Android 12 or higher, the app must request the new Bluetooth permissions explicitly.
For more information on using the permissions, refer to Bluetooth permissions.
Privacy indicators
Android 12 provides users with transparency by displaying indicators when an app uses a private data source through the cameras and microphone app-op permissions.
App Ops tracks both the activity status and the number of individual API calls, and interacts with the microphone and camera indicators in Android 12 to show users when apps have accessed audio and camera data on their devices. When users click the microphone or camera indicators, they see which apps have accessed their data.
This feature is mandatory for all OEMs. For more information, see Privacy Indicators.
Location
Starting in Android 12, users can request that an app gets only approximate accuracy when it access location information.
This change is designed to affect apps only when they target Android 12 or higher. However, on devices that have an older version of the PermissionController module, this change affects all apps, regardless of target SDK version.
Runtime
Dexpreopt and <uses-library> checks
Android 12 has build system changes to
ahead-of-time (AOT) compilation of DEX files (dexpreopt) for Java modules that
have <uses-library>
dependencies. In some cases these build system changes can
break builds.
For information on how to prepare for breakages and recipes for fixing and mitigating them, see Dexpreopt and <uses-library> Checks.
Tests
Compatibility Test Suite (CTS)
For Android 12, many new key modules and test changes are introduced for CTS. See CTS Release Notes for more information.
TV
HDMI-CEC control service
Android 12 uses HDMI-CEC to automatically control HDMI-connected displays when a device wakes up or goes to sleep.
For further details, see HDMI-CEC Control Service.
Tuner framework
In Android 12:
The frontend with Tuner HAL 1.1 or higher supports the DTMB DTV standard. The following frontend capabilities and settings are supported:
DtmbFrontendCapabilities
DtmbFrontendSettings
The Tuner SDK API supports new features in Tuner HAL 1.1, which is a backward-compatible version upgrade of Tuner 1.0.
android.media.tv.tuner.TunerVersionChecker.getTunerVersion()
checks the running HAL version.
Updates
APEX compression
After an update to an Android Pony EXpress container (APEX) is installed, its
pre-installed version isn't used anymore, but occupies the same amount of memory
space. That occupied space remains unavailable. In
Android 12, APEX compression minimizes this
storage impact by using a highly compressed set of APEX files on read-only
partitions (such as the /system
partition). To read about APEX compression in
Android 12, see Compressed APEXes.
Resume-on-reboot security and convenience
Android 12 introduces enhanced multi-client support and server-based reboot functionality. The resume-on-reboot (RoR) process provides added security and convenience to users because OTA updates can be made during device idle times, while Android 12 multi-client and server-based update functionalities together provide device hardware-level type security.
For more information, see Resume-on-Reboot.
SIM PIN replay with RoR
Android 12 features SIM-PIN replay for seamless PIN code verification after an RoR-initiated reboot.The SIM PIN is re-encrypted and stored each time a user successfully enables, verifies, or modifies it.
For more information, see SIM-PIN replay.
Virtual A/B updates
Android 12 offers the option of
Virtual A/B compression on snapshotted partitions. In
Android 12, updateable partitions that the
bootloader doesn't use can be snapshotted to save space. These can also be
compressed. Enabling snapshot compression in your build for
Android 12 saves space on the /data
partition.
Implementing Virtual A/B with snapshots compression requires changes to device- specific code. See the changes and implementation details on the Virtual A/B Overview and Implementing Virtual A/B pages.