platform set

Android app icon sizes

An Android launcher icon is not one image. It is a stack of layers the system masks into whatever shape the device maker chose, which is why the size that matters is not the icon but the safe area inside it. Android publishes those figures in density-independent pixels; the pixel column below is what the published formula turns them into.

The numbers, and where each one came from

  • Every layer

    Size all layers to 108 × 108 dp. Foreground and background are separate layers, and a third monochrome layer is the one themed icons read.

    Source Android Developers — Adaptive icons · read 2026-09-25

  • The safe zone

    The inner 66 × 66 dp is never clipped by a device maker’s mask. Anything that has to survive belongs inside it.

    Source Android Developers — Adaptive icons · read 2026-09-25

  • Your logo

    At least 48 × 48 dp, and no more than 66 × 66 dp. The ceiling is the safe zone, so a logo larger than it is a logo that gets cut.

    Source Android Developers — Adaptive icons · read 2026-09-25

  • The margin the system takes

    The outer 18 dp on each of the four sides is reserved — for masking, and for the parallax and pulse effects a launcher applies.

    Source Android Developers — Adaptive icons · read 2026-09-25

  • Density buckets

    ldpi is about 120 dpi, mdpi about 160 and is the baseline, hdpi about 240, xhdpi about 320, xxhdpi about 480, xxxhdpi about 640 — a 3:4:6:8:12:16 ratio across the six.

    Source Android Developers — Support different pixel densities · read 2026-09-25

  • The 108 dp layer, in pixels

    81 px at ldpi, 108 at mdpi, 162 at hdpi, 216 at xhdpi, 324 at xxhdpi, 432 at xxxhdpi. From px = dp × (dpi ÷ 160), which Android publishes; the products it does not.

    Worked out here Worked out here from Android’s published formula — lib/presets/platformSets.ts — densityPixels() · read 2026-09-25

  • The 66 dp safe zone, in pixels

    49.5 px at ldpi, 66 at mdpi, 99 at hdpi, 132 at xhdpi, 198 at xxhdpi, 264 at xxxhdpi. The ldpi figure is the one value that does not land on a whole pixel, and it is printed as it comes out rather than rounded.

    Worked out here Worked out here from Android’s published formula — lib/presets/platformSets.ts — densityPixels() · read 2026-09-25

The short answer

Draw at 432 × 432 px and you have covered every bucket down to ldpi without scaling anything up. Keep the logo inside the middle 264 px and no mask can take it.

Make the files

The sizes on this page are the input. The tool below produces them, and nothing here is a step you have to do by hand.

Open the tool

The other set

Same rule, different platform.

This page carries 7 rows and every one of them names the document it came from and the date that document was read. Where a number was worked out here rather than quoted, it says so instead of borrowing somebody else’s citation. A row we could not source is listed above as unwritten rather than filled in from memory.