Flutter App Icon Missing

If your Flutter app icon disappears after changing the Android package name and Android starts showing the default Android/robot icon instead, the problem may be much simpler than rebuilding the icons.

I recently ran into exactly this problem after using the Flutter packages icons_launcher to generate my launcher icons and package_rename to change the application’s package name.

Everything had been working correctly before the rename.

After changing the package name, however, the application installed successfully but displayed the default Android icon instead of my custom launcher icon.

Running flutter clean, rebuilding the application, and regenerating the icons did not solve the problem.

The actual cause was one missing line in:

android/app/src/main/AndroidManifest.xml

The <application> element was missing:

android:icon="@mipmap/ic_launcher"

Adding that single line fixed the issue immediately.

This guide explains the problem, the fix, and what to check if your Flutter launcher icon suddenly disappears after renaming your Android application.


The Problem

My Flutter project used the icons_launcher package to generate the application icons.

A typical configuration looks similar to this:

dev_dependencies:
  icons_launcher: ^3.1.0

icons_launcher:
  image_path: "assets/app_icon.png"
  platforms:
    android:
      enable: true

The launcher icons were generated using:

flutter pub get
dart run icons_launcher:create

The icons_launcher package generates launcher icons for Android and other supported platforms from the configured image.

Everything worked correctly.

I then changed the package name using package_rename.

For example:

package_rename_config:
  android:
    app_name: "My App"
    package_name: "com.example.myapp"

and ran:

dart run package_rename

package_rename modifies a number of platform-specific project configuration fields, including Android project configuration.

After this change, the application still built and installed normally.

But the launcher icon had changed to the generic Android icon.


Symptoms

You may have the same problem if:

  • Your Flutter application previously had the correct icon.
  • You changed the Android package name or application configuration.
  • The app still builds without errors.
  • The correct ic_launcher files are present inside the Android project.
  • Regenerating the launcher icons does not help.
  • flutter clean does not help.
  • Android displays a generic/default Android application icon.

In this situation, don’t immediately assume that icons_launcher failed.

The icon files may already be perfectly fine.

Android may simply not be told which icon resource to use.


The Fix

Open:

android/app/src/main/AndroidManifest.xml

Find the <application> element.

Mine effectively looked like this:

<application
    android:label="My App"
    android:name="${applicationName}">

The launcher icon declaration was missing.

Add:

android:icon="@mipmap/ic_launcher"

The corrected configuration becomes:

<application
    android:label="My App"
    android:name="${applicationName}"
    android:icon="@mipmap/ic_launcher">

That’s it.

After adding the line and rebuilding the application, my custom Flutter launcher icon appeared again.


Why android:icon Matters

Android gets important application-level configuration from the <application> element in AndroidManifest.xml.

The following line tells Android which drawable or mipmap resource should be used as the application’s launcher icon:

android:icon="@mipmap/ic_launcher"

Here:

@mipmap/

refers to an Android mipmap resource directory, while:

ic_launcher

is the name of the launcher icon resource.

Your Flutter icon generator may have already created files such as:

android/app/src/main/res/mipmap-mdpi/ic_launcher.png
android/app/src/main/res/mipmap-hdpi/ic_launcher.png
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

But generating these files and referencing them from the Android application are two separate things.

In my case:

Icon resources               ✅ Correct
icons_launcher configuration ✅ Correct
Flutter build                ✅ Correct
Package rename               ✅ Completed
AndroidManifest icon         ❌ Missing

So regenerating the images repeatedly could never fix the underlying problem.


Quick Fix

If you just want the solution, open:

android/app/src/main/AndroidManifest.xml

and make sure your <application> contains:

android:icon="@mipmap/ic_launcher"

For example:

<application
    android:label="My App"
    android:name="${applicationName}"
    android:icon="@mipmap/ic_launcher">

Then build the application again:

flutter run

or:

flutter build apk

