Flutter flavor配置后flavor2无法引用对应资源文件夹的推送图标
Android多Flavor下通知图标显示为圆点的修复方案
针对flavor2除本地推送图标外其余资源均可正常读取的问题,按以下优先级排查修复即可:
1. 优先排查图标素材本身合规性
这是90%以上同类问题的根因,和flavor配置无关:
- 确认flavor2对应res/drawable各密度目录下的推送图标文件名,与flavor1完全一致,命名仅使用小写字母、数字、下划线,不能含大写字符、特殊符号或中文,否则会触发资源合并异常。
- 验证素材有效性:直接将flavor1中可正常显示的推送图标,全量替换flavor2对应目录下的同名图标,重新编译运行。如果替换后图标正常显示,说明你之前的flavor2图标素材不符合Android通知规范:
- 通知小图标必须是纯透明背景的PNG格式,带不透明底色、jpg/webp格式的素材会被系统强制渲染成纯色圆点
- 图标内容要落在系统规定的安全区内,超出区域的内容会被系统裁剪,视觉上也会显示成圆点
- 替换素材后如果还是异常,再往下走配置排查。
2. 核对Flavor资源配置与合并规则
- 检查模块级build.gradle中的flavor资源路径配置,确保flavor2的资源目录指向正确,参考配置:
android { // 其他配置省略 productFlavors { flavor1 { res.srcDirs = ['src/flavor1/res'] } flavor2 { res.srcDirs = ['src/flavor2/res'] } } }
- 路径配置完成后,执行Gradle任务
./gradlew :app:sourceSets(Windows下去掉开头的./),查看输出日志中flavor2的res目录列表,确认你存放推送图标的目录在列表内,没有错配、漏配。 - 检查资源覆盖冲突:选择flavor2构建变体编译完成后,打开路径
app/build/intermediates/incremental/mergeFlavor2Resources/merged.dir/,找到对应drawable密度目录下的推送图标文件,确认最终合并产物是你放入flavor2目录的素材:- 如果产物不对,说明存在高优先级资源覆盖:检查main、debug/release构建类型目录、第三方依赖库中是否存在同名的推送图标资源,这类资源优先级高于flavor资源,会直接覆盖你配置的flavor专属素材,删掉冲突的同名资源即可。
3. 检查代码中的资源引用逻辑
- 确认本地推送构建代码中,小图标引用的是当前模块的R资源,不要硬编码资源id、不要引用其他包名下的R文件,正确引用示例:
val notification = NotificationCompat.Builder(context, NOTIFY_CHANNEL_ID) .setSmallIcon(R.drawable.ic_push_small) // 必须引用本模块的drawable资源 // 其他配置省略 .build()
- 如果代码中通过
Resources.getIdentifier()动态获取图标资源,要确认传入的包名参数和flavor2的实际applicationId一致,包名传错会导致资源查找失败,系统会fallback渲染成圆点。
4. 清理缓存排除干扰
以上配置都核对无误仍异常的话,按顺序清理缓存:
- 删除app模块下的整个build文件夹
- 执行Android Studio的File -> Invalidate Caches,勾选清除文件系统缓存和本地历史后重启IDE
- 卸载测试设备上已安装的flavor2安装包,执行clean、rebuild后重新安装测试,排除旧构建缓存、设备端安装包残留的干扰。
内容的提问来源于stack exchange,提问作者Sandun Perera
相关产品推荐
相关产品推荐

