Android 17 (API level 37) has rolled out to Pixel devices and a wave of partner phones from Honor, iQOO, Lenovo, OnePlus, OPPO, Realme, Sharp, vivo, and Xiaomi. Google is framing it as the release where Android stops being just an operating system and starts being what they're calling an "intelligence system" — but the more immediately consequential change for anyone shipping apps is a lot simpler: Jetpack Compose is now the only UI toolkit getting new platform investment, and large-screen support just became mandatory. Here's what actually matters if you're targeting SDK 37.
The change that affects every app: Compose-first
This is the headline for existing codebases. As of Android 17, every new Android API, library, and piece of platform guidance is built exclusively for Jetpack Compose. Legacy View-based components — android.widget, Fragments, RecyclerView, ViewPager — are now in maintenance mode: they'll keep getting critical bug fixes, but no new features. If you're still maintaining a View-based app, nothing breaks today, but the platform has told you clearly where its investment is going from here. Google has shipped an XML-to-Compose migration skill specifically to help with this transition, which is as strong a signal as any that they expect a wave of legacy codebases to start migrating over the coming release cycles.
AppFunctions: apps as tools for AI agents
The other big platform addition is AppFunctions — effectively an on-device equivalent of the Model Context Protocol, letting your app expose specific capabilities as orchestrable "tools" that AI agents and assistants (Google's Gemini included) can discover and execute with access to your app's actual state. Implementation is deliberately lightweight — you annotate a suspend function and describe it in KDoc:
class NoteFunctions(private val noteRepository: NoteRepository) {
/**
* Adds a new note to the app.
* @param appFunctionContext The execution context.
* @param title The title of the note.
* @param content The note's content.
*/
@AppFunction(isDescribedByKDoc = true)
suspend fun createNote(
appFunctionContext: AppFunctionContext,
title: String,
content: String
): Note {
return noteRepository.createNote(title, content)
}
}
Android Studio ships an AppFunctions agent skill that generates this kind of Kotlin boilerplate and optimizes your KDocs automatically, plus a test agent app for trying it locally before wider rollout. If your app has a natural "action" a user might ask an assistant to perform on their behalf — creating a note, starting a timer, adding an item to a list — this is the API built for exposing that.
Large-screen support is no longer optional
This is the change most likely to actually break something if you ignore it. For apps targeting API 37+, the system now ignores screenOrientation, resizeableActivity=false, and aspect ratio constraints on large screens (anything over 600dp shortest width) — there's no opt-out. Games are exempt based on their Play Store category, but everything else is expected to support free-form windowing and every window size. Pair that with new multitasking surfaces — App Bubbles (long-press a launcher icon to float any app), a Bubble Bar for organizing them on tablets and foldables, and a fully interactive Desktop Picture-in-Picture mode (not the read-only PiP you're used to) — and it's clear Google is pushing hard on Android as a genuine multi-window, multi-device platform, not just a phone OS with tablet support bolted on.
Compose helps here too: the new NavigationSuiteScaffold can automatically transition a bottom nav bar into navigation rails as the window grows, and Navigation 3's Scenes (ListDetailSceneStrategy, SupportingPaneSceneStrategy) give you multi-pane layouts without hand-rolling breakpoint logic yourself.
Performance changes worth knowing about
A few platform-level performance changes land in this release that are worth being aware of even if they don't require code changes:
- Stricter per-device memory limits are now enforced based on device RAM — running R8 in full mode is strongly recommended, and Android Studio's new R8 Configuration Analyzer can verify your optimization settings.
- Generational garbage collection (available via Google Play system updates back to Android 12+) does more frequent young-generation collections, which should mean less CPU/battery drain and fewer UI stutters from GC pauses.
- A lock-free MessageQueue on SDK 37+ is meant to reduce frame drops and improve both app startup time and multithreaded performance.
Privacy and security changes
Several privacy-preserving APIs landed alongside the intelligence-system framing: a System Contact Picker that grants temporary access to specific contact fields instead of the broad READ_CONTACTS permission, a session-only precise location button, and an EyeDropper API for system color picking without needing screen-capture permission. On the security side, Android 17 adds post-quantum cryptography support via ML-DSA key generation and a hybrid classical/ML-DSA APK signature scheme (v3.2), tightens rules around dynamic native code loading (libraries loaded via System.load() must now be read-only, or you'll hit an UnsatisfiedLinkError), and adds delays to SMS OTP delivery for apps targeting SDK 37+ as an anti-fraud measure, with exemptions for default SMS, assistant, and companion apps.
Your migration checklist before targeting SDK 37
- Test resizability on large screens and remove any resizability opt-outs in your manifest.
- Verify any native dynamic code loading uses read-only files.
- Migrate to the new privacy-preserving pickers, especially if you touch local network access (now gated behind
ACCESS_LOCAL_NETWORKor a system device picker). - Update CameraX to 1.5.2 or 1.6.0+ specifically — older versions are reported to crash on Android 17.
- If you access the NPU, declare
FEATURE_NEURAL_PROCESSING_UNITexplicitly. - Test on an actual Android 17 device or a 64-bit emulator image before you ship a targetSdk bump.
The bottom line
Android 17 is less about any single flashy feature and more about Google drawing a clear line under where the platform is headed: Compose as the only fully-supported UI layer, large-screen and multi-window support as a baseline requirement rather than a nice-to-have, and on-device AppFunctions as the standard way apps expose capability to AI agents. None of it forces an immediate rewrite if you're not targeting SDK 37 yet — but if you're planning your Compose migration timeline, this release is a strong signal to stop treating it as optional.