Google has progressively introduced and tightened requirements around the targetSdkVersion apps must declare in order to be installed on devices and distributed through Google Play. These requirements exist as two distinct mechanisms: an on-device installation block enforced by Android itself, and Google Play's submission requirements that control app visibility and distribution. Together, they push the ecosystem towards modern, secure API levels.
Starting with Android 14, Google introduced an OS-level enforcement that outright prevents the installation of applications targeting very old API levels. When an app fails this check, Android throws an INSTALL_FAILED_DEPRECATED_SDK_VERSION security exception, and the installation is blocked regardless of the source - whether sideloaded, pushed via an EMM, or installed from a store.
The only bypass available is through ADB:
adb install --bypass-low-target-sdk-block name_of_package.apk
This on-device block has incremented as follows:
| Android version | API level | Minimum targetSdkVersion to install |
Equivalent Android version |
|---|---|---|---|
| Android 14 | 34 | 23 | Android 6.0 (Marshmallow) |
| Android 15 | 35 | 24 | Android 7.0 (Nougat) |
| Android 16 | 36 | 24 (unchanged) | Android 7.0 (Nougat) |
| Android 17 | 37 | 24 (unchanged) | Android 7.0 (Nougat) |
Android 17, like 16 a year before it, has maintained the minimum at API 24. For a security policy introduced as a moving target, this is beginning to look more like a quiet dismissal of the requirement, perhaps conceding to its unpopularity within the community.
Apps already installed on a device before an OS upgrade are not affected; the block only applies to new installations.
For further details on the on-device block, see:
Separately from the on-device block, Google Play enforces its own targetSdkVersion requirements for app submission and visibility. These requirements have been in place since 2018 and follow an annual cadence, typically requiring developers to target an API level within one version of the latest Android release.
There are two aspects to Google Play's enforcement:
| Year | New apps & updates must target | Existing apps minimum to remain visible | Key dates |
|---|---|---|---|
| 2018 | API 26 - Android 8.0 (Oreo) | N/A | August 2018 (new), November 2018 (updates) |
| 2019 | API 28 - Android 9 (Pie) | N/A | August 2019 (new), November 2019 (updates) |
| 2020 | API 29 - Android 10 | N/A | August 2020 (new), November 2020 (updates) |
| 2021 | API 30 - Android 11 | N/A | August 2021 (new), November 2021 (updates) |
| 2022 | API 31 - Android 12 | API 30 - Android 11 (from January 2023) | August 2022 (new), November 2022 (updates) |
| 2023 | API 33 - Android 13 | API 31 - Android 12 | August 31, 2023 |
| 2024 | API 34 - Android 14 | API 33 - Android 13 | August 31, 2024 |
| 2025 | API 35 - Android 15 | API 34 - Android 14 | August 31, 2025 |
| 2026 | API 36 - Android 16 | API 35 - Android 15 | August 31, 2026 |
The 2026 submission requirements differ by device category: Wear OS and Android Automotive OS apps must target at least API 35; Android TV and Android XR apps must target at least API 34. Existing-app visibility thresholds also differ by category, so check Google Play's current policy for those details. Developers can request an extension to November 1, 2026.
Permanently private apps restricted to users in a specific organisation for internal distribution are exempt from Google Play's target API level requirements.
For organisations managing devices through an EMM, both mechanisms are relevant:
For Android 14-17 devices, enterprise apps need to target at least API level 24 (Android 7.0) to clear the on-device installation block on the builds covered above. For public apps on Google Play, new submissions and updates now need API 36, while existing apps need API 35 to remain visible to new users on newer devices.
To validate the on-device minimum targetSdkVersion behaviour, the following demo APKs are available for sideloading. Each targets a specific API level and can be used to confirm which apps will and won't install on a given Android version:
To test, push an APK via ADB:
adb install bayton-sdk-demo-target22-android5.1.apk
On Android 14+ this will fail for APKs below the minimum targetSdkVersion with INSTALL_FAILED_DEPRECATED_SDK_VERSION. To bypass the block for testing purposes:
adb install --bypass-low-target-sdk-block bayton-sdk-demo-target22-android5.1.apk
The above applications have never been on Google Play and will likely trigger a Play Protect warning, you can bypass this when it pops up, otherwise you will receive a INSTALL_FAILED_VERIFICATION_FAILURE error. This is separate to the target SDK warnings.
The source code for these applications can be found on GitHub.