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+.
Your Current Target SDK:→Target SDK 35 (Android 15)
CriticalUI & Display
Applies when targeting API 35Enforced Edge-to-Edge Display by Default
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
kotlinimport 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
Applies when targeting API 3516 KB Memory Page-Size Alignment for Native Libraries (.so)
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
groovyandroid {
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
cppFlags "-Wl,-z,max-page-size=16384"
}
}
}
}HighBackground & Services
Applies when targeting API 356-Hour Timeout on dataSync and mediaProcessing Foreground Services
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
kotlinval 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
Applies when targeting API 35Predictive Back Gesture Navigation Transitions
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
Applies when targeting API 35Stricter Background Activity Launch (BAL) Restrictions
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.