There was no need in my case to regenerate the icons, delete Gradle caches, recreate the Android project, or reinstall Flutter.


How to Verify the Launcher Icon Files

Before regenerating anything, check:

android/app/src/main/res/

You will normally see directories such as:

mipmap-mdpi
mipmap-hdpi
mipmap-xhdpi
mipmap-xxhdpi
mipmap-xxxhdpi

Look inside them for:

ic_launcher.png

For example:

android/app/src/main/res/mipmap-mdpi/ic_launcher.png

Open one of the images.

If it contains your correct application icon, your icon generation process probably worked.

Next check:

android/app/src/main/AndroidManifest.xml

for:

android:icon="@mipmap/ic_launcher"

This is a much faster diagnostic process than repeatedly regenerating the same icon files.


Using icons_launcher with Flutter

If the icon resources actually are missing, then regenerate them.

A basic pubspec.yaml configuration can look like:

dev_dependencies:
  icons_launcher: ^3.1.0

icons_launcher:
  image_path: "assets/app_icon.png"
  platforms:
    android:
      enable: true

Then run:

flutter pub get
dart run icons_launcher:create

The official icons_launcher documentation currently recommends dart run icons_launcher:create after configuring the package.

After generation, check the Android mipmap-* directories again.


Using package_rename

package_rename is useful when you want to change Flutter application details such as the Android package name without manually editing every platform-specific file.

For example:

dev_dependencies:
  package_rename: ^1.10.1

package_rename_config:
  android:
    app_name: "My App"
    package_name: "com.example.myapp"

Then run:

dart run package_rename

The current package_rename package documentation describes dart run package_rename as its standard command.

After running a tool that modifies native Android configuration, however, I recommend checking your final:

android/app/src/main/AndroidManifest.xml

before generating a production release.


Recommended Order When Renaming a Flutter App

For future projects, I prefer doing the rename before generating the final launcher icons.

For example:

Configure package_rename
        ↓
Run package_rename
        ↓
Check AndroidManifest.xml
        ↓
Generate launcher icons
        ↓
Build application
        ↓
Test installed app

Commands:

dart run package_rename

Then check that the manifest contains:

android:icon="@mipmap/ic_launcher"

Then generate the icons:

dart run icons_launcher:create

Finally:

flutter build apk

or:

flutter build appbundle

For release builds, you can also review the official Flutter Android deployment documentation.


What About flutter clean?

A common reaction when a Flutter icon does not update is:

flutter clean
flutter pub get
flutter run

There is nothing wrong with trying this when dealing with stale build artifacts.

But it is important to understand that:

flutter clean

cannot restore a missing XML attribute.

If this is missing:

android:icon="@mipmap/ic_launcher"

cleaning and rebuilding the same project will still build with the same incorrect Android manifest configuration.

That is exactly why repeated rebuilding did not solve my issue.


Check Your Full <application> Configuration

A typical Flutter Android application section may look similar to:

<application
    android:label="My App"
    android:name="${applicationName}"
    android:icon="@mipmap/ic_launcher">

The three attributes have different purposes:

android:label

Controls the application’s displayed name.

android:name

Defines the Android Application class configuration used by Flutter.

android:icon

Defines the application’s launcher icon.

For this particular problem, the important line is:

android:icon="@mipmap/ic_launcher"

What If I Use a Different Launcher Icon Name?

Not every Flutter project has to use:

ic_launcher

For example, your generated resource could be called:

launcher_icon

In that situation your manifest must reference the same name:

android:icon="@mipmap/launcher_icon"

The important thing is that these two sides match.

For example:

Manifest:
@mipmap/ic_launcher

Resource:
mipmap-xxxhdpi/ic_launcher.png

✅ Match

But:

Manifest:
@mipmap/launcher_icon

Resource:
mipmap-xxxhdpi/ic_launcher.png

❌ Mismatch

So always check the resource name rather than blindly copying a value from another project.


Troubleshooting Checklist

