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

请问有什么排查思路,产物中Index.js 跟 Index.d.ts 都没变化
更多关于HarmonyOS鸿蒙Next中项目CI调整之后,所有的C++打包出来的har中的export出来的类名都找不到了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好:
根据报错信息,表明项目在打包(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包导出的类名丢失,通常与构建配置变更有关。请检查以下方面:
- 确认
oh-package.json5中externalNativeBuild配置是否与CI流程匹配。 - 验证
CMakeLists.txt中的target_include_directories和install指令是否正确导出头文件。 - 确保HAR包的
include目录在CI构建后包含完整的C++头文件。
若问题持续,需核对CI脚本中build-profile.json5的buildOption配置,特别是externalNativeOptions参数。
根据您提供的错误信息“Cannot find module ‘libentry.so’”,结合CI调整后C++ HAR导出类找不到的情况,核心问题在于HAR包的Native(C++)库未正确打包或路径引用失效。
主要排查方向如下:
-
检查Native库打包配置:
- 确认
CMakeLists.txt或BUILD.gn中,C++动态库(如libentry.so)的目标输出路径和名称在CI调整后是否发生变化。 - 检查HAR模块的
oh-package.json5,确保nativeLibrary字段指定的.so库名称(例如"libentry.so")与实际生成的库文件完全一致(包括前缀lib和后缀.so)。 - 验证CI流程中是否成功编译了C++代码并生成对应的
.so文件,且该文件被正确复制到HAR包的libs目录下(通常是{ABI}子目录,如arm64-v8a)。
- 确认
-
检查模块依赖与加载路径:
- 确保使用该HAR的模块在其
oh-package.json5中已正确声明对HAR包的依赖。 - 如果CI调整涉及构建目录或产物输出路径的变更,请检查HAR包中
Index.js及Index.d.ts里导出Native类的路径是否仍指向正确的.so库位置(通常通过requireNative等方式加载)。虽然您提到这两个文件内容未变,但需确认其引用的相对路径在CI调整后的新构建环境下依然有效。
- 确保使用该HAR的模块在其
-
验证HAR包内容结构:
- 解压生成的
.har文件,检查内部结构是否符合预期:index.ets/Index.js(入口文件)oh-package.json5(配置)libs/{ABI}/libentry.so(Native库文件应存在于此)
- 确认
.so文件是否被成功打包进HAR。如果缺失,需检查CI中构建、打包步骤是否完整。
- 解压生成的
-
排查构建脚本与环境:
- CI调整可能引入了新的构建步骤、环境变量或工具链变更,影响C++编译或资源收集。对比调整前后的CI配置文件(如
Jenkinsfile、.gitlab-ci.yml或脚本),重点关注与build、har打包相关的环节。 - 检查是否因构建缓存导致旧版本HAR被错误使用。尝试清理构建缓存并重新执行完整构建。
- CI调整可能引入了新的构建步骤、环境变量或工具链变更,影响C++编译或资源收集。对比调整前后的CI配置文件(如
建议操作:首先从解压HAR包验证.so文件是否存在入手,然后核对oh-package.json5中的nativeLibrary配置与实际库文件名是否匹配。这类问题通常由CI流程中资源收集或路径配置不一致导致。

