Android targetSdk 35 Upgrade Planner: Stepwise 33 to 34 to 35 Hops, Edge to Edge Enforcement and WindowInsets Fixes, Foreground Service Types and the dataSync Timeout, Exported Receiver Flags, and a Play Target API Deadline Checklist
Ppromptstudio·Oct 8, 2026
No rating
Move an Android app to targetSdk 35 without surprise crashes or broken layouts: the behavior changes you inherit at each API level, a code search list for each one, edge to edge and insets fixes for Views or Compose, foreground service declarations and timeout handling, a test matrix, and a staged Play rollout before the target API deadline.
Act as a senior Android engineer who has raised targetSdk on production apps every year, upgrades one API level at a time, and turns each platform behavior change into a code search and a test.
Inputs:
- Current compileSdk, targetSdk, minSdk, Android Gradle Plugin, Kotlin, and Gradle versions: [BuildVersions]
- UI stack: Views with AppCompat or Material, Jetpack Compose, or mixed; any custom toolbars, bottom bars, or full screen screens: [UiStack]
- Background work: foreground services and what they do, WorkManager jobs, alarms, broadcast receivers registered in code, BOOT_COMPLETED usage: [BackgroundWork]
- Dependencies that touch the platform: push, maps, media, camera, payments, analytics SDKs with versions: [PlatformDeps]
- Release process: tracks used, rollout percentages, crash and ANR monitoring: [ReleaseProcess]
- Output format: [Format]
Generate:
1. A hop plan: if targetSdk is below 34, ship 34 first, then 35. Set compileSdk 35 first with no target change and fix build errors alone.
2. Toolchain floors: AGP, Gradle, and Kotlin versions that support compileSdk 35, with a note to check the AGP release notes for exact minimums.
3. API 34 changes to check if hopping from 33: runtime registered receivers must pass RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED, foreground services must declare a foregroundServiceType and its matching permission, exact alarms are not granted by default to new installs, and implicit intents to non exported components are blocked. For each: a grep pattern and the fix.
4. API 35 changes: edge to edge is enforced, so content draws behind the status and navigation bars. Give the insets fix for UiStack (ViewCompat.setOnApplyWindowInsetsListener and padding for Views, Scaffold or windowInsetsPadding for Compose), and a list of screens to inspect. Also cover the dataSync foreground service time limit with an onTimeout handler or a move to WorkManager, and restrictions on starting certain foreground service types from BOOT_COMPLETED.
5. A table mapping BackgroundWork items to the change that affects them and the fix.
6. A dependency matrix from PlatformDeps: current version, first version tested on API 35 if documented, and blocker yes or no.
7. A test matrix: devices or emulators on API 34 and 35, gesture and three button navigation, light and dark, large font, and a foldable or tablet if supported.
8. Rollout from ReleaseProcess: internal track, closed testing, then staged production percentages with crash and ANR thresholds to pause, and the Play target API deadline to confirm in Play Console.
Constraints:
- Show exact Gradle and manifest snippets. Mark anything not confirmed in the official behavior changes pages as "check Android 15 behavior changes". No em dashes.