HarmonyOS鸿蒙Next中@tb-open/svga播放svga报错,请帮我看看我需要怎么做

HarmonyOS鸿蒙Next中@tb-open/svga播放svga报错,请帮我看看我需要怎么做

"name": "SvgaError",
"code": 9999,
"message": "An exception occurred during serialization, taskpool: failed to serialize result.\nSerialize error: The serialization data size has exceed limit Size, current size is: 38590034 max size is: 16777216",
2026-02-12T03:34:06.744Z] [ERROR] [SVGA]:ErrorHandler "Error occurred:" {
  "name": "SvgaError",
  "code": 9999,
  "message": "undefined is not callable",
  "context": {
    "args": true,
    "operation": "http_request",
    "url": "https://xxx/17684608801753784327浮生若梦.svga",
    "bufferSize": 4482689,
    "source": "https://xxx/17684608801753784327浮生若梦.svga",
    "success": true,
    "key": "https://xxx/17684608801753784327浮生若梦.svga"
  },
  "timestamp": 1770867246742,
  "stack": "Cannot get SourceMap info, dump raw stack:\n=====================Backtrace========================\n#00 pc 000000000044f4b8 /system/lib64/platformsdk/libark_jsruntime.so\n#01 pc 000000000044b720 /system/lib64/platformsdk/libark_jsruntime.so\n#02 pc 0000000000449a48 /system/lib64/platformsdk/libark_jsruntime.so\n#03 pc 000000000044942c /system/lib64/platformsdk/...[truncated]
 [ERROR] [SVGA]:ErrorHandler "Error occurred:" {
  "name": "SvgaError",
  "code": 1005,
  "message": "the requested module '@normalized:Y&&&libsvga.so&' does not provide an export name 'deserialize' which imported by '&[@tb-open](/user/tb-open)/svga/src/main/ets/utils/inflate&1.4.2'",
  "context": {
    "version": "2.x",
    "bufferSize": 6008125
  },
  "timestamp": 1770631104771,
  "stack": "    at Inflate (entry|[@tb-open](/user/tb-open)/svga|1.4.2|src/main/ets/utils/inflate.ts:91:45)\n"
} "Context:" {
  "code": 1005,
  "context": {
    "version": "2.x",
    "bufferSize": 6008125
  },
  "suggestion": "请检查SVGA文件是否完整,文件格式是否正确"
}
[ERROR] [SVGA] "2.x版本解压失败:" {
SvgaPlayer({
  // url: $r('app.media.example_animation'),
  url: $rawfile('lottie/6043_财神官.svga'),
  controller: this.controller
})
.width('100%')
.height('100%')

svga文件正常,但是在鸿蒙里面运行就跑不起来


更多关于HarmonyOS鸿蒙Next中@tb-open/svga播放svga报错,请帮我看看我需要怎么做的实战教程也可以访问 https://www.itying.com/category-93-b0.html

15 回复

开发者你好,

当前HarmonyOS尚未支持svga格式动画的解析,实现加载svga动画可以参考链接:如何实现加载svga动画,如需适配。请转需求处理,请问您是在什么样的业务场景中使用该能力,交互流程是怎样的,在哪一个环节遇到了问题?方便说明能力不满足可能带来的影响:什么时间用到?是否高频?有无三方库可以做到?若提供该能力,是否会造成大工作量返工?请您注意提供的内容不要包含您或第三方的非公开信息,如给您带来不便,敬请谅解。

更多关于HarmonyOS鸿蒙Next中@tb-open/svga播放svga报错,请帮我看看我需要怎么做的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


开发者你好,

这边使用6.0.2 Beta1版本的DevEco Studio和API 22版本的设备加载svga文件未出现开发者的问题,方便的话可以提供下您的DevEco Studio和设备版本信息,以及svga文件和完整的日志信息以便进一步分析吗?

本地测试Demo:

import { SvgaController, SvgaErrorCode, SvgaPlayer, SvgaPlayerV2 } from '@tb-open/svga';
import { promptAction } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  private controller: SvgaController = new SvgaController({
    loops: 3, // 播放3次
    fillMode: 'forwards', // 播放结束后停留在最后一帧
    pageUpdateMode: 'pause', // 页面切换时暂停动画
    autoRelease: true, // 页面销毁时自动释放资源
    clearsAfterStop: true        // 停止播放后清理资源
  });

  // 在组件的onReady生命周期中加载
  aboutToAppear() {
    // 播放完成回调
    this.controller.onFinished(() => {
      console.info('动画播放完成');
    });
    // 帧变化回调
    this.controller.onFrame((frame) => {
      console.info(`当前帧: ${frame}`);
    });
    // 进度变化回调
    this.controller.onPercentage((percent) => {
      console.info(`当前进度: ${percent * 100}%`);
    });
    // 错误处理回调
    this.controller.onError((error) => {
      console.error('SVGA错误:', error);
      // 根据错误码进行不同处理
      switch (error.code) {
        case SvgaErrorCode.NETWORK_ERROR:
          promptAction.showToast({ message: '网络连接失败' });
          break;
        case SvgaErrorCode.FILE_NOT_FOUND:
          promptAction.showToast({ message: '动画文件不存在' });
          break;
        default:
          promptAction.showToast({ message: error.message });
      }
    });
  }

  build() {
    Column() {
      // 声明式UI 1.0版本组件
      SvgaPlayer({
        url: $r('app.media.ga6'),
        controller: this.controller
      })
        .width(300)
        .height(150)
    }
    .width('100%')
    .height('100%')
  }
}

开发者你好, 日志显示,核心错误是svga文件解压失败:inflate_failed,导致后续缓存模块参数异常,是资源文件本身的问题。 请排查下这两svga二进制文件是否正常。

你好,如果这俩能在安卓、ios、web播放,鸿蒙不行,是不是可以认为这俩的内容格式在鸿蒙里有问题,不兼容,不适配,

楼主的svga文件有问题?楼主是什么文件,能正常播放吗?看报错信息

"message": "the requested module '@normalized:Y&&&libsvga.so&' does not provide an export name 'deserialize' which imported by '&@tb-open/svga/src/main/ets/utils/inflate&1.4.2'",

是不是这个库的inflate里都没有deserialize这个模块?

感谢,我之前怀疑是模拟器少了这个模块,我刚才找了一台真机运行,就可以播放svga动画,

我之前用svga动画不展示,是一年前了,后面我们用的gif了,

就是直播间礼物动效,目前只有svga文件,难搞啊😂,

把文件名里的中文删了试试,

期待HarmonyOS能在未来推出更多针对特定场景的优化功能。

删了,还是一样的报错,

鸿蒙原生不支持svga,不行用svga2lottie等转换工具转换成lottie格式吧,

只能这样了,

1. 背景

在当今快速发展的技术环境中,保持领先地位至关重要。随着人工智能、云计算和物联网等领域的不断进步,企业和个人都需要适应这些变化,以保持竞争力。

2. 挑战

面对技术的快速迭代,主要挑战包括:

  • 技能差距:新技术不断涌现,导致现有技能迅速过时。
  • 数据安全:随着数据量的增长,保护敏感信息免受威胁变得更加复杂。
  • 集成复杂性:将新旧系统无缝集成是一个常见且棘手的问题。
  • 成本管理:平衡创新投资与预算限制需要谨慎规划。

3. 解决方案

为了应对这些挑战,可以考虑以下策略:

  1. 持续学习:鼓励通过在线课程、研讨会和认证项目进行持续教育。
  2. 采用强大框架:实施稳健的安全协议和数据处理框架。
  3. 拥抱模块化:使用微服务和API优先设计来简化集成。
  4. 优化资源:利用云服务和自动化工具来提高效率并控制成本。

4. 结论

虽然技术格局带来了重大挑战,但通过积极主动的策略和适应性,可以有效地应对这些挑战。关键在于保持灵活性,持续学习,并战略性地利用现有工具和资源。

在HarmonyOS Next中,@tb-open/svga库可能不兼容。请检查:

  1. 确认该库是否已适配HarmonyOS Next的API。
  2. 查看项目使用的API版本,确保与库的要求匹配。
  3. 检查SVGA文件格式是否正确。
  4. 在官方资源或社区查找专为HarmonyOS设计的SVGA播放方案。

根据你提供的错误信息,问题主要集中在几个方面:

  1. 序列化数据超限:第一个错误显示序列化数据大小(38.59MB)超过了系统限制(16MB)。这表明你的SVGA文件可能过大,或者在使用@tb-open/svga库进行数据处理时,中间数据超出了任务池(taskpool)的传输限制。

  2. Native库导出函数缺失:关键错误是the requested module '@normalized:Y&&&libsvga.so&' does not provide an export name 'deserialize'。这表明@tb-open/svga库所依赖的底层原生库libsvga.so在HarmonyOS Next环境中,其提供的Native API(特别是deserialize函数)与库的预期不符或不可用。这很可能是库与当前系统版本不兼容导致的。

  3. 网络请求与未定义调用"undefined is not callable"错误通常发生在尝试调用一个未成功初始化或加载的对象/函数时,结合上下文"operation": "http_request",可能是在网络资源加载成功后的某个回调或处理环节出现了问题。

解决思路如下:

  • 检查库的兼容性:首要任务是确认你使用的@tb-open/svga库的版本是否明确支持HarmonyOS Next。查看库的官方文档或更新日志,确认其已适配Next的ArkTS/API版本。如果不支持,需要寻找替代的SVGA播放库或等待库作者更新。

  • 验证SVGA文件

    • 减小文件尺寸:尝试使用工具(如SVGA官方提供的优化工具)压缩你的SVGA文件,确保其解压后的数据量(尤其是涉及序列化的部分)远小于16MB。
    • 格式验证:确保SVGA文件是有效的。可以尝试在官方SVGA预览器或其他平台(如Web、旧版HarmonyOS)上测试同一个文件,确认其本身无损坏。
  • 调整资源加载方式:你代码中使用了$rawfile引用本地资源。可以尝试:

    • 将SVGA文件放到正确的资源目录下(如src/main/resources/base/media/),并使用$r('app.media.your_svga_filename')的方式引用,确保资源打包路径正确。
    • 如果文件确实较大,考虑是否必须内置。对于大文件,动态下载到应用沙箱路径再播放可能比内置在包内更灵活,但需注意下载后的文件路径访问权限。
  • 代码检查:确保SvgaPlayercontroller已正确初始化并在组件中关联。检查是否有异步加载逻辑,确保在资源完全加载成功后再进行播放操作。

  • 关注库更新:如果上述步骤无法解决,且确认是库的兼容性问题,需要关注@tb-open/svga库的更新。同时,可以查阅HarmonyOS官方关于图形动画或多媒体播放的最新文档和示例,看是否有推荐的SVGA实现方案或已知的第三方库兼容列表。

核心问题指向了Native库的兼容性。在HarmonyOS Next上,确保所有依赖的Native模块(.so文件)都针对新的系统架构和API进行了编译和适配是至关重要的。

回到顶部