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'))就报这个错误,不用图片就没错。
9 回复

尊敬的开发者,您好,
本地使用6.1.0版本的DevEco Studio测试,未能复现您所说的问题,如果只是在@Builder函数中引用图片资源,一般不会出现上述错误。
为了尽快解决您的问题,需要您进一步提供如下信息:

  1. 出现上述问题的具体场景,方便的话,麻烦提供一个可复现问题的简单Demo
  2. 您所使用的DevEco Studio版本、API版本以及测试所用的设备

更多关于HarmonyOS 鸿蒙Next中Failed to generate the icon of the customized component 是否是@Builder函数参数没有默认值导致的?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


Failed to generate the icon of the customized component 通常更像 DevEco Studio 生成自定义组件缩略图/预览图时资源解析失败,不一定是 @Builder 参数没有默认值导致的。@Builder 里正常使用 Image($r(‘app.media.xxx’)) 是支持的。

建议按这几项查:

  1. 资源名只用小写字母、数字、下划线,文件确实在当前模块的 resources/base/media 下。
  2. 写法确认是 $r(‘app.media.xxx’),括号和引号都用英文符号,xxx 不带文件后缀。
  3. 如果图片来自 HAR/HSP 或其他模块,确认资源引用方式和依赖关系正确。
  4. 清理工程缓存、重新 Sync/Build,再看真机运行和 Preview 是否正常;如果只有组件面板缩略图失败、运行正常,可以带 DevEco Studio 版本和最小 demo 反馈工具侧问题。

我发现@Builder内如果用了图片($r(‘app.media.xxx’)就报这个错误,不用图片就没错。

少写了一个英文括号?正常应该是:$r(‘app.media.xxx’)
建议检查内容:

  1. 这个xxx图片是否在这个模块内,如果引用是其他模块的图片,那写法要改下。
  2. 确定写文件名是否正确以及合法。

看看图片路径放对了没有,还有命名要规范

cke_469.png

这个报错,资源命名不规范也会出错的。
另外在@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生成器

无法正确解析资源。

尤其:

特别容易炸。


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函数定义及引用处参数是否匹配,并确认图片资源在指定目录下且格式支持。

错误的原因是预览器在生成组件图标时无法正确处理 @Builder 函数内部直接引用 $r('app.media.xxx') 的资源,而非 @Builder 参数缺少默认值。预览环境与运行时资源加载机制不同,动态资源引用会导致图标生成失败。去掉图片调用即恢复,恰好说明问题出在资源解析环节。

回到顶部