Android App Icon Sizes: Complete Guide for 2025
Android icons are more complicated than iOS. You have adaptive icons, legacy icons, different launcher shapes, and varying screen densities to consider. This guide covers what you actually need to ship an Android app.
The Quick Reference
For a modern Android app (API 26+), you need launcher icons at these densities:
| Density | Scale | Pixels | Folder |
|---|---|---|---|
| mdpi | 1x | 48x48 | mipmap-mdpi |
| hdpi | 1.5x | 72x72 | mipmap-hdpi |
| xhdpi | 2x | 96x96 | mipmap-xhdpi |
| xxhdpi | 3x | 144x144 | mipmap-xxhdpi |
| xxxhdpi | 4x | 192x192 | mipmap-xxxhdpi |
These go in your res/mipmap-* folders. The system picks the right one based on the device's screen density.
Adaptive Icons (Android 8.0+)
Android 8.0 introduced adaptive icons. Instead of one static image, you provide two layers:
- Foreground layer: Your actual icon (108x108dp, 432x432px at xxxhdpi)
- Background layer: A color or pattern behind it (same size)
The system combines these and applies a mask based on the device manufacturer. Samsung uses circles, Pixel uses rounded squares, others use their own shapes.
The Safe Zone
Here's the tricky part. Your foreground content needs to fit within a 66dp circle (264px at xxxhdpi) centered in the 108dp canvas. Content outside this safe zone might get cropped depending on the launcher's mask shape.
Total canvas: 108dp (432px at xxxhdpi)
Safe zone: 66dp circle (264px diameter)
If your logo extends to the edges, parts of it will disappear on some devices. Keep important elements within that center circle.
Adaptive Icon Files
You need these files for adaptive icons:
| File | Size (xxxhdpi) | Purpose |
|---|---|---|
| ic_launcher_foreground.png | 432x432 | Icon content |
| ic_launcher_background.png | 432x432 | Background layer |
| ic_launcher.xml | - | Combines the layers |
The XML file looks like this:
<adaptive-icon>
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
You can also use a solid color for the background instead of an image.
Legacy Icons (Pre-Android 8.0)
Older devices don't support adaptive icons. You still need regular PNG icons for compatibility:
| Density | Pixels | File |
|---|---|---|
| mdpi | 48x48 | ic_launcher.png |
| hdpi | 72x72 | ic_launcher.png |
| xhdpi | 96x96 | ic_launcher.png |
| xxhdpi | 144x144 | ic_launcher.png |
| xxxhdpi | 192x192 | ic_launcher.png |
These should include any background and shadows baked in, since there's no layer separation on older devices.
Play Store Icon
The Google Play Store needs a high-resolution icon:
| Size | Format | Requirements |
|---|---|---|
| 512x512 | PNG | 32-bit, no alpha, max 1024KB |
This is separate from your app icons. It shows up on your Play Store listing page. Make it look good at this size since it's what people see when deciding to install.
Unlike the App Store, Google does allow some transparency in the Play Store icon, but a solid background usually looks better in search results.
Notification Icons
Android notifications need their own icons. These are simpler:
| Density | Pixels | Requirements |
|---|---|---|
| mdpi | 24x24 | White silhouette on transparent |
| hdpi | 36x36 | White silhouette on transparent |
| xhdpi | 48x48 | White silhouette on transparent |
| xxhdpi | 72x72 | White silhouette on transparent |
| xxxhdpi | 96x96 | White silhouette on transparent |
Notification icons must be white silhouettes. The system applies color based on your notification settings. If you use colors or complex shapes, they'll show up as solid white squares on newer Android versions.
Folder Structure
Here's how your icon files should be organized:
res/
├── mipmap-mdpi/
│ ├── ic_launcher.png (48x48)
│ ├── ic_launcher_foreground.png (108x108)
│ └── ic_launcher_background.png (108x108)
├── mipmap-hdpi/
│ ├── ic_launcher.png (72x72)
│ ├── ic_launcher_foreground.png (162x162)
│ └── ic_launcher_background.png (162x162)
├── mipmap-xhdpi/
│ ├── ic_launcher.png (96x96)
│ ├── ic_launcher_foreground.png (216x216)
│ └── ic_launcher_background.png (216x216)
├── mipmap-xxhdpi/
│ ├── ic_launcher.png (144x144)
│ ├── ic_launcher_foreground.png (324x324)
│ └── ic_launcher_background.png (324x324)
├── mipmap-xxxhdpi/
│ ├── ic_launcher.png (192x192)
│ ├── ic_launcher_foreground.png (432x432)
│ └── ic_launcher_background.png (432x432)
└── mipmap-anydpi-v26/
└── ic_launcher.xml
The mipmap-anydpi-v26 folder contains the XML that references your adaptive icon layers. Android 8.0+ uses this; older versions fall back to the PNG files.
Common Mistakes
Ignoring the safe zone. Your logo gets cropped on Samsung phones because you didn't account for the circular mask. Always test with different launcher shapes.
Using the wrong folder. Icons go in mipmap, not drawable. The mipmap folders are preserved at higher densities when the APK is optimized, ensuring your launcher icon is always crisp.
Complex notification icons. Detailed, colorful notification icons become unreadable white blobs. Use simple, recognizable silhouettes.
Forgetting legacy icons. Even if you target newer Android versions, include legacy icons for older devices. The fallback matters.
Wrong Play Store dimensions. The Play Store wants exactly 512x512. Not 1024, not 256. If you upload the wrong size, the console will reject it.
Monochrome Icons (Android 13+)
Android 13 introduced themed icons. If the user enables themed icons in their settings, the system uses a monochrome version of your icon that matches their wallpaper colors.
You can provide a dedicated monochrome layer:
<adaptive-icon>
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
</adaptive-icon>
The monochrome drawable should be a single-color silhouette, similar to notification icons. If you don't provide one, the system attempts to generate it automatically, which sometimes looks bad.
Testing Your Icons
Before releasing:
- Test on multiple launchers. Pixel, Samsung, OnePlus all use different mask shapes.
- Check the safe zone. Use Android Studio's adaptive icon preview to see how your icon looks with different masks.
- Verify notification icons. Send a test notification and make sure it's recognizable.
- Check the Play Store listing. Upload your 512x512 icon and preview how it looks in search results.
Summary
Android icons are more complex than iOS because of adaptive icons and density buckets. At minimum, you need:
- 5 sizes of launcher icons (mdpi through xxxhdpi)
- Adaptive icon layers for Android 8.0+
- A 512x512 Play Store icon
- Notification icons if your app sends notifications
Keep your foreground content within the 66dp safe zone, test on multiple devices, and provide legacy fallbacks. That covers most of what you'll encounter.
Skip the manual work
Generate all these icon sizes automatically with IconPack. Just describe your icon and get every size in one ZIP.
Try Free