← All release notes
AndroidAndroid 15Sep 17, 2024 · 5 min read

What's New in Android 15 for Developers

Android 15 forces edge-to-edge by default, tightens MediaProjection consent, and starts the 16 KB page size migration.

Android 15 continues the platform-hardening arc from 14. This time the headline items are UI-shape changes that break layouts silently rather than crashing outright. There's also groundwork for a page-size migration that has nothing to do with your Kotlin code at all.

#Edge-to-edge is no longer optional

Target API 35 and the system enforces edge-to-edge for you. Window.setStatusBarColor() and setNavigationBarColor() become no-ops, and content draws under the status and navigation bars by default.

If you haven't already adopted enableEdgeToEdge() and window insets handling, your layout will visually break the moment you raise targetSdkVersion. Content hidden under system bars. No crash, no warning.

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            Scaffold { padding ->
                Box(modifier = Modifier.padding(padding)) {
                    AppContent()
                }
            }
        }
    }
}

Use it when: always, once you target API 35. This isn't a feature you choose to adopt. It's a default you have to handle.

#Preparing for 16 KB memory pages

Android is moving toward a default page size of 16 KB on some devices, up from the traditional 4 KB. Android 15 is where the platform and emulator images first offer a way to boot and test against 16 KB pages.

Native code is where this bites. If your app or any of its native (NDK) dependencies hardcode 4 KB page-size assumptions, they can crash on 16 KB devices. Pure-Kotlin/JVM apps with no native libraries are unaffected. Anything shipping .so files needs a rebuild against a current NDK and a test run on a 16 KB system image.

#MediaProjection asks again, every time

Screen capture and screen-cast via MediaProjection no longer let you treat the user's consent as durable across a session. Apps targeting API 35 should expect the system consent dialog on every capture start, even if the user approved it moments earlier in the same app session.

val projectionManager = getSystemService(MediaProjectionManager::class.java)
val intent = projectionManager.createScreenCaptureIntent()
screenCaptureLauncher.launch(intent)

Use it when: any screen recording, casting, or accessibility-adjacent screen-sharing feature. Budget for a consent prompt on every capture start, not just the first.

#PDF rendering improvements

PdfRenderer picks up capabilities that used to require a third-party library: better handling of password-protected documents, and improved rendering fidelity for complex pages.

Say you bundle a renderer library today purely for password support. It's worth checking whether the platform API now covers your case. Verify the exact method signatures against the current API docs before you commit to a migration, since this corner of the API has evolved across recent releases.

#Health Connect is part of the platform

Health Connect is the unified store for fitness and health data, and it used to ship as a separate Play-distributed app. On devices running Android 14 and later, including Android 15, it's bundled as part of the OS.

If you integrate with Health Connect, stop instructing users to install a companion app on these versions. Rely on the system package instead, with a Play Store fallback for older OS versions.

#What to adopt first

  • Edge-to-edge is mandatory, not optional — audit every screen for content sitting under system bars before you touch targetSdkVersion 35. This is the one item on this list that will visibly break your UI for every user.
  • MediaProjection re-consent only matters if you already ship screen capture or cast. Update your UX copy so a repeated system dialog doesn't read as a bug.
  • 16 KB page size is a native-library problem, not a Kotlin problem. No NDK dependencies, directly or transitively via an SDK? Deprioritize it. If you do have them, start testing on a 16 KB system image now rather than after Play enforcement dates arrive.
  • Health Connect and PDF changes are opportunistic. Adopt when you're already touching that code, not urgent enough to schedule dedicated work.