Every Android beta and quarterly platform release (QPR) ships changes that affect how organisations manage their devices. Most of the official documentation is aimed at app developers, and the underlying framework changes go entirely undocumented until they surface in a stable release months later.
This tracker fills the gap. Each entry below covers a single build and summarises what changed for enterprise management - focusing on what device policy controller (DPC) apps will be able to do, followed by broader platform changes that IT teams and EMM vendors should be aware of. Where a feature is still gated behind a flag or marked provisional, the entry says so.
The source data comes from automated firmware teardowns comparing successive builds of the DevicePolicyManager framework, enterprise apps, permissions, and related platform components. For full technical detail on a given release, see the corresponding "new in Android for enterprise" reports, such as New in Android 17 for enterprise and New in Android 16 for enterprise.
How to read the status labels:
true in the beta track; expected to shipfalse; may change before stableThese reports are generated with the assistance of AI, AI tears the respective build(s) down and extracts relevant data, with evidence. This is then reviewed and reported. Due to the nature of pulling factory OTAs and images apart, I won't ever claim 100% accuracy of the reports. Nor do I guarantee reported items will reach production builds; in fact following Google's move to trunk stable development, it will be very normal to catch previews of things that may not ship for several releases.
View a specific channel: Beta | Canary | Stable
Track: QPR3 Beta | Predecessor: QPR3 Beta 2 | Milestone: March 2027 stable
QPR3 Beta 3 is the largest single-build enterprise surface delta this tracker has recorded. Three major subsystems land simultaneously: Data Leak Prevention with a complete rules and enforcement stack, Advanced Security Telemetry with XDR-style monitoring, and Policy Streamlining V2 with a generic API and 43 per-policy sub-flags. Seven flags flip to true, including the policy streamlining master gate.
The policyStreamlining flag flips to true, activating the top-level gate for the AMAPI-aligned typed policy namespace. 43 per-policy sub-flags are added covering Bluetooth, camera, printing, Wi-Fi, ADB, USB, MTE, security logging, developer options, nearby streaming, and more. A new server-side StreamlinedPolicies class (~210 lines) implements the generic setPolicy(), getPolicy(), getResolvedPerUserPolicy(), and subscribeToResolvedPerUserPolicy() API backbone. All 43 per-policy sub-flags remain gated (return false), but the infrastructure is now live.
Six other flags also flip to true: dpmSecurityLevelWpaOnly, enforcingAdminExtraEnabled, enforcingAdminGetComponentNameEnabled, managedEsimOutgoingTransferPolicy, secureAdbRoleBypassing, and setTimeCoexistence.
A complete DLP stack lands across two packages (~38 classes total):
android.app.admin.dataleakprevention) - DataLeakPreventionManager as a @SystemApi system service with content URI access checking, batch operations, and screen capture pre-checks. Rules defined via DataLeakPreventionRules with app-based and storage-based source/destination matchers. Verdict hierarchy: allow, block, or redact. New DPM operation OPERATION_SET_DATA_LEAK_PREVENTION_RULES (43) and policy identifier DATA_LEAK_PREVENTION_RULES_POLICYandroid.app.admin.reporting.dataleakprevention) - 23-class reporting subsystem with 16 transfer action types covering copy-paste, screen capture (image and video), intent sharing, file operations (read, write, create, close, copy, move, zip), URI permission grants and checks, and printing27 new XDR-style classes under android.app.admin.reporting.securitytelemetry covering:
ProcessExecEvent and ProcessTerminateEvent with parent process attribution, image file hashes, and TCB (Trusted Computing Base) attributesNetworkFlow with community ID, local/remote endpoints, protocol, direction (incoming/outgoing), and byte counters; NetworkSocketListenEvent for socket monitoringAgentStartEvent and AgentHeartbeatEvent for security agent health trackingGated behind advancedSecurityTelemetryEnabled (false) and xdrReportingEnabled (false).
setMtePolicy(int) / setMtePolicy(String, int) - Memory Tagging Extension policy controlsetContentProtectionPolicy(ComponentName, int) / getContentProtectionPolicy(ComponentName) - content protection toggle per adminsetAppFunctionsPolicy(int) - app functions policy controlisOutgoingEsimTransferAllowed(int) - eSIM outgoing transfer checkPOLICY_SCOPE_LOGIN_SCREEN (4) - new policy scope for login screenLOGIN_ATTEMPT_STATUS_FAILED / LOGIN_ATTEMPT_STATUS_SUCCESS - login attempt tracking constantsSTATUS_SINGLE_USER_DEVICE_MANAGEMENT_NOT_SUPPORTED (25) - new provisioning statusNew engine-level constructs formalise policy targeting and propagation:
Resource - DeviceWide (singleton) or PerUser (cached per userId)Scope - Device (singleton) or User (cached per userId)PolicyPropagationRule - six values: SELF, LOGIN_TO_DEVICE, DEVICE_TO_DEVICE, DEVICE_TO_USER, INHERITABLE_PROFILE, SESSION_ACTIVELegacy handlers (EnumStoredAsBooleanPolicyHandler, EnumStoredAsGlobalAndLocalBooleanPolicyHandler, ListOfPackageIdentifierPolicyHandler) are deleted, their functionality absorbed into a new SimplePolicyHandler base class.
The PermissionController gains 28+ feature-flagged MANAGE_DEVICE_POLICY_* permissions including advanced security telemetry, bugreport, DLP, developer options, ethernet, MTE, nearby streaming, physical media, reboot, user removal, USB access, Wi-Fi, and more. Notable additions: MANAGE_DEVICE_POLICY_DATA_LEAK_PREVENTION, MANAGE_DEVICE_POLICY_ADVANCED_SECURITY_TELEMETRY, MANAGE_DEVICE_POLICY_REBOOT, and MANAGE_DEVICE_POLICY_REMOVE_USERS.
FLAG_* string constants removed, replaced with direct boolean accessor methods. 52 new flags, 5 removed (4 graduated into unconditional behaviour, 1 renamed)android.app.admin.validator package with type-safe validators for enum, integer, string, list, and complex policy valuesdeviceTheftImplEnabled graduated (removed, now unconditional)enableNullableAdminComponent renamed to enableNullableAdminForAffiliationIdsTrack: QPR1 Stable | Predecessor: A17 Stable (CP2A.260605.012) | Next milestone: QPR2 stable (December 2026)
This is the first quarterly platform release for Android 17, shipping to Pixel devices with the October 2026 security patch. It represents four months of enterprise development from the initial June stable through the QPR1 beta programme. The headline additions are data leak prevention, Policy Engine V2 infrastructure, and a broad expansion of the policy streamlining initiative.
An entirely new data leak prevention (DLP) framework arrives, giving DPC apps the ability to define rules that control how data moves between apps. Rules match on source app, destination app, and transfer type (data transfer or screen capture), with enforcement actions including block, redact, and report. Nine new framework classes handle rule definition, matching, and enforcement.
This mirrors the DLP capability that Chrome Enterprise already offers on ChromeOS devices, where DataLeakPreventionRulesList restricts clipboard, screenshot, printing, and file transfers by URL pattern. The Android implementation works by app rather than by URL, but the enforcement model is the same.
All DLP classes are shipped. The DPC-facing setDataLeakPreventionRules() API for writing rules and the MANAGE_DEVICE_POLICY_DATA_LEAK_PREVENTION permission are present in the beta track and expected in QPR2 stable.
Over 20 new feature flags land the infrastructure for migrating individual policy enforcement areas into a redesigned Policy Engine V2. Each flag gates one policy area - when enabled, that policy switches from legacy enforcement to the new typed resolution mechanism. The master switch is policyEngineV2.
Policy areas covered include account management, application visibility, application restrictions, audit logging, common criteria mode, content protection, keyguard features, lock task, password complexity, permission grants, screen capture, security logging, USB data signalling, and user restrictions, among others.
All V2 migration flags are provisional (still false). The infrastructure is in place but no individual policy has been switched over yet.
The typed PolicyIdentifier system continues its expansion. New policy categories now cover:
Each policy category arrives as a new class under android.app.admin.policy with strongly typed values and constants.
All policy streamlining flags are provisional.
The provisionMultiuserManagedUser() API for provisioning managed users on multi-user devices is confirmed shipped. A new STATUS_INCOMPATIBLE_OS_BUILD error code (19) handles the case where the OS build does not support multi-user provisioning.
The framework-side API is ready, but neither ManagedProvisioning nor DevicePolicyPrebuilt (CloudDPC) currently expose MUM-specific activities or intent filters. The provisioning entry point exists in framework code but is not yet wired through the app layer.
A new kiosk user type (USER_TYPE_FULL_KIOSK) and admin status change broadcast (ACTION_USER_ADMIN_STATUS_CHANGED) also ship, supporting the multi-user device model.
Certificate key pair operations - removeKeyPair, hasKeyPair, and generateKeyPair - all gain a scope parameter, enabling DPC apps to manage certificates at either device-wide or profile scope. This is gated by the enableDeviceCertificates flag (provisional).
DPC apps can now subscribe to resolved policy state changes via addResolvedDeviceWidePolicyCallback(). When the effective policy value changes - whether because of a new admin, a policy update, or a conflict resolution - the callback fires with both the old and new values. The backing flag policyTransparencyRefactorEnabled has graduated to true (shipped).
Five flags have graduated from false to true, confirming these features are now live:
policyTransparencyRefactorEnabled - the policy transparency callback system is activeaddUserInfoInProfileOffDeadlineAlarm - user info included in work profile off-deadline alarmscheckPersonalSuspensionForAllProfiles - personal app suspension checks all profilesintroduceGenericProvisioningError - generic provisioning error codes (including STATUS_INCOMPATIBLE_OS_BUILD)useHardenedFrpActiveCheck - hardened factory reset protection verificationThese were all rolled back to false in the initial A17 stable release (June) but are now confirmed true in QPR1 stable.
The provisioning app receives security improvements:
allowBackup="false")usesCleartextTraffic="true")networkSecurityConfig)Eight flags have been removed entirely, confirming their features are now unconditional or abandoned:
associateDisallowGrantAdminWithPermission, removeDeviceAdminFeatureChecks, unsuspendNotSuspended, usePolicyIntersectionForPermittedInputMethods, userControlDisabledPackagesSettingsFix - all previously true, now graduated outenterpriseEsimUsingCarrierPrivileges - replaced by esimManagementEnabled/esimManagementUxEnabledpolicyStreamliningTests - test-only flag, removedwipeDeviceWhenWipedUserIsLastAdmin - replaced by the broader wipeDeviceWhenUserCannotBeRemovedAndroid 17 base source is available in AOSP (android17-release branch). QPR1 source has not yet been published - Google's 2026 AOSP schedule targets Q2 and Q4, so the Q4 drop is expected to include QPR1 source.
Track: QPR3 Beta | Predecessor: QPR3 Beta 1 | Milestone: March 2027 stable
QPR3 Beta 2 expands the policy streamlining initiative with five new flags and six new permissions, adds a standalone provisioning manager for multi-user setups, and wires the advanced security telemetry subsystem into the network logging pipeline.
Five new policyStreamlining* flags extend the Engine V2 migration to additional policy domains:
policyStreamliningIncomingAdb) through INCOMING_ADB policy definition, enforcer callback, and MANAGE_DEVICE_POLICY_INCOMING_ADB permission. DPCs will be able to manage ADB access via typed policy rather than legacy restriction APIsMANAGE_DEVICE_POLICY_MANAGED_WIFI_CREDENTIALS_SHARING permission for Wi-Fi credential sharing policyMANAGE_DEVICE_POLICY_MODES_SYNC for cross-device mode sync policyMANAGE_DEVICE_POLICY_REMOVE_USERS for device controller user removalAll five flags are provisional (return false).
A new ProvisioningManager class provides a standalone orchestrator for multi-user managed user setup. It validates provisioning preconditions via ProvisioningPreconditionChecker, then delegates to DPMS to set the active admin and profile owner on the target user. The provisioning action android.app.admin.action.PROVISION_MULTIUSER_MANAGED_USER is the entry point. This builds on the createManagedUser() API introduced in QPR3 Beta 1.
The NetworkLoggingHandler gains an AdvancedSecurityTelemetrySource interface, connecting the advanced security telemetry subsystem (first introduced in Canary 7) to the network logging pipeline. When the DPC is not actively streaming logs, the handler schedules telemetry polling at 60-second intervals. This is the first concrete integration point between the new XDR-style telemetry system and the existing enterprise logging infrastructure.
A new SimplePolicyHandler base class extracts the common store/get/resolve pattern from PolicyHandler. Several existing handlers - including WifiStatePolicyHandler, TetheringPolicyHandler, CameraAccessPolicyHandler, and EnumStoredAsBooleanPolicyHandler - now extend SimplePolicyHandler instead of PolicyHandler directly. This simplifies adding new typed policy handlers going forward.
allowDeviceControllerRemoveUser (provisional) - new flag gating device controller user removal, paired with MANAGE_DEVICE_POLICY_REMOVE_USERS permissionOwners gains test methods for short and long support message migration, supporting the policy streamlining effort for branding messagessuspendPackagesCoexistence (was true) and useHardenedFrpActiveCheck (was true) have been removed entirely, confirming these features are now unconditional behaviouradvancedSecurityLoggingEnabled renamed - now advancedSecurityTelemetryEnabled (this rename first appeared in QPR3 Beta 1)All new flags return false - none have graduated yet.
Track: QPR3 Beta (new track) | Branch point: QPR2 Beta 7.1 (CP41.260831.019) | Milestone: March 2027 stable
The first QPR3 Beta brings the most enterprise-significant changes since QPR2 Beta 1, with new APIs, deeper policy engine infrastructure, and 17 new feature flags (14 provisional, all currently false).
Managed user creation - A new @SystemApi method createManagedUser() enables programmatic creation of managed users via CreateManagedUserParams, with async callbacks for success (UserHandle) or failure (ManagedUserCreationException). This is a key building block for multi-user management (MUM) scenarios. Gated by createManagedUserApi (provisionally false).
Scoped certificate installation - installKeyPairWithScope() adds an explicit scope parameter to certificate installation, and a new installKeyPair overload takes Collection<Certificate> with a scope integer. These complement the scoped certificate APIs (remove, has, generate, grant, revoke) introduced in QPR1/QPR2. Gated by enableDeviceCertificatesPhase2 (provisionally false).
The Engine V1-to-V2 migration trigger (triggerDevicePolicyEngineMigration) has been removed entirely, confirming V2 is now the sole engine path. Seven new policyStreamlining* flags gate additional policies being migrated to the typed engine model:
CameraAccessPolicyHandler), complex-type policies, long support message, nearby app streaming, nearby notification streaming, time zone, Wi-Fi state (with new WifiStatePolicyHandler)The internal transport layer switched from string-based policy IDs to typed PolicyIdentifierTransport objects across all policy setter/getter methods. New engine/Resource and engine/Scope types provide structured device-wide vs per-user targeting.
advancedSecurityLoggingEnabled renamed to advancedSecurityTelemetryEnabled - reflects the broader scope of the security telemetry subsystemsecurityLogStreamingEnabled (provisional) - real-time streaming delivery of security log eventsrequestBugreportForMum (provisional) - bug report collection on multi-user managed devicesforceResetAdbProvisionedDo (provisional) - force-reset of ADB-provisioned device ownerscanAdminGrantSensorsPermissions now takes a user ID (per-user sensor permission granting)canAddPrivateProfile() deprecated - throws UnsupportedOperationException in "Android D" (QPR3); replaced by isUserTypeSupported()ProvisioningPreconditionChecker with delegate patternAll 14 new flags return false - none have graduated yet.
Track: QPR2 Beta | Predecessor: QPR2 Beta 6 | Milestone: December 2026 stable
No enterprise-surface changes in this build. CP41.260831.016 is the October security patch for the QPR2 beta track, released on October 7. The framework and server-side device policy code are functionally identical to the previous build - all differences are decompilation artefacts (lambda renumbering, resource ID shifts) and updated localisation strings.
Track: Canary | Predecessor: Canary 6 | Note: canary builds are forward-looking and may not ship in the next stable release
A major canary update introducing an advanced security telemetry subsystem (51 new classes for process and network monitoring), a full Data Leak Prevention system service, managed user creation, three new policy engine handlers, and a wave of 21 new flags covering policy streamlining, security telemetry, and multi-user management.
DPC capabilities
advancedSecurityTelemetryEnabled. Provides enterprise threat detection via process lifecycle events (ProcessExecEvent, ProcessTerminateEvent), network flow monitoring (NetworkFlowEvent, NetworkSocketListenEvent), and security agent health checks (AgentStartEvent, AgentHeartbeatEvent). This is kernel-level security telemetry for enterprise devices - a significant new capability with no predecessor on any track@SystemApi system service (DataLeakPreventionManager) for content URI access checks, batch DLP operations, and print/screen capture enforcement. Methods include checkContentUriAccess(), batchCheckContentUriAccess(), checkPrintingAction(), and precheckScreenCaptureAction(). Supports three UI handling modes: SILENT, SYSTEM_OWNED, and CALLER_OWNED. Not present in the previous canary - this is the first appearance of a standalone DLP system servicecreateManagedUser(CreateManagedUserParams, Executor, OutcomeReceiver) on DevicePolicyManager. Asynchronous creation of dedicated-task users for multi-user managed device deployments. Gated by createManagedUserApi (false). Only accepts USER_TYPE_FULL_DEDICATED_TASKinstallKeyPair overload with Collection<Certificate> and explicit scope parameter. Gated by enableDeviceCertificatesPhase2. Enables certificate scoping to specific contextsfalse. The largest single-build flag batch to date, covering 13 policy streamlining domains (Bluetooth, camera access, content capture, long support message, nearby app/notification streaming, Wi-Fi state/Direct, set time zone, complex types, application policy), plus advanced security telemetry, security log streaming, managed user creation, per-user sensor permissions, bug reports for multi-user management, and several bug fix and refactoring gatesPolicyHandler subclasses landed. CameraAccessPolicyHandler maps USER_CHOICE/ENABLED/DISABLED to camera restrictions. TetheringPolicyHandler enforces tethering and Wi-Fi tethering restrictions. WifiStatePolicyHandler enforces the Wi-Fi state restriction. Each integrates with the typed policy engine V2policyIdentifier.getId() to policyIdentifier.toTransport() across setPolicy, getPolicy, getResolvedDeviceWidePolicy, getResolvedPerUserPolicy, and getEnforcingAdminsForPolicyIdentifier. The new PolicyIdentifierTransport Parcelable enables richer typed policy identification across process boundariesUSER_TYPE_FULL_KIOSK renamed to USER_TYPE_FULL_DEDICATED_TASK and isUserTypeKiosk() to isUserTypeDedicatedTask(). Canary now aligns with the beta track naming (beta adopted this in QPR2 Beta 5). The scope broadens from kiosk-only to general dedicated-task user typessecurityLogStreamingEnabled signals future real-time security event delivery. Currently canary has both the telemetry subsystem and streaming flag - together they represent a step-change in enterprise security monitoring capabilitycanAdminGrantSensorsPermissionsPerUser flag and corresponding per-user userId parameter on canAdminGrantSensorsPermissions(). Sensor permissions can now be granted per-user rather than device-wideOther enterprise changes
CONTENT_PROTECTION and MEMORY_TAGGING_EXTENSION now conditionally handled by Engine V2 via setIsHandledByEngineV2Supplier(). New buildOrThrow() method on PolicyDefinition for safer construction. Resource and Scope interfaces added for formalised policy resource targetingLegacyPermissionRegistry extracts DO/PO/financed DO permission lists from inline DPMS code into a single registry classisVisibleBackgroundUsersSupported() deprecated in favour of isVisibleBackgroundFullUsersSupported(). The "Full" qualifier disambiguates from profile-type background usersConfirmationActivity removed from manifest, layout renames, and localisation string updates across all locales. No new enterprise permissions or componentsCross-track note: a notable convergence - canary now uses USER_TYPE_FULL_DEDICATED_TASK, matching QPR2 Beta's independent rename from USER_TYPE_FULL_KIOSK. The remaining cross-track divergences persist: canary carries crossUserSuspensionEnabledRo and isRecursiveRequiredAppMergingEnabled at true, the beta track still has streaming network log infrastructure that canary lacks, and several beta-track flags (advancedSecurityLoggingEnabled, permissionManageAffiliationIds) are not present on canary. The new security telemetry and DLP Manager subsystems are canary-first - not yet present on the beta track.
Track: QPR2 Beta | Predecessor: QPR2 Beta 5 | Milestone: December 2026 stable
The policy type system becomes extensible, managed device detection narrows its scope, and device controllers gain the ability to manage affiliation IDs.
DPC capabilities
Other enterprise changes
isDeviceManaged() no longer returns true for company-owned work profile (COPE) devices. The server-side implementation now checks only for a device owner. DPC apps or management tools relying on this method returning true for COPE deployments will see changed behaviourcanAddPrivateProfile() method has been removed from UserManager. Private Space creation checks are simplified elsewhereTrack: Canary | Predecessor: Canary 5 | Note: canary builds are forward-looking and may not ship in the next stable release
A policy expansion canary that adds nine new flags, lands task continuity handoff enforcement, and refactors the network logging handler for thread safety.
DPC capabilities
false, covering device controller reboot (allowDeviceControllerReboot), security logging for login attempts and package failures, policy streamlining for support messages, first-use hints, and task continuity handoff, plus multi-user and network log streaming scaffolding. These are new on the canary track - several also appeared independently on QPR2 BetaCrossDevice.TASK_CONTINUITY_HANDOFF handler landed in PolicyHandlerFactory, mapping the policyStreamliningTaskContinuityHandoff flag to the no_task_continuity_handoff user restriction. This completes the enforcement plumbing for controlling cross-device task handoff via the typed policy enginekeychainSuppressCertificateSelections flipped from true back to false. This had been enabled on canary since canary 4; the rollback suggests the feature needs further work before graduationOther enterprise changes
NetworkLoggingHandler was rewritten from synchronized blocks to a handler-thread-only pattern with checkHandlerThread() assertions. All public methods now post to the handler thread. This improves batch collection reliability but is not a feature change - canary remains batch-only for network loggingnotifyDeviceOwnerOrProfileOwner() renamed to notifyDeviceManagementApp(), reflecting the shift from device owner/profile owner to the broader device management app conceptisHeadlessSystemUserLoginScreen() method for detecting HSU-as-login-screen configuration. Still behind a test flagServiceSpecificException instead of UnsupportedHardwareException, aligning with standard Android service error patternsisRecursiveRequiredAppMergingEnabled remains enabled on canary, carrying forward from canary 5Cross-track note: the canary and QPR2 Beta tracks continue to diverge in several areas. The beta track has streaming network log scaffolding, content capture and Wi-Fi Direct typed policies, and an affiliation ID permission gate that are not present on canary. Conversely, canary carries crossUserSuspensionEnabledRo and isRecursiveRequiredAppMergingEnabled at true whilst the beta track still has them gated. The kiosk user type naming also differs - canary uses USER_TYPE_FULL_KIOSK, beta uses USER_TYPE_FULL_DEDICATED_TASK. These are independent branch choices, not directional changes.
Track: QPR2 Beta | Predecessor: QPR2 Beta 4 | Milestone: December 2026 stable
The kiosk user type gets a rename with broader semantics, three new typed policies extend the streamlining effort, and device controllers gain scaffolding for programmatic reboots.
DPC capabilities
Other enterprise changes
Track: QPR2 Beta | Predecessor: QPR2 Beta 3 | Milestone: December 2026 stable
Platform stability reached. The enterprise API surface is frozen. What ships in this build ships in the December 2026 stable QPR2 release.
DPC capabilities
Other enterprise changes
Track: QPR2 Beta | Predecessor: QPR2 Beta 2 | Milestone: December 2026 stable
Three enterprise flags graduated to enabled, and the DLP rules framework gained its set/get API.
Flag graduations
Three flags moved from provisional to enabled in this build:
policyStreamlining) - the master switch for the new type-safe policy interface is now on. DPC apps will be able to use setPolicy and getPolicy with proper typed identifiers and built-in multi-admin conflict resolutionmanagedEsimOutgoingTransferPolicy) - DPC apps can now query whether an eSIM profile is allowed to be transferred off a managed devicedpmSecurityLevelWpaOnly) - administrators can enforce WPA as the minimum Wi-Fi security standard, blocking connections to open or WEP networksDPC capabilities
Other enterprise changes
Track: Canary | Predecessor: Canary 4 | Note: canary builds are forward-looking and may not ship in the next stable release
Introduces the registered app store role and content restriction enforcement.
DPC capabilities
DISALLOW_INSTALL_UNKNOWN_SOURCES_INCLUDING_REGISTERED_APP_STORES restriction (landed in QPR2 Beta 3), giving administrators a stricter sideloading option that also blocks registered storesOther enterprise changes
PolicyHandler, PolicyValidator, and PolicyHandlerFactory classes replace inline policy logic, moving toward a cleaner typed handler lifecyclePOLICY_SCOPE_LOGIN_SCREEN = 4 landed in QPR2 Beta 1)Track: QPR2 Beta | Predecessor: QPR2 Beta 1 | Milestone: December 2026 stable
Security logging decomposition, scoped certificate management, and policy engine expansion.
DPC capabilities
Other enterprise changes
Track: QPR2 Beta | Predecessor: Android 17 QPR1 stable | Milestone: December 2026 stable
The first QPR2 build, with a notable architectural change to the policy engine and several new policy areas.
DPC capabilities
isOutgoingEsimTransferAllowed, clarifying its purposeOther enterprise changes
enforcingAdminExtraEnabled, enforcingAdminGetComponentNameEnabled, and setTimeCoexistenceLOCKSCREEN to LOCK_SCREEN)Track: QPR1 Beta | Predecessor: QPR1 Beta 6 | Milestone: September 2026 stable
The final QPR1 beta before stable, focusing on physical media, tethering policies, and certificate management improvements.
DPC capabilities
no_physical_media restriction with proper multi-admin resolutionOther enterprise changes
Branding namespace, improving organisation for branding-related policiesAdvancedSecurityOverrides with proper typed allowed/disallowed constantsTrack: QPR1 Beta | Predecessor: QPR1 Beta 5 | Milestone: September 2026 stable
Introduces real-time policy change callbacks and scoped key generation.
DPC capabilities
Other enterprise changes
Track: QPR1 Beta | Predecessor: QPR1 Beta 4 | Milestone: September 2026 stable
One of the largest enterprise builds tracked so far. Introduces the data leak prevention framework, policy namespace classes, scoped certificate management, and the foundation for policy engine V2.
DPC capabilities
Other enterprise changes
AdvancedSecurityOverrides, DeviceConnectivityManagement, and DateTime group related policies together, rather than keeping them all in a flat list. This is a structural improvement that scales to the volume of policies expected as Android and ChromeOS management convergepolicyEngineV2 flag and 27 per-policy migration flags appeared, all still off. These gate the next generation of the policy engine that will handle routing policies through either the V1 or V2 pathSTATUS_HEADLESS_SYSTEM_USER_MODE_REQUIRED constant was renamed to STATUS_INCOMPATIBLE_OS_BUILD, broadening its meaning beyond headless modeTrack: Stable | Predecessor: Android 16 Stable (April)
The first stable Android 17 release. This is a cross-version comparison against Android 16 - every difference is a genuine version change, not a beta progression. The headline story is the typed policy engine and multi-user device provisioning, both of which ship in this release with their API surfaces live.
Multi-admin typed policy engine
setPolicy, getPolicy, getResolvedDeviceWidePolicy, and getResolvedPerUserPolicy with typed PolicyIdentifier<T> parameters. The engine mediates policy conflicts between multiple admins automatically. Eleven typed policies are defined: screen capture, auto-time, auto-timezone, eSIM outgoing transfer, lockscreen message, content restriction apps, app install, app uninstall, easter eggs, factory reset, and Bluetooth sharing. The API surface is live, but individual policy-streamlining flags remain gated at false - expect enablement in QPR releasessetCrossProfileWidgetProviders(Set) is now live. DPCs can set all cross-profile widget providers in a single bulk call rather than adding and removing packages individuallyfalse. These will progressively activate as the legacy DPM methods migrate to the typed engineMulti-user device management
provisionMultiuserManagedDevice() and provisionMultiuserManagedUser() to set up shared-device scenarios - kiosks, frontline workers, education labsDEVICE_CONTROLLER role, lighter than device owner, purpose-built for shared-device controllers. It grants permissions for content protection, debugging features, input methods, lockscreen messages, organisation identity, safe boot, and time setting. Gated by multiUserManagementDeviceProvisioningMultiUser to Multiuser casing. DPCs referencing the old action strings (ACTION_PROVISION_MULTI_USER_DEVICE) should update to ACTION_PROVISION_MULTIUSER_MANAGED_DEVICEUser restrictions
DISALLOW_ADD_GUEST restriction lets DPCs explicitly block guest user creation without the broader DISALLOW_ADD_USERDISALLOW_TASK_CONTINUITY_HANDOFF replaces the A16 DISALLOW_HANDOFF with a clearer name. DPCs should migrate - the old restriction string is removedhasBadge() now returns true for user 0 in headless system user mode, improving app management UX on HSU devicesDPM role holder changes
COPY_ACCOUNTS and REMOVE_ACCOUNTS (gated by splitCreateManagedProfileEnabled), supporting managed profile creation workflowsACCESS_BIOMETRIC_SENSOR_STRENGTHS added to DPM, system activity, and wallet rolesDISCOVER_APP_FUNCTIONS and EXECUTE_APP_FUNCTIONS_SYSTEM added to the system activity and DPM rolesSHOW_POWER_MENU permission added to the assistant and DPM roles (gated by statusbarApiShowPowerMenu)Other enterprise changes
FeatureFlags/FeatureFlagsImpl runtime delegation layer was removed. All admin flags are now hardcoded static methods in the stable image - no runtime override possibleenableNullableAdminComponent shipped true, replacing the A16 dontWriteIsSystemAuthority flag. Allows admin components to be null in policy engine records, supporting role-based management without a concrete DeviceAdminReceivercanAddPrivateProfile() now uses a simpler check, removing multiple legacy flag guardscanAddMoreUsersLegacy() deleted from UserManager; the consistentMaxUsers flag is now assumed truePolicyHandler/PolicyHandlerFactory/PolicyValidator framework landed in the device policy service. This is the typed handler lifecycle that replaces inline DPMS logic and will scale as more policies migrateexpandAppStreamingRolePermissions)LOCK_APPS permission, gated by appLockApis, enabling launcher-level app lockingMANAGE_SUPERVISION (gated by enableSupervisionManagerPolicyApis)Track: QPR1 Beta | Predecessor: QPR1 Beta 3 | Milestone: September 2026 stable
Introduces the device controller concept, content safety apps rename, and WPA enforcement constant.
DPC capabilities
Other enterprise changes
addUserInfoInProfileOffDeadlineAlarm, checkPersonalSuspensionForAllProfiles, and wipeDeviceWhenUserCannotBeRemovedassociateDisallowGrantAdminWithPermission and unsuspendNotSuspendedTrack: Canary | Predecessor: Canary 3 | Note: canary builds are forward-looking and may not ship in the next stable release
Significant build that introduces scaffolding for device admin deprecation and expands the policy metadata system.
DPC capabilities
isDeviceAdminFeatureDisabled() check, all returning false for now. This is preparation for eventually disabling the legacy device admin APIRoleManager reference, adding role-based management alongside traditional owner-based managementOther enterprise changes
addUserInfoInProfileOffDeadlineAlarm, checkPersonalSuspensionForAllProfiles, crossUserSuspensionEnabledRo, and others moved to enabled in the canary trackhasAffiliationWithDevice and isDeviceProvisioned moved to an internal interface, cleaning up the public API surfacepolicyStreamliningTests flag used for internal validation was removedTrack: A17 Beta | Predecessor: A17 Beta 4 | Milestone: June 2026 stable
A patch release that rolled back several flags to their safer defaults on the stable track.
What changed
increaseWatchStrongAuthTimeout, introduceGenericProvisioningError, and useHardenedFrpActiveCheck were all set back to disabled on the stable track. These remained enabled in the canary and QPR1 tracks, meaning the stable Android 17 release shipped without them while they continue development in quarterly releasesenterpriseEsimUsingCarrierPrivileges flag was re-added as enabled after being removed in earlier buildsThis build illustrates how the stable, QPR, and canary tracks can diverge: features that are enabled in QPR and canary builds get rolled back on the stable track when they need more baking time.
Track: QPR1 Beta | Predecessor: QPR1 Beta 2 | Milestone: September 2026 stable
Adds typed policy engine flags for several common restrictions and restores features that had been removed in the canary track.
DPC capabilities
Other enterprise changes
Track: Canary | Predecessor: Canary 2 | Note: canary builds are forward-looking and may not ship in the next stable release
A lighter build focused on private DNS refactoring and overlay resource improvements.
DPC capabilities
Other enterprise changes
#import: directives, allowing one list to reference another. This enables cleaner configuration management for OEMs and enterprise deployments with complex overlay hierarchiesTrack: QPR1 Beta | Predecessor: QPR1 Beta 1 | Milestone: September 2026 stable
Introduces the kiosk user type, device controller role permissions, and assist content policy.
DPC capabilities
Other enterprise changes
USER_TYPE_FULL_KIOSK user type appeared, designed specifically for kiosk device management. This mirrors the kiosk app mode available on ChromeOSTrack: QPR1 Beta | Predecessor: Android 17 stable | Milestone: September 2026 stable
The first QPR1 build, laying groundwork for clipboard policy, factory reset protection improvements, and the policy serialisation framework.
DPC capabilities
Other enterprise changes
Track: Canary | Predecessor: A16 QPR3 Canary 1 | Note: canary builds are forward-looking and may not ship in the next stable release
Establishes the multi-user provisioning state machine and moves supervision APIs to a dedicated manager.
DPC capabilities
Other enterprise changes
DevicePolicyManager to a dedicated SupervisionManager, with feature flags controlling the migration. This cleans up the DPM API surfacePolicyDefinitionFactory.buildAll() landed for metadata-driven policy registration, alongside EnumStoredAsBooleanPolicyHandler for handling enum policies backed by boolean storage. These are foundational policy engine componentsTrack: A17 Beta | Milestone: June 2026 stable
The near-final Android 17 beta, carrying the typed policy engine (present since earlier betas) and cleaning up legacy APIs.
DPC capabilities
setPolicy, getPolicy, getResolvedDeviceWidePolicy, and getResolvedPerUserPolicy are present with typed PolicyIdentifier parameters and built-in multi-admin resolution. These carry @FlaggedApi at API 10000 (provisional) and will ship when the backing flags graduateOther enterprise changes
PackageIdentifier and PackagePolicyValue landed, providing strongly typed infrastructure for policies that operate on specific packagesdeviceOwnerForAll, fixDisabledByAdminShortMessageNotShown, fixUsbDataSignalingRestrictionAfterRebootTrack: Android 16 stable | Note: this is the baseline build used for comparison when tracking Android 17 changes
The Android 16 April stable release serves as the comparison baseline for this tracker. Enterprise-relevant items here represent the stable production state against which Android 17 beta changes are measured.
Key enterprise state at this baseline
clearPolicy, getIntegerPolicy) was present. This approach was superseded by the typed PolicyIdentifier approach in Android 17DISALLOW_HANDOFF user restriction (A16 naming) was present, later renamed to DISALLOW_TASK_CONTINUITY_HANDOFF in Android 17Track: A16 QPR3 Canary | Note: canary builds are forward-looking and may not ship in the next stable release
The earliest build tracked, running on the Pixel 7 before the tracker switched to the Pixel 10. This canary sits on the Android 16 QPR3 branch and contains forward-looking enterprise plumbing.
What appeared