Skip to main content
Every Android release carries an API level — the integer that build files name in minSdk, targetSdk, and compileSdk. The current release is Android 17 (API level 37, 2026), and the table below lists every version back to Android 1.0 with its API level, VERSION_CODES constant, codename, release year, and the share of active devices an app reaches if it requires that version. Coverage comes from Statcounter GlobalStats; the one-row-per-release format follows apilevels.com.

Which API level is which Android version?

Coverage measured August 2026 (Statcounter GlobalStats, mobile devices, worldwide). “Runs on” is cumulative: the share of devices on that version or newer — the reach of an app whose minSdk is that API level. The bolded row is the floor Duet ships. Duet — Modaal’s cross-platform parity framework for native iOS and Android apps — sets minSdk = 26 in every scaffolded Android target’s Gradle files, with compileSdk = 36 and targetSdk = 36, so a new Duet app installs on ≈98.3% of active Android devices.
Horizontal bar of Android version market share from Statcounter GlobalStats for August 2026, segments from Android 17 through Android 8 and older, with a bracket marking that minSdk 26 reaches about 98.3 percent of devices

August 2026 device share by Android version, newest to oldest. The marked span is the reach of an app with minSdk 26.

How do you read this table?

  • “Runs on” prices a minSdk choice. It is the sum of Statcounter’s monthly shares for that version and everything newer; requiring API 26 excludes the ≈1.7% of devices below it.
  • The source measures usage, not installs. Statcounter derives shares from web traffic across its network, so a phone used daily counts for more than one in a drawer. It is an independent proxy for the active install base, not Google’s own distribution data.
  • Rows marked ”—” sit below Statcounter’s measurement floor for the month — each under 0.05% of traffic.
  • Two rows can share a number. Android 13 and 12L both show 72.0% because 12L’s own share is 0.02%, which disappears in rounding.
  • Codenames live on in the constants. Releases are branded by number, and each still carries a dessert codename that surfaces in the Build.VERSION_CODES constants — TIRAMISU is API 33, BAKLAVA is API 36.
  • Minor SDK releases share their version’s row. Android 16 and 17 also ship mid-cycle SDK levels (36.1, 37.1), documented alongside the version-code constants; minSdk stays the integer API level.

What minSdk should you use?

Pick the lowest API level whose excluded devices you can accept, and let the table price the choice: as of August 2026, minSdk 26 reaches ≈98.3% of active devices, minSdk 29 reaches ≈94.6%, and minSdk 31 reaches ≈82.1%. The three numbers in a build file do different jobs, defined by the uses-sdk element: minSdk is the oldest version the app installs on, targetSdk declares which version’s behavior changes the app has been tested against, and compileSdk is the API surface the code compiles against. Only minSdk costs you devices. targetSdk and compileSdk stay current regardless — Google Play requires a recent targetSdk for new submissions and updates. Raising minSdk buys the ability to call newer platform APIs unconditionally — no runtime version checks, no compatibility fallbacks — and shrinks the device matrix you test. The cost is the coverage delta between the two rows, and the table states it exactly.

Common questions

For most new apps, API 26–29. Below 26 the added reach is under 2% of devices; above 31 you exclude nearly a fifth. Duet-scaffolded Android targets ship minSdk 26 — the ≈98.3% row — and raise it per project only when a needed API demands it.
minSdk gates installation — devices below it never see the app. targetSdk opts the app into the behavior rules of that version; the system applies compatibility behavior for newer devices. compileSdk only affects compilation. An app commonly compiles against and targets the newest API while keeping a much lower minSdk.
Google Play filters the app out of search and its store page shows it as incompatible, per the uses-sdk filtering rules. The system also refuses to install the APK directly, so sideloading doesn’t bypass the floor.
The measurement date is printed above the table — the numbers are from that month’s Statcounter GlobalStats data, and the page is refreshed at least quarterly and whenever the Android SDK versions Modaal pins change. The chart regenerates from the same numbers as the table.
Yes, as codenames: public branding uses the number, and each release’s dessert name lives in its VERSION_CODES constant — Android 17 is Cinnamon Bun, Android 16 is Baklava. The last release marketed under its dessert name was Android 9 Pie in 2018.
Modaal scaffolds an app on the floor this page prices. Set up the Android toolchain covers the SDK install; the components it pins live in the API 36 row above.

Sources and further reading

How Android apps work

The anatomy behind these numbers: the manifest, activities, Jetpack Compose, and the Gradle build that names minSdk.

Set up the Android toolchain

The one-banner install of the pinned SDK components — the API 36 platform, build tools, and your first emulator.
Last modified on September 3, 2026