HarmonyOS 鸿蒙Next 执行worker时,worker能正常执行但总是报错,有没有解决办法

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 执行worker时,worker能正常执行但总是报错,有没有解决办法

11-20 21:12:11.279   16781-17006   C03f00/ArkCompiler                   E     ReferenceError: NativeCustomSpan is not defined

11-20 21:12:11.279   16781-17006   C03f00/ArkCompiler                  E         at func_main_0 (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsEnumStyle.js:3007:1)

11-20 21:12:11.279   16781-17006   C03f00/ArkCompiler                 E     [ecmascript] invalid size of the string cache table or the table has been registered.

11-20 21:12:11.280   16781-17006   C03f00/ArkCompiler                  E     [ecmascript] Currently, maximum size of the table is 150

11-20 21:12:11.287   16781-17006   C01305/Base                         E     [extractor.cpp(IsHapCompress:266)]GetEntry failed fileName: ets/workers/ImageDownloadWorker.abc

11-20 21:12:11.287   16781-17006   C01305/Base                       E     [zip_file.cpp(CreateFileMapper:1034)]GetEntry failed hapPath ets/workers/ImageDownloadWorker.abc

11-20 21:12:11.287   16781-17006   C01321/JsRuntime                   E     [js_worker.cpp:431]Get secure mem failed, file <private>

11-20 21:12:11.287   16781-17006   C01321/JsRuntime                    E     [js_worker.cpp:264]Get buffer by filepath failed

2 回复

首先看一下第一行报错,ReferenceError: NativeCustomSpan is not defined,后面一串表示

/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsEnumStyle.js:3007:1 处引用了未定义的NativeCustomSpan。

这个错误需要检查该文件中这一行附近的代码逻辑,确认一下是不是正确引入了包含NativeCustomSpan定义的模块或文件。如果没有正确引入,自己修改一下

在排查完对应的逻辑之后,再查看一下,这部分代码相关的所有依赖模块都已正确安装和加载,项目的构建文件是否齐全,核对涉及到的库的依赖配置是不是准确,上面的内容没对好都会报错。

第二个,[ecmascript] invalid size of the string cache table or the table has been registered.巴拉巴拉。

首先检查一下缓存配置的参数,看一下表符串缓存表的大小是不是有问题,要么是无效的大小设置,要么是已经注册过但不符合当前要求。找找代码里关于字符串缓存表初始化或配置的部分,检查一下,设置的大小参数是否符合 HarmonyOS 的规范以及是否与当前应用场景匹配。更具体的可以查看一下ECMAScript 运行环境相关的缓存配置那一块的代码

如果查看完上面的内容还是没有缓解,那就可以考虑一下是不是内存是不是太大了。

那么第三个,[extractor.cpp (IsHapCompress:266)] GetEntry failed fileName: ets/workers/ImageDownloadWorker.abc

先检查一下文件的路径,是不是拼写错误或者,漏写。报错显示在获取ets/workers/ImageDownloadWorker.abc文件的入口时失败了,涉及到extractor.cpp和zip_file.cpp`相关代码逻辑。首先要确认该文件是否确实存在于指定的路径下,如果文件不存在,需要检查文件生成或部署环节是否出现问题。可能是在构建过程中该 worker 文件没有正确生成或没有被正确放置到指定位置。只需要正确生成一下或者,将代码放到指定位置就可以。

第二个就是查看一下自己的压缩和解压缩是不是正常,根据错误涉及到的IsHapCompress和CreateFileMapper`等函数来看,如果解压缩什么的都正确,那可以检查文件映射相关的逻辑,保证在获取文件入口时能够正确映射到实际的文件内容。

第四个错误,针对 “[js_worker.cpp:431] Get secure mem failed, file <private>

这个错误出现的时候,首先要检查一下代码内存权限的分配,该错误提示在js_worker.cpp的 431 行获取安全内存失败。看下代码里有关内存分配和获取安全内存的逻辑。确保有足够的内存和权限。

第五个,针对 [js_worker.cpp:264] Get buffer by filepath failed” 获取文件路径缓冲区失败错误

首先是验证一下文件的路径是不是还有效,拼写是不是对了、路径分隔符是不是使用正确,这个报错还可能表明在js_worker.cpp的 264 行通过文件路径获取缓冲区失败。或者检查一下缓冲区是否被正确设置。
可以多看看对应一下能不能解决

针对HarmonyOS 鸿蒙Next执行worker时遇到的报错问题,可以尝试以下专业解决方案:

  1. 检查模块依赖

    • 确保所有必要的模块都已正确安装,并且版本兼容。特别是@ohos/hvigor等核心模块,必须确保它们在项目中的引用是正确且完整的。
  2. 审查代码错误

    • 仔细检查worker中的代码,查找可能导致报错的语法错误、逻辑错误或类型不匹配等问题。
  3. 配置检查

    • 确认项目的配置文件(如build-profile.json5)是否正确设置了运行时环境为HarmonyOS。
  4. 环境兼容性

    • 确保DevEco Studio和HarmonyOS SDK均为最新版本,以支持最新的功能和修复已知的错误。
  5. 清理和重建

    • 尝试清理项目并重新构建,以消除可能存在的构建缓存问题。
  6. 日志分析

    • 仔细分析报错日志,查找具体的错误信息和错误位置,以便进行针对性的修复。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部