HarmonyOS 鸿蒙Next中Failed to generate the icon of the customized component 是否是@Builder函数参数没有默认值导致的?
HarmonyOS 鸿蒙Next中Failed to generate the icon of the customized component 是否是@Builder函数参数没有默认值导致的?
我发现[@Builder](/user/Builder)内如果用了图片($r('app.media.xxx'))就报这个错误,不用图片就没错。
Failed to generate the icon of the customized component 通常更像 DevEco Studio 生成自定义组件缩略图/预览图时资源解析失败,不一定是 @Builder 参数没有默认值导致的。@Builder 里正常使用 Image($r(‘app.media.xxx’)) 是支持的。
建议按这几项查:
- 资源名只用小写字母、数字、下划线,文件确实在当前模块的 resources/base/media 下。
- 写法确认是 $r(‘app.media.xxx’),括号和引号都用英文符号,xxx 不带文件后缀。
- 如果图片来自 HAR/HSP 或其他模块,确认资源引用方式和依赖关系正确。
- 清理工程缓存、重新 Sync/Build,再看真机运行和 Preview 是否正常;如果只有组件面板缩略图失败、运行正常,可以带 DevEco Studio 版本和最小 demo 反馈工具侧问题。
我发现@Builder内如果用了图片($r(‘app.media.xxx’)就报这个错误,不用图片就没错。
少写了一个英文括号?正常应该是:$r(‘app.media.xxx’)
建议检查内容:
- 这个xxx图片是否在这个模块内,如果引用是其他模块的图片,那写法要改下。
- 确定写文件名是否正确以及合法。
看看图片路径放对了没有,还有命名要规范

这个报错,资源命名不规范也会出错的。
另外在@Builder里用$r引用图片是正常的。
在其他位置用这个方式用这个图片试试呢,方便贴出你出问题的代码吗?
这个问题:
大概率不是 Builder 参数默认值的问题。
而是:
[@Builder](/user/Builder) 在生成“组件预览缩略图(icon)”时,
资源解析失败。
你观察到:
不用图片没问题
用了 $r('app.media.xxx') 就报错
这个现象其实已经很明显了。
这个报错:
Failed to generate the icon of the customized component
本质上是:
ArkUI 编辑器在生成组件缩略图时崩了
不是运行时报错。
很多时候:
- 组件实际能跑
- 真机正常
- Preview正常
但:
IDE生成组件图标失败
你这个场景最常见原因有几个:
1. Builder 里直接使用 $r()
例如:
Image($r('app.media.test'))
有些版本 DevEco:
组件icon生成器
无法正确解析资源。
尤其:
- 自定义组件
- @Builder
- @BuilderParam
- Previewer
特别容易炸。
2. 图片资源本身有问题
比如:
- 图片过大
- webp
- png异常
- 中文文件名
- 9.png
- alpha通道异常
都会导致:
icon renderer
崩。
我之前有个:
4MB png
直接导致:
Failed to generate icon
换小图秒好。
3. Builder 参数不是常量
比如:
[@Builder](/user/Builder)
Item(img: Resource) {
Image(img)
}
某些版本:
动态图资源
生成 icon 时也可能失败。
因为:
IDE静态分析不了
4. Previewer/Inspector Bug
这个其实最多。
HarmonyOS 目前:
[@Builder](/user/Builder) + Image
一直有一些 IDE Bug。
尤其:
- DevEco 5.x
- DevEco 6.0 early
- API 12~15
社区很多人遇到。
你说的:
[@Builder](/user/Builder)函数参数没有默认值
确实也可能导致:
组件预览失败
但通常报的是:
- undefined
- render failed
- cannot read property
而不是:
generate icon
所以你这个更像:
资源渲染问题
你可以这样验证:
方法1
改:
Image($r('app.media.xxx'))
为:
Image('/common/test.png')
看看是否恢复。
方法2
换一张极小 png。
比如:
20x20
测试。
方法3
不要在 Builder 里直接写 Image。
改:
[@Builder](/user/Builder)
Test() {
Column() {
MyImage()
}
}
很多时候就好了。
因为:
组件icon生成器
对嵌套组件兼容更好。
方法4(最有效)
关闭:
自定义组件缩略图生成
有些版本可以在:
Settings -> ArkUI Preview
关掉。
因为这个错误:
很多时候根本不影响运行
只是 IDE 抽风。
最后总结一句:
你这个问题本质不是 Builder 默认值,
而是 Builder 内 Image/$r 资源导致 IDE 的组件icon生成器崩了。
属于:
DevEco Preview/Inspector 的已知兼容问题
运行正常的话,其实可以不用太管。
要看你代码如何使用;确保资源本地存在就没没问题
可以看下 [@builder 官方解释](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-builder#装饰器使用说明)
@Entry
@Component
struct Index {
build() {
Column() {
this.showTextValueBuilder()
}.width("100%").height("100%")
}
@Builder
showTextValueBuilder() {
Image($r('app.media.image_bg'))
}
}
该错误与@Builder函数参数无默认值无直接关联。常见原因为:@Builder函数未正确使用装饰器声明,或组件icon属性引用的资源路径错误、资源文件缺失。建议检查@Builder函数定义及引用处参数是否匹配,并确认图片资源在指定目录下且格式支持。


