Android Adaptive Icons: How to Create and Export Them

Master the two-layer adaptive icon system introduced in Android 8.0. Learn foreground/background composition, safe zones, themed icons, and how to export every density variant.

7 min read·Updated May 2026·App Image Kit

What Are Adaptive Icons?

Before Android 8.0 (API level 26), every launcher icon was a single static bitmap. Each device manufacturer and launcher app displayed them at slightly different sizes, often with inconsistent shapes — circles on Pixel, rounded squares on Samsung, squircles on others. The result was a home screen that looked disjointed and unprofessional.

Adaptive icons solve this by splitting a launcher icon into two distinct layers — a foreground and a background — that the system composites at runtime. The launcher then applies a platform-defined mask (circle, rounded square, squircle, teardrop, or any other shape) to produce a consistent silhouette across the entire home screen. Because the layers are separate, launchers can also apply motion effects such as parallax scrolling or scaling when the user interacts with the icon.

If you are new to density-independent pixels and how Android maps dp to physical pixels, read DP vs PX vs PT first. For a broader overview of screen density, What is DPI? covers the fundamentals.

Foreground and Background Layers

Each adaptive icon layer is 108 × 108 dp. The visible area after masking is a centered 72 × 72 dp region — the remaining 18 dp on each side acts as padding that the system uses for visual effects such as parallax and pulsing animations. This means your layers must be 50% larger than the final visible icon area.

The foreground layer contains your logo, glyph, or primary visual. It should be rendered on a transparent background so it composites cleanly over the background layer. The background layer is typically a solid colour, gradient, or pattern. It can be an opaque bitmap or a colour resource.

Within the 72 dp visible zone, an additional 66 dp inner circle (sometimes called the "safe zone") is guaranteed to be visible regardless of mask shape. All essential artwork — the recognisable part of your logo — should fit inside this 66 dp circle.

Mask Shapes

The launcher, not the developer, decides which mask to apply. Common masks include:

Circle

Pixel Launcher default

Rounded Square

Samsung One UI

Squircle

Superellipse blend

Teardrop

Some OEM launchers

Because you cannot predict the mask, never place important artwork near the edges of the 72 dp visible area. Stay inside the 66 dp safe zone.

Required Sizes per Density

Each layer is 108 dp. At each Android drawable density, the pixel dimensions scale as follows:

DensityScaleLayer Size (px)Resource Folder
mdpi1x108 x 108mipmap-mdpi/
hdpi1.5x162 x 162mipmap-hdpi/
xhdpi2x216 x 216mipmap-xhdpi/
xxhdpi3x324 x 324mipmap-xxhdpi/
xxxhdpi4x432 x 432mipmap-xxxhdpi/

Both the foreground and background images must be provided at every density listed above. If you use a vector drawable for either layer, a single XML file replaces all five raster variants for that layer.

XML Structure of an Adaptive Icon

Adaptive icons are declared in an XML resource file, typically named ic_launcher.xml, placed in the mipmap-anydpi-v26 directory. This file references the two layers:

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

When the background is a flat colour, you can skip the bitmap entirely and reference a colour resource:

<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/ic_launcher_bg" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

The corresponding foreground drawable can be either a PNG placed in each mipmap-*dpi folder, or a single vector drawable in drawable/.

Project File Structure

A typical project layout for an adaptive icon using raster assets looks like this:

res/
  mipmap-anydpi-v26/
    ic_launcher.xml
    ic_launcher_round.xml
  mipmap-mdpi/
    ic_launcher_foreground.png    (108 x 108)
    ic_launcher_background.png   (108 x 108)
  mipmap-hdpi/
    ic_launcher_foreground.png    (162 x 162)
    ic_launcher_background.png   (162 x 162)
  mipmap-xhdpi/
    ic_launcher_foreground.png    (216 x 216)
    ic_launcher_background.png   (216 x 216)
  mipmap-xxhdpi/
    ic_launcher_foreground.png    (324 x 324)
    ic_launcher_background.png   (324 x 324)
  mipmap-xxxhdpi/
    ic_launcher_foreground.png    (432 x 432)
    ic_launcher_background.png   (432 x 432)

The ic_launcher_round.xml file has the same structure. Android uses it on launchers that specifically request a circular icon. In most cases its content is identical to ic_launcher.xml.

