Android Version
17
Released 16 Jun 2026
(4 days ago)
SoftwareAndroid OS
Version17
Release date16 Jun 2026
(4 days ago)
CodenameCinnamon Bun
API level37
Security supportYes
Source codehttps://android.googlesource.com/platform/frameworks/base/+/android-17.0.0_r1
Documentationhttps://developer.android.com/about/versions/17
Android OS 17 ReleasesView full list

What Is New in Android 17

Category Highlights
New Features
  • Bubbles: a floating-window multitasking mode triggered by a long-press on any app icon, with a dedicated bubble bar on large screens
  • Screen Reactions: records the front camera and the device screen at the same time through a redesigned recording toolbar
  • Foldable gaming mode: a 50/50 game-and-gamepad layout plus native controller remapping
  • An enhanced "Mark as lost" option in Find Hub that locks a missing phone behind biometrics
  • A new ACCESS_LOCAL_NETWORK runtime permission with system-mediated device pickers for LAN discovery
  • Encrypted Client Hello (ECH) support, configurable per domain through the new domainEncryption network security config element
  • A contact picker for sharing individual contacts instead of granting full READ_CONTACTS access
  • Expanded Parental Controls available on all Android devices
  • LeakCanary built directly into the Android Studio Profiler
  • ProfilingManager triggers for anomaly-based heap dump capture
  • Autonomous Bluetooth re-pairing that recovers lost bonds without a trip to Settings
  • Home screen app name hiding, a dedicated assistant volume control, and expanded dark theme options
Improvements
  • ART tuning that runs more frequent, lighter young-generation garbage collections alongside full-heap collections
  • More efficient memory cleanup during gameplay, reducing frame drops and stutters
  • Stronger Live Threat Detection and a hardened Advanced Protection mode against scams and sophisticated attacks
  • Fewer allowed PIN guesses with longer lockout windows between attempts
  • Touchpads deliver relative pointer events by default during pointer capture, matching captured-mouse behavior
  • Richer accessibility feedback for CJKV input methods through new TextAttribute and AccessibilityEvent APIs
  • Photo Picker grid aspect ratio customization
Breaking Changes
  • The large screen orientation and resizability opt-out from API level 36 is removed for apps targeting API level 37
  • static final fields can no longer be modified through reflection or JNI
  • A lock-free MessageQueue implementation can break code that reflects on its private fields or methods
  • RFCOMM BluetoothSocket reads now return -1 on disconnect instead of relying on an IOException
  • Certificate transparency is enabled by default for apps targeting API level 37
  • Safer Dynamic Code Loading now covers native libraries loaded with System.load()
  • Contacts Provider 2 hides ACCOUNT_NAME, ACCOUNT_TYPE, and ACCOUNT_TYPE_AND_DATA_SET from the data view
  • Contacts Provider 2 enforces strict SQL validation for queries made without READ_CONTACTS
  • Local network permission enforcement is now mandatory instead of opt-in
  • The SMS OTP delay now covers standard SMS for apps targeting API level 37, and WebOTP messages for all apps
  • App memory limits apply to every app, regardless of targetSdkVersion
  • Cross-profile loopback traffic is blocked by default
  • IME visibility is no longer restored automatically after an unhandled configuration change
  • Background audio playback, focus requests, and volume changes now require a valid foreground state
  • Keystore enforces a 50,000 key ceiling for apps targeting API level 37, versus 200,000 for everyone else
Deprecations
  • usesCleartextTraffic is slated for removal in favor of network security configuration files
  • Implicit URI grants for Send, SendMultiple, and ImageCapture intents are planned to stop in Android 18
  • The legacy MODE_BACKGROUND_ACTIVITY_START_ALLOWED constant is being phased out in favor of granular BAL controls like MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE

How does Android 17 change multitasking and productivity?

Android 17's most visible change for daily use is Bubbles, a floating-window mode that turns any app into a small overlay you can keep open while doing something else. Long-pressing an app icon converts it into a bubble that floats on top of other apps; on large screens, bubbles dock into a dedicated bubble bar so users can switch, resize, or maximize them with one tap.

