How to make app icons for iOS and Android
An app icon has to work as a 1024 px App Store image, as a 48 px legacy launcher icon, and under whatever mask an Android phone maker picked. The generator builds every file from one master, so all of them match.
- Drop your logo, ideally a PNG with a transparent background or an SVG at 1024 px or larger. A sample logo is already loaded so you can see the result first.
- Pick a solid background colour or a two-colour gradient. Or switch to “Letter or emoji” to use 1 to 3 characters.
- Set “Logo size” until the label reads between 48 and 66 dp, and check that the logo stays inside the dashed 66 dp ring on all four Android masks.
- Click “Download app icon set (ZIP)”. It holds the iOS AppIcon.appiconset, the Android res/ folders, the 512 px Play icon, an Expo folder and a README.
- Copy each folder into your Xcode, Android Studio or Expo project, then upload play-store-icon-512.png in Play Console.
App icon sizes for iOS, Android and Google Play (October 2026)
| Where | What you upload | What the official page says |
|---|---|---|
| iPhone and iPad (Xcode) | One 1024×1024 px PNG | Apple's HIG lists a 1024×1024 px square layout for iOS, iPadOS and macOS. Xcode's asset-catalog guide says iOS apps can generate every smaller variation from that single image. Supply it square and unmasked: the system rounds the corners. |
| App Store icon | The same 1024 px image, with no alpha channel | An upload with transparency is rejected with ITMS-90717: “The App Store Icon … can't be transparent nor contain an alpha channel.” The tool writes this PNG as plain RGB, so there is no alpha channel to strip. |
| Android 8.0+ launcher | Adaptive icon: foreground and background layers, 108×108 dp each | Android keeps the outer 18 dp on each side for masks and motion effects. The logo should be at least 48×48 dp and no bigger than 66×66 dp, the inner area that no OEM mask clips. Add a monochrome layer for themed icons (Android 13+). |
| Android 7.1 and lower | Legacy PNGs, 48 px at mdpi up to 192 px at xxxhdpi | Android Studio still generates these for API 25 and lower. They go in mipmap-* folders, not drawable-*, so launchers can pick a sharper density. |
| Google Play listing | 512×512 px, 32-bit PNG, sRGB, up to 1024 KB | Full square, no rounded corners and no drop shadow. Play adds a corner radius of 30% of the icon size and its own shadow. |
Sources, checked October 23, 2026: Apple Human Interface Guidelines, “App icons”; Apple Xcode documentation, “Configuring your app icon using an asset catalog”; Apple Developer Forums, ITMS-90717 thread; Android Developers, “Adaptive icons”; Android Developers, “Support different pixel densities”; Android Studio, “Create app icons”; Google Play icon design specifications. Gridloom is not affiliated with Apple or Google.
Android adaptive icon size in pixels: 108 dp, 72 dp, 66 dp and 48 dp
All four numbers describe the same icon. Each layer is 108×108 dp. The launcher shows only the middle 72×72 dp, and the 18 dp border is there so the icon can shift and pulse. Inside that, the 66×66 dp zone is the part no OEM mask clips, and Android asks for a logo of at least 48×48 dp. This tool sizes the logo against the visible 72 dp, so “Logo size 70%” means a 50 dp logo. The label under the slider turns into a warning below 48 dp or past 66 dp. A separate check counts how much of your logo would fall outside a circular mask.
| Density folder | Scale | Legacy ic_launcher.png (48 dp) | Adaptive layer PNG (108 dp) |
|---|---|---|---|
| mdpi | 1× | 48×48 | 108×108 |
| hdpi | 1.5× | 72×72 | 162×162 |
| xhdpi | 2× | 96×96 | 216×216 |
| xxhdpi | 3× | 144×144 | 324×324 |
| xxxhdpi | 4× | 192×192 | 432×432 |
Pixel sizes follow Android's 3:4:6:8:12:16 density ratio (ldpi is left out; Android scales from the other buckets). Android prefers vector layers, but PNG layers are allowed and they work with any logo, so that's what you get here.
Google Play icon: 512 px, 1024 KB and the 30% corner
Google Play's spec is short: 512×512 px, a 32-bit PNG in sRGB, 1024 KB at most, full square, no shadow. Play applies the rounded mask (radius equal to 30% of the size) and the drop shadow after upload, so corners you round yourself get rounded twice. If your icon has transparent areas, Play's own background shows through. Icons still on the pre-2019 spec were moved to “legacy mode” and shrunk to 75% (384 px) on the keyline grid. The Play icon made here is always fully opaque, and the status line shows its file size.
Using the files in Xcode, Android Studio, Expo and Flutter
Xcode: in Assets.xcassets, replace the AppIcon set with ios/AppIcon.appiconset from the ZIP. Its Contents.json is the single-size format (one universal 1024×1024 entry). iOS also has dark and tinted icon styles. If you don't supply them, Apple's Xcode guide says the system generates its own treatment. Apple's layered Liquid Glass icons come from Icon Composer. A flat 1024 image is still accepted; it just gives you less control over the glass effects. Android Studio: copy the mipmap-* folders and values/ic_launcher_background.xml into app/src/main/res/. Then point the manifest at @mipmap/ic_launcher and @mipmap/ic_launcher_round. Expo: the expo/ folder has icon.png, adaptive-icon.png and monochrome-icon.png, plus an app.json snippet using Expo's android.adaptiveIcon.foregroundImage, monochromeImage and backgroundColor keys. Flutter: with flutter_launcher_icons, set image_path to the 1024 iOS PNG and adaptive_icon_foreground to expo/adaptive-icon.png, and set adaptive_icon_background to your colour. Also set adaptive_icon_foreground_inset: 0: the package adds 16% padding by default, and this foreground already has its margin.
Sources: Apple Xcode documentation, “Configuring your app icon using an asset catalog”; Android Developers, “Adaptive icons”; Expo documentation, “Splash screen and app icon”; flutter_launcher_icons on pub.dev. Not covered here: macOS, which needs every size supplied; tvOS (800×480 px, layered); watchOS (1088×1088 px, circular). See Apple's HIG for those.
How the generator works
The logo is decoded in your browser and trimmed to its visible pixels. It's scaled once to a 2048 px master, and every output is reduced from that master in halving steps, so 1px-wide details survive at 48 px. The iOS and Play icons are the logo on your background at the size you set. The Android foreground is the same logo on a transparent 108 dp canvas, sized against the 72 dp viewport so it matches the iOS icon on screen. The monochrome layer is that foreground's silhouette in white, which Android tints to match the wallpaper. The 1024 iOS PNG is encoded by the page itself as 8-bit RGB with an sRGB chunk, because a browser canvas export always includes an alpha channel.
Also useful: the favicon generator for the website version of the same logo (favicon.ico, Apple touch icon, manifest icons), and the image compressor for store screenshots that are over an upload limit.
Frequently asked questions
What size should an app icon be?
iOS needs one 1024×1024 px PNG, and Xcode generates the smaller sizes from it. On Android you provide an adaptive icon: two 108×108 dp layers with the logo inside the central 66×66 dp, plus legacy PNGs from 48 px (mdpi) to 192 px (xxxhdpi). The Google Play listing icon is a separate 512×512 px 32-bit PNG of up to 1024 KB. This generator makes all of them from one logo.
Why does App Store Connect say my app icon can't be transparent or contain an alpha channel?
That's error ITMS-90717. It fires when the 1024 px App Store icon has transparent pixels, or even just an alpha channel with every pixel opaque, which is what most PNG exports contain. The iOS icon from this tool is written as an RGB PNG with no alpha channel at all, on the background colour you pick.
What is the Android adaptive icon safe zone?
Each adaptive icon layer is 108×108 dp. The launcher shows the middle 72×72 dp through its mask, and only the inner 66×66 dp is never clipped by any OEM shape. Android asks for a logo between 48×48 and 66×66 dp. Turn on the safe-zone ring here to see the 66 dp limit on circle, squircle, rounded-square and teardrop masks.
What are the Android mipmap icon sizes?
Legacy launcher icons are 48 dp: 48×48 px in mipmap-mdpi, 72×72 in hdpi, 96×96 in xhdpi, 144×144 in xxhdpi and 192×192 in xxxhdpi. Adaptive layers are 108 dp: 108, 162, 216, 324 and 432 px. Android says to keep launcher icons in mipmap folders rather than drawable folders.
Do I still need ic_launcher.png if I have an adaptive icon?
Only for Android 7.1 (API 25) and lower. Devices on Android 8.0 and up read mipmap-anydpi-v26/ic_launcher.xml, which points to the foreground, background and monochrome layers. If your minSdk is 26 or higher, the legacy PNGs are unused but harmless.
What size is the Google Play store icon?
512×512 px, 32-bit PNG, sRGB, 1024 KB at most. Upload a full square without rounded corners or a drop shadow, because Google Play adds a 30% corner radius and a shadow itself. In the ZIP it's android/play-store-icon-512.png.
Should I round the corners of my app icon?
No, on either store. Apple asks for square, unmasked artwork and applies the rounded shape itself. Google Play applies a 30% radius, and Android launchers apply the OEM's mask to adaptive icons. Pre-rounded corners end up with odd edges or a double curve.
Can I use this for Expo, React Native or Flutter?
Yes. The expo folder has icon.png (1024 px, no alpha), adaptive-icon.png and monochrome-icon.png for android.adaptiveIcon, plus an app.json snippet. For bare React Native, copy the ios and android/res folders into the native projects. For Flutter's flutter_launcher_icons, use the 1024 PNG as image_path and expo/adaptive-icon.png as adaptive_icon_foreground, with adaptive_icon_foreground_inset set to 0.
Is this app icon generator free? Is my logo uploaded?
It's free, with no signup and no watermark: one complete iOS, Android and Play set at a time, ZIP included. Your logo is processed in your browser and never uploaded. Gridloom Pro adds batch mode, where several logos (for example white-label or flavour builds) become one ZIP with a folder per logo.
Kitewise