Themed Icons (Android 13+)

Android 13 (API 33) introduced themed icons (also called monochrome icons). When a user enables themed icons in their launcher settings, the system tints every compatible app icon with colours derived from the active wallpaper palette via Material You dynamic colour.

To support this, add a third <monochrome> element to your adaptive icon XML:

<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/ic_launcher_bg" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
    <monochrome android:drawable="@drawable/ic_launcher_monochrome" />
</adaptive-icon>

The monochrome drawable should be a single-colour vector or raster (typically black on transparent) that represents the icon silhouette. The system maps this single channel to the wallpaper-derived tint at runtime. The same 108 dp canvas and safe-zone rules apply to the monochrome layer.

Implementation Steps

Follow these steps to add an adaptive icon to your Android project:

  1. Prepare your source artwork. Design a 432 × 432 px foreground image (xxxhdpi). Keep all recognisable content within the central 288 px (the 66 dp safe zone scaled to 4×). Export the background at the same dimensions.
  2. Generate density variants. Scale the 432 px source down to 324, 216, 162, and 108 px for xxhdpi through mdpi respectively. Use App Image Kit to automate this — drop your source image in and export a ZIP with all five density variants in one click.
  3. Place files in the correct folders. Copy each size into the matching mipmap-*dpi directory.
  4. Create the XML. Add ic_launcher.xml and ic_launcher_round.xml to mipmap-anydpi-v26/ with the structure shown above.
  5. Reference in the manifest. Ensure your AndroidManifest.xml points to the correct mipmap:
<application
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    ... >
  1. Test on multiple launchers. Use the Android emulator to preview your icon under different mask shapes (circle, squircle, rounded square) and confirm that nothing important is clipped.
  2. (Optional) Add a monochrome layer for Android 13+ themed icon support as described in the section above.

Best Practices

Keep artwork inside the 66 dp safe zone

The inner circle is the only region guaranteed visible under every mask shape. Place your logo, wordmark, or glyph entirely within this area.

Use vector drawables when possible

VectorDrawable XML scales perfectly to any density and eliminates the need for five separate raster files per layer.

Design at xxxhdpi and scale down

Start with a 432 x 432 px canvas (4x). Downscaling preserves detail; upscaling from a smaller source produces blurry results.

Do not place text near the edges

Text clipped by the mask becomes unreadable. If your icon includes a wordmark, centre it well inside the safe zone or omit it from the adaptive version.

Do not add shadows or shape masking to the foreground

The launcher applies its own shadow and shape. Baking a drop shadow or rounded corners into the foreground layer causes visual doubling.

Test across multiple mask shapes

Use the Android emulator or a real device to preview your icon under circle, squircle, and rounded-square masks before release.

Frequently Asked Questions

Do I still need legacy icons?

Yes. Devices running Android 7.1 (API 25) and below do not support adaptive icons. You should keep traditional 48 dp launcher icons in your mipmap-*dpi folders as a fallback. The mipmap-anydpi-v26 qualifier ensures that the adaptive icon XML is only used on API 26 and above.

Can I use a vector drawable for both layers?

Absolutely, and it is recommended when your icon consists of flat shapes and solid colours. A vector foreground plus a colour resource background eliminates every raster file. Detailed photographic artwork, however, should remain as PNGs.

What is the difference between mipmap and drawable?

Launcher icons should always go in mipmap directories. Unlike drawable folders, mipmap resources are preserved even when the APK is built for a specific density target. This ensures the launcher always has access to the highest quality icon. For more detail on drawable folders and density qualifiers, see Android Drawable Sizes.

Summary

Adaptive icons give Android launchers the flexibility to apply consistent masking, animation, and theming to every app on the home screen. By separating foreground and background into 108 dp layers and keeping critical artwork inside the 66 dp safe zone, your icon will look sharp under any mask shape on any device.

Use App Image Kit to generate all five density variants of each layer from a single source image, then drop the results into your project's mipmap directories. Combined with a clean ic_launcher.xml and an optional monochrome layer for themed icon support, your app will present a polished, modern icon on every Android version from Oreo onwards.

Ready to export your assets?

App Image Kit generates all density variants from a single source image — free, private, and instant.