The three icons every Android app needs
Unlike iOS, where one image can do almost everything, an Android app usually ships with three related pieces of artwork:
- An adaptive launcher icon (Android 8.0+), made of a background layer and a foreground layer that each device masks into its own shape — circle, squircle, rounded square or teardrop.
- A monochrome layer for themed icons (Android 13+), which the system tints to match the user's wallpaper.
- A separate 512×512 Google Play icon that you upload in Play Console. It is not taken from your APK.
Older devices also use legacy PNG launcher icons in several densities, though with a modern minimum SDK they matter less every year.
Adaptive icons: layers and the safe zone
An adaptive icon is defined in res/mipmap-anydpi-v26/ic_launcher.xml and references two layers. Both layers are 108×108 dp, but the launcher only shows the middle part:
| Area | Size | What it means |
|---|---|---|
| Full layer | 108×108 dp | The whole image. The outer 18 dp on each side are reserved for parallax and pulse animations. |
| Visible area | 72×72 dp | What a user normally sees after masking. |
| Safe zone | 66 dp circle | Guaranteed visible under every mask shape. Keep your logo inside it. |
A good rule of thumb: put the background as a solid color or simple pattern that fills the entire 108 dp, and keep the foreground logo within the central 66 dp circle. If your logo touches the edges of the visible area, circle-shaped launchers will cut it off.
In pixels, the foreground layer is 108 dp × the density factor:
| Density | Factor | Adaptive layer | Legacy icon |
|---|---|---|---|
| mdpi | 1× | 108×108 | 48×48 |
| hdpi | 1.5× | 162×162 | 72×72 |
| xhdpi | 2× | 216×216 | 96×96 |
| xxhdpi | 3× | 324×324 | 144×144 |
| xxxhdpi | 4× | 432×432 | 192×192 |
Android Studio's Image Asset Studio can also produce vector (XML) layers, which scale perfectly and keep your APK small. Raster PNG layers, as generated by the AppNimbus app icon generator, work everywhere and are easiest when your logo is a bitmap.
Themed (monochrome) icons
From Android 13, users can turn on themed icons. The launcher then ignores your colors and draws the <monochrome> layer of your adaptive icon, tinted to match the wallpaper. If you don't provide one, your app is the odd colorful icon out on a themed home screen.
To add it, include a monochrome drawable in your adaptive icon XML:
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
</adaptive-icon>
The monochrome image should be a single-color silhouette of your logo on a transparent background, following the same 66 dp safe zone. Only the alpha channel is used, so gradients and multiple colors are lost. If your foreground logo is already a simple one-color shape, you can reuse it — that's what the AppNimbus generator does by default.
Legacy icons and mipmap densities
Launcher icons belong in mipmap-* folders, not drawable-*. Mipmap resources are kept for every density even when an app bundle strips other densities, because launchers sometimes show icons at a larger size than the device's own density. Legacy icons come in two variants:
ic_launcher.png— square or rounded-square icon.ic_launcher_round.png— a circular icon used by some launchers on Android 7.1.
If your minSdk is 26 or higher, devices always use the adaptive icon and the legacy PNGs act only as a fallback, but there is no harm in including them.
The Google Play Store icon
Your store listing icon is uploaded separately in Play Console under Store presence → Main store listing. Google's requirements:
- 512×512 pixels, 32-bit PNG (alpha allowed).
- Maximum 1024 KB.
- Provide a full square. Google Play applies the rounded-corner mask and shadow itself, so don't add your own.
- No badges or text that suggest store ranking, price or promotions ("#1", "Free", "Sale").
Keep the Play icon visually identical to your launcher icon. Users who install from the store look for the same picture on their home screen.
Where the files go in your project
app/src/main/res/
├── mipmap-anydpi-v26/
│ ├── ic_launcher.xml ← adaptive icon definition
│ └── ic_launcher_round.xml
├── mipmap-mdpi/ … mipmap-xxxhdpi/
│ ├── ic_launcher.png ← legacy square
│ ├── ic_launcher_round.png ← legacy round
│ └── ic_launcher_foreground.png
└── values/
└── ic_launcher_background.xml ← background color
Your AndroidManifest.xml points to them with android:icon="@mipmap/ic_launcher" and android:roundIcon="@mipmap/ic_launcher_round".
Common mistakes
- Logo too big for the safe zone, so circle launchers clip it. Add padding.
- Using the full-bleed iOS icon as the foreground. The result looks like a square inside a circle. Separate the logo from its background instead.
- No monochrome layer, so themed home screens show your icon in full color.
- Different Play and launcher icons, which confuses users.
- Forgetting to test shapes. Preview your icon as a circle, squircle and rounded square — the app icon tester lets you switch between them.
Sources: Android Developers "Adaptive icons" and "Create app icons", Play Console Help "Add preview assets to showcase your app". Last checked October 2026.
Every iOS & Android icon size from one image, as a ZIP.