You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用flutter_launcher_icons 0.14.1生成图标后触发FATAL EXCEPTION错误

问题描述

使用flutter_launcher_icons 0.14.1生成Flutter应用启动图标,执行dart run flutter_launcher_icons后工具提示成功,但运行应用时抛出以下异常:

E/AndroidRuntime(23044): FATAL EXCEPTION: wmshell.splashworker
E/AndroidRuntime(23044): Process: com.android.systemui, PID: 23044
E/AndroidRuntime(23044): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.drawable.Drawable.draw(android.graphics.Canvas)' on a null object reference
E/AndroidRuntime(23044):    at com.android.wm.shell.startingsurface.SplashscreenIconDrawableFactory$AdaptiveForegroundDrawable.draw(SplashscreenIconDrawableFactory.java:269)
E/AndroidRuntime(23044):    at com.android.wm.shell.startingsurface.SplashscreenIconDrawableFactory$ImmobileIconDrawable.preDrawIcon(SplashscreenIconDrawableFactory.java:131)
E/AndroidRuntime(23044):    at com.android.wm.shell.startingsurface.SplashscreenIconDrawableFactory$ImmobileIconDrawable.lambda$new$1(SplashscreenIconDrawableFactory.java:117)
E/AndroidRuntime(23044):    at com.android.wm.shell.startingsurface.SplashscreenIconDrawableFactory$ImmobileIconDrawable.$r8$lambda$0odOtiiVhAkJamazINpBnODkLdw(Unknown Source:0)
E/AndroidRuntime(23044):    at com.android.wm.shell.startingsurface.SplashscreenIconDrawableFactory$ImmobileIconDrawable$$ExternalSyntheticLambda0.run(Unknown Source:6)
E/AndroidRuntime(23044):    at android.os.Handler.handleCallback(Handler.java:942)
E/AndroidRuntime(23044):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(23044):    at android.os.Looper.loopOnce(Looper.java:240)
E/AndroidRuntime(23044):    at android.os.Looper.loop(Looper.java:351)
E/AndroidRuntime(23044):    at android.os.HandlerThread.run(HandlerThread.java:67)

同时应用启动图标显示为Android默认图标,已尝试flutter clean→flutter pub get→dart run flutter_launcher_icons→运行的流程,问题未解决。

pubspec.yaml配置如下:

name: activity_app
description: 'A new Flutter project.'
publish_to: 'none'
version: 0.1.0

environment:
  sdk: '>=3.3.1 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  flutter_screenutil: ^5.9.1
  http: ^1.2.1
  provider: ^6.1.2
  table_calendar: ^3.1.1
  intl: ^0.19.0
  bottom_picker: ^2.7.0
  crypto: ^3.0.3
  shared_preferences: ^2.3.2
  intl_phone_number_input: ^0.7.4
  url_launcher: ^6.3.0
  firebase_core: ^3.6.0
  firebase_messaging: ^15.1.3

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^3.0.0
  flutter_launcher_icons: ^0.14.1

flutter_launcher_icons:
  image_path_android: 'assets/cm_launcher_icon.png'
  image_path_ios: 'assets/cm_launcher_icon.png'
  android: true
  ios: true
  min_sdk_android: 21
  remove_alpha_ios: true
  web:
    generate: true
    image_path: 'assets/cm_launcher_icon.png'
    background_color: '#F9F9F9'
    theme_color: '#F9F9F9'
  windows:
    generate: true
    image_path: 'assets/cm_launcher_icon.png'
    icon_size: 48
  macos:
    generate: true
    image_path: 'assets/cm_launcher_icon.png'

flutter:
  uses-material-design: true

  assets:
    - assets/cm_launcher_icon.png
    - assets/cm_logo.webp
    - assets/cm_icon.webp
    - assets/cm_and_nu_icon.webp
解决方案

该异常是Android系统加载自适应启动图标时前景Drawable为空导致的,按以下步骤排查修复:

  • 检查源图标规格:确保cm_launcher_icon.png为正方形(建议1024x1024px),文件无损坏,透明通道处理正常。Android自适应图标对前景图的尺寸、边缘要求严格,不符合规格会导致生成的Drawable无效。

  • 修改Android图标配置:在pubspec.yaml中明确指定自适应图标的前景和背景,替换原有的image_path_android配置:

    flutter_launcher_icons:
      android:
        adaptive_icon_background: "#F9F9F9" # 与web配置的背景色保持一致
        adaptive_icon_foreground: "assets/cm_launcher_icon.png"
      # 保留iOS、web等其他原有配置...
    

    直接指定自适应图标参数可避免工具自动生成时的适配问题。

  • 手动清理旧图标资源:删除android/app/src/main/res/下所有mipmap-*目录中的ic_launcher、ic_launcher_round相关文件,以及drawable目录中的ic_launcher_foreground.xml、ic_launcher_background.xml文件,避免旧资源干扰。

  • 重新执行生成流程:

    flutter clean
    flutter pub get
    dart run flutter_launcher_icons
    flutter run
    
  • 降级插件版本:若上述步骤无效,将flutter_launcher_icons降级到0.13.1(0.14.x版本存在部分Android 12+适配bug),修改pubspec.yaml后重新执行生成流程。

  • 验证AndroidManifest配置:确保android/app/src/main/AndroidManifest.xml中应用图标引用正确:

    <application
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:label="@string/app_name"
        ...>
    

内容的提问来源于stack exchange,提问作者zxc123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:00:05