If your Flutter app shows the default Android icon, check these items in order.

1. Check AndroidManifest.xml

Open:

android/app/src/main/AndroidManifest.xml

Confirm:

android:icon="@mipmap/ic_launcher"

2. Check that the resources exist

Look under:

android/app/src/main/res/

for:

mipmap-mdpi/ic_launcher.png
mipmap-hdpi/ic_launcher.png
mipmap-xhdpi/ic_launcher.png
mipmap-xxhdpi/ic_launcher.png
mipmap-xxxhdpi/ic_launcher.png

3. Check the actual image

Open one of the generated ic_launcher.png files.

Make sure it contains your custom icon.

4. Check the resource name

If your manifest says:

@mipmap/ic_launcher

your generated resource should also be named:

ic_launcher

5. Regenerate only if necessary

If the files are missing or wrong:

dart run icons_launcher:create

6. Clean if Android still appears to be using old build artifacts

flutter clean
flutter pub get
flutter run

7. Uninstall the old app if necessary

Android launchers can sometimes retain old icon information temporarily.

You can uninstall your package using:

adb uninstall com.example.myapp

and reinstall it.

For more information about Android debugging and device commands, see the official Flutter Android setup documentation.

But this should come after checking the manifest.


The Lesson From This Bug

The biggest mistake I made while troubleshooting this problem was assuming:

The icon looks wrong, therefore the icon generator must be broken.

It wasn’t.

icons_launcher had already generated the correct image resources.

The problem was Android configuration.

The missing line:

android:icon="@mipmap/ic_launcher"

meant Android was no longer being explicitly pointed to the generated launcher icon.

Once that line was restored, everything worked without any other changes.

So if your Flutter launcher icon disappears after changing the package name, check AndroidManifest.xml before spending time deleting caches or regenerating icons.


FAQ

Why is my Flutter app showing the default Android icon?

One possible cause is a missing launcher icon declaration in your Android manifest.

Check:

android/app/src/main/AndroidManifest.xml

and make sure the <application> tag contains:

android:icon="@mipmap/ic_launcher"

Why did my Flutter icon disappear after changing the package name?

A package rename changes native Android project configuration. If the resulting AndroidManifest.xml does not contain the correct launcher icon reference, Android can stop using your generated icon.

In my case, restoring:

android:icon="@mipmap/ic_launcher"

completely solved the problem.


Do I need to run icons_launcher again after changing the package name?

Not necessarily.

First check whether the generated icon resources already exist.

If they do, and they contain your correct icon, check the Android manifest.

Regenerating the exact same resources will not fix a missing manifest reference.


Does flutter clean fix a missing Flutter launcher icon?

It can help when cached build files are responsible for an old icon appearing.

However, it cannot fix missing configuration.

If:

android:icon="@mipmap/ic_launcher"

is absent from AndroidManifest.xml, you need to correct the manifest.


Where is the Flutter Android launcher icon configured?

The Android application icon is referenced from:

android/app/src/main/AndroidManifest.xml

inside the <application> element.

For the common ic_launcher resource:

android:icon="@mipmap/ic_launcher"

The corresponding resources are normally stored under:

android/app/src/main/res/mipmap-*/

For additional Android manifest details, see the official Android application manifest documentation.


Conclusion

If your Flutter app icon changes to the default Android icon after renaming the package, don’t immediately start rebuilding the project from scratch.

Check:

android/app/src/main/AndroidManifest.xml

and look at the <application> element.

In my case, the entire issue came down to this missing line:

android:icon="@mipmap/ic_launcher"

After adding it:

<application
    android:label="My App"
    android:name="${applicationName}"
    android:icon="@mipmap/ic_launcher">

the correct launcher icon returned immediately.

If you are using **Flutter + icons_launcher + **package_rename, this should be one of the first things you check whenever the Android launcher icon suddenly disappears.

Leave a Comment

Your email address will not be published. Required fields are marked *