Introduction
If you’ve ever stared at a minSdkVersion field in a build.gradle file and wondered what you’re actually targeting, this is for you. Android’s API levels are the backbone of app compatibility — each one represents a specific set of capabilities, behaviors, and restrictions that your app can rely on (or must work around).
The API level system started simple: Android 1.0 was API Level 1. Android 1.1 bumped it to 2. Cupcake made it 3. And from there, the numbers climbed with every release, sometimes skipping levels (there’s no API Level 13 gap — Honeycomb used 11, 12, and 13), sometimes adding multiple levels in a single version cycle.
This chart covers every API level from 1 to 35, what version it corresponds to, and the headline feature or change that defined it. Bookmark this. You’ll need it.
Complete API Level Chart
| API Level | Android Version | Codename | Release Date | Headline Feature |
|---|---|---|---|---|
| 1 | 1.0 | (none) | Sep 23, 2008 | Initial release |
| 2 | 1.1 | Petit Four | Feb 9, 2009 | Bug fixes, reviews support |
| 3 | 1.5 | Cupcake | Apr 27, 2009 | On-screen keyboard, widgets, video recording |
| 4 | 1.6 | Donut | Sep 15, 2009 | CDMA support, Quick Search Box, WVGA |
| 5 | 2.0 | Eclair | Oct 26, 2009 | Google Maps Navigation, multi-touch, HTML5 |
| 6 | 2.0.1 | Eclair | Dec 3, 2009 | Minor bug fixes |
| 7 | 2.1 | Eclair | Jan 12, 2010 | Live wallpapers, Flash support |
| 8 | 2.2 | Froyo | May 20, 2010 | Dalvik JIT, Wi-Fi hotspot, apps on SD |
| 9 | 2.3 | Gingerbread | Dec 6, 2010 | NFC, SIP VoIP, concurrent GC |
| 10 | 2.3.3 | Gingerbread | Feb 9, 2011 | Dual-core support, NFC refinements |
| 11 | 3.0 | Honeycomb | Feb 22, 2011 | Tablet holographic UI, fragments, Action Bar |
| 12 | 3.1 | Honeycomb | May 10, 2011 | USB host, resizable widgets |
| 13 | 3.2 | Honeycomb | Jul 15, 2011 | Screen size compatibility zoom |
| 14 | 4.0 | Ice Cream Sandwich | Oct 19, 2011 | Holo design, Roboto font, virtual buttons |
| 15 | 4.0.3 | Ice Cream Sandwich | Dec 16, 2011 | Social stream API, camera refinements |
| 16 | 4.1 | Jelly Bean | Jul 9, 2012 | Project Butter, Google Now, expandable notifications |
| 17 | 4.2 | Jelly Bean | Nov 13, 2012 | Lock screen widgets, Quick Settings, multi-user |
| 18 | 4.3 | Jelly Bean | Jul 24, 2013 | BLE, OpenGL ES 3.0, SELinux enforcing |
| 19 | 4.4 | KitKat | Oct 31, 2013 | Project Svelte, ART (experimental), HCE |
| 20 | 4.4W | KitKat Wear | Jun 25, 2014 | Android Wear (watch-specific) |
| 21 | 5.0 | Lollipop | Nov 3, 2014 | Material Design, ART mandatory, JobScheduler |
| 22 | 5.1 | Lollipop | Mar 9, 2015 | Multi-SIM, HD voice, device protection |
| 23 | 6.0 | Marshmallow | Oct 5, 2015 | Runtime permissions, Doze, fingerprint API |
| 24 | 7.0 | Nougat | Aug 22, 2016 | Multi-window, bundled notifications, Vulkan |
| 25 | 7.1 | Nougat | Oct 4, 2016 | App shortcuts, round icons, image keyboard |
| 26 | 8.0 | Oreo | Aug 21, 2017 | Notification channels, PiP, Treble, Autofill |
| 27 | 8.1 | Oreo | Dec 5, 2017 | Android Go, Neural Networks API |
| 28 | 9 | Pie | Aug 6, 2018 | Gesture nav, Digital Wellbeing, Adaptive Battery |
| 29 | 10 | Android 10 | Sep 3, 2019 | Full gesture nav, dark theme, Scoped Storage |
| 30 | 11 | Android 11 | Sep 8, 2020 | Conversations, Bubbles, one-time permissions |
| 31 | 12 | Android 12 | Oct 4, 2021 | Material You, Privacy Dashboard, stretch overscroll |
| 32 | 12L | Android 12L | Mar 7, 2022 | Large-screen taskbar, two-column layouts |
| 33 | 13 | Android 13 | Aug 15, 2022 | Themed icons, per-app language, Photo Picker |
| 34 | 14 | Android 14 | Oct 4, 2023 | Lock screen customization, Health Connect, Ultra HDR |
| 35 | 15 | Android 15 | Oct 15, 2024 | Satellite connectivity, Private Space, app archiving |
Understanding API Level Targeting
Every Android app declares three API levels in its build configuration:
minSdkVersion: The oldest Android version the app supports. Users on older versions can’t install it. Setting this determines which APIs you can call without runtime checks.targetSdkVersion: The API level the app was tested against. This controls behavior compatibility — Android changes platform behavior for apps targeting newer levels (e.g., Scoped Storage enforcement at API 30, notification permission at API 33).compileSdkVersion: The API level used to compile the app. This determines which APIs are available at build time. It should always be the latest stable API level.
The gap between minSdkVersion and targetSdkVersion is where the work lives. Supporting API 21 (Lollipop) while targeting API 34 (Android 14) means handling 13 API levels of behavioral changes, deprecated APIs, and new permission models.
Key API Level Thresholds
Some API levels represent hard breaks in Android’s platform behavior. If you’re setting minSdkVersion, these are the thresholds that matter:
| API Level | Why It Matters |
|---|---|
| 21 (Lollipop) | Material Design, ART runtime, JobScheduler. Most apps’ minimum. 64-bit support begins. |
| 23 (Marshmallow) | Runtime permissions. Apps targeting 23+ must request dangerous permissions at runtime. |
| 24 (Nougat) | Multi-window. Apps can be resized arbitrarily. JIT/AOT hybrid compiler. |
| 26 (Oreo) | Notification channels mandatory. Background execution limits. Autofill framework. |
| 28 (Pie) | Cleartext HTTP blocked by default. Non-SDK interface restrictions. |
| 29 (Android 10) | Scoped Storage (opt-out available). Dark theme. Gesture navigation. |
| 30 (Android 11) | Scoped Storage mandatory. One-time permissions. Foreground service types. |
| 31 (Android 12) | Material You. Stretch overscroll. SplashScreen API mandatory. |
| 33 (Android 13) | Notification permission opt-in. Photo Picker. Per-app language. |
| 34 (Android 14) | Foreground service types required. Non-linear font scaling. |
| 35 (Android 15) | Predictive back default. Private Space. Satellite API. |
API Level Distribution (Real-World)
As of mid-2025, the active Android install base breaks down roughly as follows (based on Google Play distribution data and industry estimates):
| API Level Range | Approximate Share | Notes |
|---|---|---|
| 21–25 (Lollipop–Nougat) | ~3% | Legacy devices, mostly in developing markets |
| 26–28 (Oreo–Pie) | ~8% | Aging but still active |
| 29–30 (Android 10–11) | ~22% | Large mid-range install base |
| 31–33 (Android 12–13) | ~40% | Current mainstream |
| 34–35 (Android 14–15) | ~27% | Newest devices, growing fast |
Setting minSdkVersion to 26 (Oreo) covers ~97% of active devices. Setting it to 21 (Lollipop) covers ~99.7%. The trade-off is development complexity versus reach.
How API Levels Are Assigned
Google assigns API levels sequentially, but not every Android version gets a unique level. Point releases sometimes share a level (2.0 and 2.0.1 both used API 5 initially, though 2.0.1 later got API 6). Major releases always get a new level. The numbering is strictly sequential — there are no gaps and no retroactive changes.
Android Wear (API 20) and Android TV share the same API level numbering as phones but have different feature sets and compatibility requirements. API 20 was exclusive to Android Wear 1.0 (KitKat-based); subsequent Wear versions used the same API levels as phones.
Final Thoughts
The API level system is Android’s version of backward compatibility. Every level adds capabilities and restrictions. Every level you support adds testing burden. The art of Android development is choosing the right minSdkVersion — high enough to use modern APIs without excessive compatibility code, low enough to reach your target audience.
For most apps in 2025, API 26 (Oreo) is the sweet spot: notification channels, autofill, background limits, and 97%+ reach. If you need runtime permissions without compatibility shims, API 23 (Marshmallow) is the floor. If you’re building something cutting-edge that can assume modern hardware, API 31 (Android 12) gives you Material You and the latest privacy features.
Whatever you choose, this chart should help you understand what you’re signing up for.
References
- Android API Levels documentation (developer.android.com)
- Android Distribution Dashboard (Google Play Console)
- AndroidX / Jetpack compatibility documentation
- AOSP version tags and API level assignments