HarmonyOS鸿蒙Next中项目CI调整之后,所有的C++打包出来的har中的export出来的类名都找不到了

HarmonyOS鸿蒙Next中项目CI调整之后,所有的C++打包出来的har中的export出来的类名都找不到了 cke_227.png

请问有什么排查思路,产物中Index.js 跟 Index.d.ts 都没变化


更多关于HarmonyOS鸿蒙Next中项目CI调整之后,所有的C++打包出来的har中的export出来的类名都找不到了的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

开发者你好:

根据报错信息,表明项目在打包(har)后,模块 abase 没有导出AquabaseManager这个类。可做如下排查:

1、最近CI调整主要调整了哪些部分呢,检查构建配置比如CMakeLists文件,确保您的正确配置了C++的符号导出。

2、does not provide an export name 报错也有可能是开启了混淆

3、也可尝试临时回滚 CI 的调整,看问题是否消失。可以快速定位是哪个具体调整导致了问题。

更多关于HarmonyOS鸿蒙Next中项目CI调整之后,所有的C++打包出来的har中的export出来的类名都找不到了的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


ohpm clean && ohpm install --all 试试?

在HarmonyOS Next中,项目CI调整后,C++ HAR包导出的类名丢失,通常与构建配置变更有关。请检查以下方面:

  1. 确认oh-package.json5externalNativeBuild配置是否与CI流程匹配。
  2. 验证CMakeLists.txt中的target_include_directoriesinstall指令是否正确导出头文件。
  3. 确保HAR包的include目录在CI构建后包含完整的C++头文件。

若问题持续,需核对CI脚本中build-profile.json5buildOption配置,特别是externalNativeOptions参数。

根据您提供的错误信息“Cannot find module ‘libentry.so’”,结合CI调整后C++ HAR导出类找不到的情况,核心问题在于HAR包的Native(C++)库未正确打包或路径引用失效

主要排查方向如下:

  1. 检查Native库打包配置

    • 确认CMakeLists.txtBUILD.gn中,C++动态库(如libentry.so)的目标输出路径和名称在CI调整后是否发生变化。
    • 检查HAR模块的oh-package.json5,确保nativeLibrary字段指定的.so库名称(例如"libentry.so")与实际生成的库文件完全一致(包括前缀lib和后缀.so)。
    • 验证CI流程中是否成功编译了C++代码并生成对应的.so文件,且该文件被正确复制到HAR包的libs目录下(通常是{ABI}子目录,如arm64-v8a)。
  2. 检查模块依赖与加载路径

    • 确保使用该HAR的模块在其oh-package.json5中已正确声明对HAR包的依赖。
    • 如果CI调整涉及构建目录或产物输出路径的变更,请检查HAR包中Index.jsIndex.d.ts导出Native类的路径是否仍指向正确的.so库位置(通常通过requireNative等方式加载)。虽然您提到这两个文件内容未变,但需确认其引用的相对路径在CI调整后的新构建环境下依然有效。
  3. 验证HAR包内容结构

    • 解压生成的.har文件,检查内部结构是否符合预期:
      • index.ets / Index.js(入口文件)
      • oh-package.json5(配置)
      • libs/{ABI}/libentry.so(Native库文件应存在于此)
    • 确认.so文件是否被成功打包进HAR。如果缺失,需检查CI中构建、打包步骤是否完整。
  4. 排查构建脚本与环境

    • CI调整可能引入了新的构建步骤、环境变量或工具链变更,影响C++编译或资源收集。对比调整前后的CI配置文件(如Jenkinsfile.gitlab-ci.yml或脚本),重点关注与buildhar打包相关的环节。
    • 检查是否因构建缓存导致旧版本HAR被错误使用。尝试清理构建缓存并重新执行完整构建。

建议操作:首先从解压HAR包验证.so文件是否存在入手,然后核对oh-package.json5中的nativeLibrary配置与实际库文件名是否匹配。这类问题通常由CI流程中资源收集或路径配置不一致导致。

回到顶部