本文介绍在 OpenHarmony 上为 React Native 应用加载 bundle 的三种方式,并给出验证步骤与常见问题排查。
将 bundle.harmony.js(或 Hermes 字节码 hermes_bundle.hbc)与图片资源放在 entry/src/main/resources/rawfile/ 目录下;在 entry/src/main/ets/pages/Index.ets 中通过 ResourceJSBundleProvider 指定:
// Hermes 引擎字节码(推荐在 Hermes 模式下使用)
new ResourceJSBundleProvider(this.rnohCoreContext.uiAbilityContext.resourceManager, 'hermes_bundle.hbc')
// JS bundle(Hermes 与 JSVM 均可使用)
new ResourceJSBundleProvider(this.rnohCoreContext.uiAbilityContext.resourceManager, 'bundle.harmony.js')
要点与建议:
bundle.harmony.js,但性能通常不如 hermes_bundle.hbc开发期可使用 Metro 实现热刷新。详细流程参考「调试调测 · Metro 热加载」(https://gitcode.com/openharmony-sig/ohos_react_native/blob/master/docs/zh-cn/调试调测.md#metro热加载)。
在 entry/src/main/ets/pages/Index.ets 中使用:
new MetroJSBundleProvider()
要点与建议:
npm run starthdc rport tcp:8081 tcp:8081应用沙箱是一种以安全防护为目的的隔离机制,应用可见的目录范围即为“应用沙箱目录”。
向应用沙箱推送文件的常见方式:
https://gitcode.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/resource-categories-and-access.mdhttps://gitcode.com/openharmony/docs/blob/master/zh-cn/application-dev/file-management/send-file-to-app-sandbox.md推送命令示例:
hdc file send ${本地bundle路径} ${沙箱路径}
在 entry/src/main/ets/pages/Index.ets 中通过 FileJSBundleProvider 指定沙箱内 bundle:
new FileJSBundleProvider('/data/storage/el2/base/files/bundle.harmony.js')
要点与建议:
RNApp 的 appKey 与 RN 工程中 AppRegistry.registerComponent 的 appName 是否一致appKey 与 RN 工程 appName 一致.hbc 是否匹配当前引擎模式hdc rport tcp:8081 tcp:8081assets 是否一并拷贝到 rawfile学习鸿蒙版 RN,一切尽在GitCode[1]。
GitCode 鸿蒙版 RN 社区是面向React Native 鸿蒙适配开发者打造的专业技术交流平台,致力于为开发者提供从入门到精通的完整学习路径和实战支持。
参考资料
[1]
GitCode: https://gitcode.com/oh-react-native/
[2]
ohos_react_native: https://gitcode.com/openharmony-sig/ohos_react_native
[3]
react-native-oh-library: https://github.com/react-native-oh-library
[4]
Issues 讨论区: https://gitcode.com/oh-react-native/docs/issue