HarmonyOS鸿蒙Next中@react-native-ohos/react-native-zip-archive三方库无法运行

HarmonyOS鸿蒙Next中@react-native-ohos/react-native-zip-archive三方库无法运行 【问题描述】:@react-native-ohos/react-native-zip-archive三方库按文档安装时无法运行,文档地址:https://gitcode.com/OpenHarmony-RN/usage-docs/blob/master/zh-cn/react-native-zip-archive.md

【问题现象】按文档配置完成后,在rn工程侧运行codegen和npm run dev,然后回到harmony工程侧同步后在设备上运行,出现报错:fatal error: ‘RNOH/generated/turbo_modules/RNZipArchive.h’ file not found

#include “RNOH/generated/turbo_modules/RNZipArchive.h”

cke_15342.png

【版本信息】:

@react-native-oh/react-native-harmony: 0.72.133

@react-native-ohos/react-native-zip-archive: 6.1.2-rc.1

【复现代码】:参考文档:https://gitcode.com/OpenHarmony-RN/usage-docs/blob/master/zh-cn/react-native-zip-archive.md


更多关于HarmonyOS鸿蒙Next中@react-native-ohos/react-native-zip-archive三方库无法运行的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

尊敬的开发者,您好!感谢您的反馈,问题正在加速处理中,还请关注后续版本,感谢您的理解与支持。

更多关于HarmonyOS鸿蒙Next中@react-native-ohos/react-native-zip-archive三方库无法运行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


报错是 turbo-modules 头文件未生成,大概率是 codegen 未执行成功。

先检查:

  1. package.json 是否配置了 codegenConfig ;
  2. 执行 npx react-native codegen-harmony 手动生成头文件;
  3. 鸿蒙工程侧需同步 oh-package.json5 依赖,再重新构建。

也可尝试清理缓存后重新运行 npm run dev 。

这个报错本质是:ZipArchive 这个库是 TurboModule(新架构)库,它在 C++ 侧 #include "RNOH/generated/turbo_modules/RNZipArchive.h",而这个头文件是 RNOH 的 Codegen 生成产物。现在你的工程里 没有跑/没有接入 codegen 产物,所以编译期直接找不到头文件。

你用的版本组合(@rnoh/react-native-openharmony + @react-native-ohos/react-native-zip-archive)是典型需要手动跑一次 codegen-harmony 的场景。


解决步骤(按顺序来)

1)先确保 RNOH SDK 已经在 Harmony 工程里安装到 oh_modules

你截图里已经有: harmony/entry/oh_modules/@rnoh/react-native-openharmony (DevEco “同步/ohpm install” 后应存在)

2)在 RN 工程根目录配置并执行 codegen

package.json 增加脚本(路径按你工程结构改;你截图是 harmony/entry/...):

{
  "scripts": {
    "codegen": "react-native codegen-harmony --cpp-output-path ./harmony/entry/src/main/cpp/generated --rnoh-module-path ./harmony/entry/oh_modules/@rnoh/react-native-openharmony"
  }
}

然后执行:

npm run codegen

执行完你应该能在类似路径看到文件(关键是这个):

  • harmony/entry/oh_modules/@rnoh/react-native-openharmony/generated/turbo_modules/RNZipArchive.h

如果这里还没有生成,说明 codegen 没扫描到该三方库(通常是库没正确安装、或库没带 codegenConfig、或没在 RN 工程里被识别到)。

3)把生成的 C++ 代码编进 rnoh_app(有些模板已做过,但建议核对)

按 codegen 指南,entry/src/main/cpp/CMakeLists.txt 里需要把 ./generated/*.cpp 加入编译目标;并在 PackageProvider.cpp 里注册 RNOHGeneratedPackage(否则即便过了编译,后续也可能运行期找不到 TurboModule 绑定)。

(如果你工程是官方模板,有可能已经加了;但你现在这种“找不到 generated 头文件”的情况,通常这块也没完整走通。)

4)清理并重建

  • RN 侧:删掉旧产物后再跑 npm run codegen
  • Harmony 侧:DevEco 里 Clean/Rebuild 或删除 build 后重新构建

你现在的报错为什么会出现

@react-native-ohos/react-native-zip-archive 的 native 代码默认假设:你已经跑过一次 codegen,并且 RNOH 模块下存在 generated/turbo_modules/RNZipArchive.h。没生成就必然 file not found

Sources:

该库依赖的原生模块未适配HarmonyOS NEXT的API。鸿蒙Next移除AOSP兼容层,RN桥接需基于ArkTS/仓颉重新实现。检查是否为纯血鸿蒙专用版本,若否,则无法在Next系统上运行。

这是由codegen未正确生成Turbo模块头文件导致的。请按以下步骤排查:

  1. 确保在RN工程根目录执行npx react-native codegen-harmony或文档指定的codegen命令,观察是否有错误输出。
  2. 确认生成目录**RNOH/generated/turbo_modules/**下是否出现了RNZipArchive.h。若不存在,可能是库的规格文件(spec)路径或名称未正确配置,检查package.jsoncodegenConfig字段是否正确指向了该库的srcspec目录。
  3. 若文件已生成,检查Harmony工程侧oh-package.json5或CMakeLists是否已正确引用该生成的路径,确保头文件搜索路径包含RNOH/generated
  4. 尝试清理RN工程缓存后重新生成:删除node_modules及RN侧build目录,重新npm install后再次执行codegen。
  5. 确认使用的@react-native-oh/react-native-harmony版本与库兼容,必要时参考库文档的版本映射表。
回到顶部