Generate Android Adaptive Icons with AI
Foreground and background layers at every density. mipmap folders, round variants, and Play Store icon — ready to drop into Android Studio.
What Are Adaptive Icons?
Before Android 8.0 (API 26), every app shipped a single PNG launcher icon. Different manufacturers applied different masks, and the results were messy — circular icons on Samsung, rounded squares on Pixel, plain squares on LG. Some icons had visible white corners where the transparency was supposed to be.
Adaptive icons fix this by separating the icon into two layers: a foreground containing your logo or symbol, and a background that fills the entire canvas. The OS decides the shape by applying a mask over both layers. The result looks native on every device, regardless of what mask shape the manufacturer chose.
Both layers are 108x108dp, but only the inner 72x72dp (the "visible area") is guaranteed to be shown. The outer 18dp on each side exists for motion effects — when you long-press an icon, Android can shift the foreground layer relative to the background to create a parallax effect.
The safe zone is 66.67% of the canvas
Foreground and Background Layers
Foreground Layer
Contains your app's symbol, logo, or icon art. Transparent background is fine — only the opaque content matters. Keep all meaningful content within the inner 72dp safe zone (that is 66.67% of the 108dp canvas). The foreground is rendered on top of the background.
Background Layer
A flat color, gradient, or pattern that fills the entire 108dp canvas. This layer is always fully opaque. The OS clips it to whatever mask shape the device uses. Many apps use a single solid brand color here.
Density Bucket Reference
Android renders icons at the device's screen density. A 48dp icon becomes 48px on an mdpi screen, 72px on hdpi, and 192px on xxxhdpi. Here is the full scale for launcher icons:
| Density | Multiplier | Legacy Icon | Adaptive Layer | Folder |
|---|---|---|---|---|
| mdpi | 1x | 48x48 px | 108x108 px | mipmap-mdpi |
| hdpi | 1.5x | 72x72 px | 162x162 px | mipmap-hdpi |
| xhdpi | 2x | 96x96 px | 216x216 px | mipmap-xhdpi |
| xxhdpi | 3x | 144x144 px | 324x324 px | mipmap-xxhdpi |
| xxxhdpi | 4x | 192x192 px | 432x432 px | mipmap-xxxhdpi |
mdpi
Baseline density — 160 dpi devices
hdpi
High density — 240 dpi devices
xhdpi
Extra high density — 320 dpi devices
xxhdpi
Extra-extra high — 480 dpi devices
xxxhdpi
Highest density — 640 dpi devices
Play Store
Required for Google Play listing
Installing in Android Studio
The Iconello download organizes everything into the standard Android resource structure. Here is how to add it to your project:
- Open your project in Android Studio and navigate to
app/src/main/res/. - Delete or rename the existing
mipmap-*folders containing ic_launcher files. - Copy the generated
mipmap-mdpithroughmipmap-xxxhdpifolders intores/. - If using adaptive icons, copy
ic_launcher.xmlandic_launcher_round.xmlintomipmap-anydpi-v26/. - Sync the project (File > Sync Project with Gradle Files).
- Run the app — the icon updates immediately on the launcher.
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_launcher_background" />
<foreground android:drawable="@mipmap/ic_launcher_foreground" />
</adaptive-icon>This XML tells Android to compose the icon from separate foreground and background layers at runtime. Devices running Android 7.1 or earlier ignore this file and fall back to the legacy ic_launcher.png in the density-specific mipmap folder.
Google Play Store Requirements
Google Play has its own icon requirements separate from the launcher icon:
- Size: 512x512 pixels exactly
- Format: 32-bit PNG (with alpha channel)
- Max file size: 1024 KB
- Shape: Full square — Play Console applies its own mask
- Content: Must match your launcher icon design
Play Console rounds your icon
Android 13+ Themed Icons
Android 13 introduced themed icons that tint app icons to match the user's wallpaper palette. To support this, you provide a monochrome version of your icon — a single-channel image where the shape is white and the background is transparent. The OS extracts the alpha channel and applies the wallpaper-derived color.
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_launcher_background" />
<foreground android:drawable="@mipmap/ic_launcher_foreground" />
<monochrome android:drawable="@mipmap/ic_launcher_monochrome" />
</adaptive-icon>Apps without a monochrome layer get a generic circular fallback on themed home screens. It works, but it looks out of place next to apps that implemented the feature properly.
Frequently Asked Questions
What is the difference between ic_launcher and ic_launcher_round?
Some launchers (notably Pixel Launcher on older Android versions) request a round icon variant specifically. ic_launcher_round is that variant — pre-clipped to a circle. If you provide it, those launchers use it. If you do not, they fall back to clipping ic_launcher into a circle themselves, which sometimes looks worse because the clipping does not account for your icon's specific layout.
Do I still need legacy icons if I use adaptive?
Yes. Devices running Android 7.1 (API 25) and earlier do not understand adaptive icons. They need a traditional ic_launcher.png in each density folder. The adaptive XML in mipmap-anydpi-v26/ only kicks in on API 26 and above.
Why is the adaptive layer 108dp instead of 48dp?
The extra space (18dp on each side beyond the 72dp visible area) gives the OS room for motion effects. When you long-press or drag an adaptive icon, Android shifts the foreground relative to the background, creating a depth effect. Without that padding, the edge of the layer would become visible during the animation.
Can I use a vector drawable instead of PNG layers?
Yes. Android supports vector drawables for adaptive icon layers. Replace the mipmap references in ic_launcher.xml with drawable references pointing to your VectorDrawable XML files. This reduces APK size since you only ship one scalable file per layer instead of five PNGs.