Android Target SDK 35 (Android 15) Migration Advisor

Step-by-step migration guide for Google Play’s mandatory Target SDK 35 deadline. Resolve Android 15 breaking changes: edge-to-edge layout enforcement, 16 KB page-size alignment, foreground service timeouts, and back gestures.

100% client-side · Private by design · No account required

Android 15 (API 35) Release Radar

Android Target SDK 35 Migration & Breaking Changes Advisor

Step-by-step migration guide for Google Play's mandatory Target SDK 35 deadline. Audit edge-to-edge layouts, 16 KB page-size alignment, foreground service timeouts, and back gestures.

Google Play Mandatory Target API Level 35 Deadline

Apps that do not target Android 15 cannot submit new app releases or updates, and become unsearchable on Google Play for devices running Android 15+.

August 31, 2025 (Extensions until Nov 1)
Your Current Target SDK:
→Target SDK 35 (Android 15)
CriticalUI & Display

Enforced Edge-to-Edge Display by Default

Applies when targeting API 35
Impact: Apps targeting Android 15 (API 35) are displayed edge-to-edge by default. The system status bar and navigation bar become transparent or translucent, and content draws behind system bars.
Action Required: Call enableEdgeToEdge() in Activity.onCreate() and apply WindowInsetsCompat padding to top app bars and bottom navigation bars to prevent UI overlapping with system gestures and camera cutouts.
Activity Edge-to-Edge & WindowInsets Handling
kotlin
import androidx.activity.enableEdgeToEdge
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        // 1. Enable edge-to-edge layout before setContentView
        enableEdgeToEdge()
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 2. Consume system insets on root view
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.rootLayout)) { view, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            view.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
    }
}
CriticalNative & Performance

16 KB Memory Page-Size Alignment for Native Libraries (.so)

Applies when targeting API 35
Impact: Android 15 introduces support for 16 KB memory page sizes. Native shared libraries (.so) compiled with traditional 4 KB ELF alignment crash immediately on 16 KB devices.
Action Required: Recompile all C/C++ native libraries using NDK r27+ or add the linker flag -Wl,-z,max-page-size=16384 in CMakeLists.txt or build.gradle.
build.gradle NDK 16 KB Linker Flag
groovy
android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
                cppFlags "-Wl,-z,max-page-size=16384"
            }
        }
    }
}
HighBackground & Services

6-Hour Timeout on dataSync and mediaProcessing Foreground Services

Applies when targeting API 35
Impact: Android 15 imposes a strict 6-hour execution limit within any 24-hour window on foreground services of type dataSync and mediaProcessing. Exceeding the limit throws a ServiceTimeoutException.
Action Required: Migrate long-running periodic synchronization and file processing to AndroidX WorkManager (Constraints & Expedited jobs) instead of continuous Foreground Services.
WorkManager Replacement for Continuous FGS
kotlin
val syncWorkRequest = OneTimeWorkRequestBuilder<SyncWorker>()
    .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
    .setConstraints(
        Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .setRequiresBatteryNotLow(true)
            .build()
    )
    .build()

WorkManager.getInstance(context).enqueue(syncWorkRequest)
MediumUI & Display

Predictive Back Gesture Navigation Transitions

Applies when targeting API 35
Impact: Predictive back animations show a live preview of the previous screen or launcher when swiping back. Custom onBackPressed() logic without OnBackPressedCallback can break smooth navigation.
Action Required: Set android:enableOnBackInvokedCallback="true" in AndroidManifest.xml and migrate all deprecated onBackPressed() calls to OnBackPressedDispatcher.
AndroidManifest.xml Predictive Back Flag
xml
<application
    android:enableOnBackInvokedCallback="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name">
    <!-- Activities -->
</application>
HighSecurity & Privacy

Stricter Background Activity Launch (BAL) Restrictions

Applies when targeting API 35
Impact: Android 15 prevents apps in the background from launching activities unless an explicit PendingIntent creator opt-in is configured via ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode().
Action Required: Review all PendingIntent notifications and widget clicks. Explicitly grant MODE_BACKGROUND_ACTIVITY_START_ALLOWED if your notification intentionally launches an activity from background.

Recommended app/build.gradle.kts Configuration for Android 15:

android {
    namespace = "com.yourcompany.app"
    compileSdk = 35

    defaultConfig {
        applicationId = "com.yourcompany.app"
        minSdk = 24 // Android 7.0 (Nougat) minimum
        targetSdk = 35 // Android 15 mandatory target
        versionCode = 100
        versionName = "1.0.0"
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
}

Frequently asked questions

When is the Google Play deadline to target Android 15 (API 35)?
Google Play requires all new apps and app updates to target API level 35 (Android 15) by August 31, 2025. Developers can request an extension until November 1, 2025, directly within Google Play Console.
What happens if I miss the Google Play Target SDK deadline?
If your app fails to meet the target API requirement, you cannot submit updates or new releases. Existing apps will stop being discoverable to new users whose devices run an Android OS version higher than your app’s target SDK.
How do I fix edge-to-edge layout overlapping with status bar icons in Android 15?
Call enableEdgeToEdge() in your activity before setContentView, and use ViewCompat.setOnApplyWindowInsetsListener to apply system bar insets as padding on your top toolbar and bottom navigation views.
How do I verify if my APK native libraries are 16 KB aligned?
Use the Android NDK objdump or readelf utility: readelf -l libyourlibrary.so | grep LOAD. Look for an Align value of 0x4000 (16384 bytes). Alternatively, run our in-browser APK & AAB Pre-Flight Scanner.

Related tools