When you upload an APK, it needs to meet Google Play’s target API level requirements. New apps must target Android 10 (API level 29) or higher and app updates must target Android 9 (API level 28) or higher.

Note: From 2 November 2020, app updates must target Android 10 (API level 29) or higher.

Every new Android version introduces changes that bring significant security and performance improvements as well as enhance the user experience of Android overall. Some of these changes only apply to apps that explicitly declare support through their targetSdkVersion manifest attribute (also known as the target API level).

Configuring your app to target a recent API level ensures that users can benefit from these improvements, while still allowing it to run on older Android versions. Targeting a recent API level also allows your app to take advantage of the platform's latest features to delight your users. Furthermore, as of Android 10 (API level 29), users see a warning when starting an app for the first time if the app targets Android 5.1 (API level 22) or lower.

This document highlights important points you need to know in updating your target API level to meet the Google Play requirement.

Note: If your Gradle file contains manifest entries, you can confirm or change the current value of targetSdkVersion in your app's Gradle file, as described in Configure your build. Alternatively, you can use the android:targetSdkVersion attribute in the manifest file, as described in the documentation for the <uses-sdk> manifest element.

Migrating from Android 9 (API level 28) to Android 10 (API level 29)

For an exhaustive list of changes introduced in Android 10 (API level 29), see the Behavior Changes page for that version of the platform.

Modernizing your apps

As you update the target API level for your apps, consider adopting recent platform features to modernize your apps and delight your users.

Make sure that your third-party SDK dependencies support API 29: Some SDK providers publish it in their manifest; others will require additional investigation. If you use an SDK that doesn't support API 29, make it a priority to work with the SDK provider to resolve the issue.

Additionally, note that your app or game's targetSdkVersion may restrict access to private Android platform libraries; see NDK Apps Linking to Platform Libraries for details.

You should also verify any restrictions that may exist in the version of the Android Support Library that you're using. As always, you must ensure compatibility between the major version of Android Support Library and your app’s compileSdkVersion .

We recommend that you choose a targetSdkVersion smaller than or equal to the Support Library’s major version. We encourage you to update to a recent compatible Support Library in order to take advantage of the latest compatibility features and bug fixes.

Test your app

After you update your app's API level and features as appropriate, you should test some core use cases. The following suggestions are not exhaustive, but aim to guide your testing process. We suggest testing:

That your app compiles to API 29 without errors or warnings.

That your app has a strategy for cases where the user rejects permission requests, and prompts the user for permissions. To do so: Go to your app's App Info screen, and disable each permission. Open the app and ensure no crashes. Perform core use case tests and ensure required permissions are re-prompted.

Handles Doze with expected results and no errors. Using adb, place your test device into Doze while your app is running. Test any use cases that trigger Firebase Cloud Messaging messages. Test any use cases that use Alarms or Jobs. Eliminate any dependencies on background services. Set your app into App Standby Test any use cases that trigger Firebase Cloud Messaging messages. Test any use cases that use Alarms.

Handles new photos / video being taken Check that your app handles the restricted ACTION_NEW_PICTURE and ACTION_NEW_VIDEO broadcasts correctly (that is, moved to JobScheduler jobs). Ensure that any critical use cases that depend on these events still work.

Handles sharing files to other apps Test any use case that shares file data with any other app (even another app by the same developer) Test the content is visible in the other app and doesn’t trigger crashes.



Further information

Opt in to emails in the Google Play Console so that we can send you important updates and announcements from Android and Google Play, including our monthly partner newsletter.