Screen Reactions pairs the front camera and screen recording into one flow, with a redesigned toolbar that captures both at once without switching apps or needing a green screen. Foldable gaming mode adds an optimized 50/50 layout, with the game view on top and a dynamic gamepad below, and supports native controller remapping for external controllers.

A handful of smaller changes round out the release: an option to hide app names on the home screen, a dedicated volume control for the assistant, expanded dark theme controls, and Parental Controls now available on all Android devices rather than a subset.

In practice, none of this requires code changes for most apps, since bubbles and foldable gaming mode are system-level window behaviors. It is still worth re-testing how your activity handles being resized into a small bubble window or a 50/50 split, especially if your layout code assumes a minimum width.

What new privacy and permission requirements land in Android 17?

Android 17 closes off several data access paths apps have relied on without explicit consent, and the one most teams will hit first is the new ACCESS_LOCAL_NETWORK runtime permission. It falls under the existing NEARBY_DEVICES group, so users who already granted other nearby permissions are not prompted again, but apps targeting API level 37 must either adopt a system-mediated device picker or explicitly request the permission to keep discovering devices on the LAN.

  • Encrypted Client Hello (ECH) encrypts the SNI in the TLS handshake for apps targeting API level 37, configurable per domain through a new domainEncryption element; it only activates if both the app's networking library and the remote server support it.
  • A new contact picker lets apps request specific contacts instead of broad READ_CONTACTS access.
  • Contacts Provider 2 removes ACCOUNT_NAME, ACCOUNT_TYPE, and ACCOUNT_TYPE_AND_DATA_SET from the data view for apps targeting API level 37; pull those columns from RawContacts by joining on RAW_CONTACT_ID instead.
  • Contacts Provider 2 also enforces strict SQL grammar and column checks when an app queries the data table without READ_CONTACTS, rejecting incompatible query patterns.
  • SMS OTP protection now extends to WebOTP-format messages for all apps, and to standard SMS messages for apps targeting API level 37; affected messages are withheld from SMS_RECEIVED_ACTION and provider queries for three hours unless the app is exempt.
  • Cross-profile loopback traffic is blocked by default for every app on the device, regardless of target SDK.

This matters if your app discovers smart home or casting devices over the local network, mirrors contacts for backup or sync, or extracts OTPs by parsing raw SMS messages, since each of those paths now needs explicit migration to the supported APIs.

What breaking changes should you test before targeting API level 37?

Several changes in Android 17 can break working code silently once targetSdkVersion moves to 37, so they deserve a dedicated regression pass before launch. The large-screen orientation and resizability opt-out introduced in API level 36 is removed entirely on devices with a smallest width of 600dp or more, meaning locked orientation and fixed aspect ratios are ignored and apps must rely on adaptive layout APIs like window size classes instead of hardcoded screen dimensions.

static final fields can no longer be modified at runtime: reflection throws an IllegalAccessException, and modifying one through JNI's SetStaticField family crashes the app outright. Watch out for this if your test suite swaps constants via reflection to fake dependencies between tests, since that pattern needs to move to proper dependency injection before targeting API level 37.

The new lock-free MessageQueue implementation improves performance and reduces missed frames, but it can break code that reflects into MessageQueue's private fields or methods. RFCOMM BluetoothSocket reads also change behavior: the InputStream.read() method now returns -1 when the connection drops instead of relying on an IOException, so a read loop that only catches the exception to detect disconnects will need an explicit check.

int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
    handleData(buffer, bytesRead);
}
// bytesRead == -1 now means the remote device disconnected or the socket closed

Two more changes apply regardless of target SDK and are easy to miss in QA: if your activity does not handle a configuration change such as rotation, the IME no longer reappears automatically afterward (set android:windowSoftInputMode to stateAlwaysVisible or request it explicitly in onCreate() or onConfigurationChanged()), and background audio playback, focus requests, and volume changes now require the app to be running a foreground service with while-in-use capabilities, or to hold the exact alarm permission for alarm streams.

How does Android 17 manage memory and improve performance?

Android 17 enforces app memory limits for every app on the device, regardless of targetSdkVersion, which is the headline performance change in this release. Limits are based on the device's total RAM and set conservatively in this release to catch extreme memory leaks and outliers before they cause UI stuttering, higher battery drain, or app kills; Google expects minimal impact on the vast majority of sessions, but recommends teams establish a memory baseline now rather than after users start reporting kills.

