使用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

