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

Flutter应用使用flutter_local_notifications接收通知时Android端崩溃如何解决

错误根因

报错栈明确指向flutter_local_notifications库的setSmallIcon方法触发空指针,本质是release打包后,通知小图标对应的Android资源ID无法被正常读取,返回null后调用intValue()触发崩溃。debug模式下默认关闭资源压缩、代码混淆,资源ID可以正常读取,所以不会出现问题。

修复步骤

  • 确认通知小图标符合Android规范
    通知小图标需要放在android/app/src/main/res/drawable目录下,要求为透明背景、仅白色前景的png图,适配Android 5.0+的通知图标规范,文件名只能包含小写字母、数字和下划线,比如命名为ic_notification.png,禁止直接使用APP启动图标作为通知小图标。
  • 在AndroidManifest中配置默认通知图标
    打开android/app/src/main/AndroidManifest.xml,在<application>标签内部添加如下配置:
    <meta-data
        android:name="com.dexterous.flutterlocalnotifications.default_notification_icon"
        android:resource="@drawable/ic_notification" />
    
  • 显式指定初始化图标
    初始化flutter_local_notifications时,Android配置项显式传入你使用的图标名:
    final AndroidInitializationSettings androidInitSettings =
        AndroidInitializationSettings('ic_notification');
    final InitializationSettings initSettings =
        InitializationSettings(android: androidInitSettings);
    await flutterLocalNotificationsPlugin.initialize(initSettings);
    
  • 配置资源与代码防混淆规则
    1. 打开android/app/build.gradle,在release构建配置下添加资源keep规则,避免图标被压缩裁剪:
    android {
        buildTypes {
            release {
                shrinkResources true
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                // 新增下面的配置
                aaptOptions {
                    keepAssets "drawable/ic_notification*"
                }
            }
        }
    }
    
    1. 打开android/app/proguard-rules.pro,添加库的防混淆规则:
    -keep class com.dexterous.flutterlocalnotifications.** { *; }
    
  • 清理缓存重新打包
    执行flutter clean清理历史构建缓存后,再执行release打包命令验证问题是否修复。

内容的提问来源于stack exchange,提问作者DZ UY Scuti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:00:06