If your app was affected, you can confirm it through ApplicationExitInfo after the next launch.

List<ApplicationExitInfo> infos =
        activityManager.getHistoricalProcessExitReasons(null, 0, 1);
ApplicationExitInfo info = infos.get(0);
if (info.getReason() == ApplicationExitInfo.REASON_OTHER
        && info.getDescription().contains("MemoryLimiter:AnonSwap")) {
    // the previous session was likely killed by the new memory limiter
}

ART also gets a tuning pass, running more frequent and lighter young-generation collections alongside full-heap collections to cut overall garbage collection CPU cost; these improvements reach devices back to API level 31 through Google Play system updates, not just devices on Android 17. For day to day debugging, LeakCanary is now built directly into the Android Studio Profiler as a dedicated task, and ProfilingManager gains a new anomaly trigger that captures a heap dump automatically when the memory limiter kicks in.

On the gaming side, more efficient memory cleanup reduces frame drops and stutters during high-definition gameplay. Keystore also gets a usage ceiling in this release: apps targeting API level 37 are capped at 50,000 keys, versus 200,000 for everyone else, and exceeding the limit throws a KeyStoreException.

Most teams will not notice a day to day difference, but if your app has a known memory leak you have been putting off, this release is where it starts costing you in the form of background kills rather than just slow growth.

What security and anti-theft features land in Android 17?

Android 17's security story splits into anti-theft tools for users and secure-by-default platform changes for developers. On the user side, an enhanced "Mark as lost" option in Find Hub locks a missing phone behind biometrics, so even a thief with the correct passcode cannot access the device or turn off tracking; Live Threat Detection blocks more suspicious apps and scams, Advanced Protection mode is hardened against sophisticated attacks, and the system now allows fewer PIN guesses with longer wait times between failed attempts.

Bluetooth gets autonomous re-pairing, so the system resolves a lost bond in the background instead of forcing the user into Settings to unpair and re-pair a peripheral. Developers should note the new EXTRA_PAIRING_CONTEXT extra on pairing requests, which distinguishes a standard request from an autonomous re-pairing attempt, and that ACTION_KEY_MISSING now only fires if the autonomous attempt fails.

For developers, two platform defaults shift in this release. Certificate transparency is enabled by default for apps targeting API level 37, where it previously required an explicit opt-in on Android 16, and Safer Dynamic Code Loading now extends to native libraries, so any file loaded with System.load() must be marked read-only or the system throws an UnsatisfiedLinkError.

This matters if your app dynamically loads native libraries for plugins, mods, or a game engine, since an unmarked file that worked fine on Android 16 will now fail to load instead of silently succeeding.

Frequently Asked Questions about Android OS 17

Does upgrading to Android 17 require changes to existing apps?
Most apps keep running unchanged after the OS upgrade, but behavior changes that apply regardless of target SDK, such as the new app memory limits, the WebOTP SMS delay, and the block on cross profile loopback traffic, can still affect a running app even if you have not touched targetSdkVersion.

What happens to apps that lock orientation on large screens?
Apps could opt out of forced orientation and resizability rules on large screens while targeting API level 36, but that opt out is removed once an app targets Android 17, API level 37, so locked orientation and fixed aspect ratios are ignored on tablets and foldables with a smallest width of 600dp or more.

How can I tell if the new memory limits killed my app session?
Call getDescription on the app's ApplicationExitInfo after the next launch, and if the exit reason is REASON_OTHER with a description containing the text MemoryLimiter:AnonSwap, the previous session was likely killed by the new memory limiter rather than a crash in your own code.

Will reflection based hacks on static final fields still work?
No, attempting to modify a static final field through reflection now throws an IllegalAccessException, and doing the same through JNI crashes the app outright.

Do apps still need to opt into certificate transparency manually?
No, certificate transparency is enabled by default for apps that target API level 37.

Should teams migrate off usesCleartextTraffic now?
Yes, Google has flagged usesCleartextTraffic for deprecation in a future release, so apps with a minimum API level of 24 or higher should move to a network security configuration file now instead of waiting for the attribute to disappear.

Releases In Branch 17

VersionRelease date
17.0.0_r116 Jun 2026
(4 days ago)