HarmonyOS HAR 包中的 so 如何用 Node API 加载该 HAR 包中的 ArkTS 模块

相关文档中有描述通过 Node API 加载系统及应用 ArkTS 模块的方法。但由于我们 SDK 是通过 HAR 包形式提供给客户集成到他们应用中的,通过

napi_load_module(env, "ets/GeeGuard", &result)
  • 1.

加载 HAR 包内 ArkTS 模块会报找不到模块。

ReferenceError: Cannot find module 'com.example.geeguardharmonyos/entry/ets/GeeGuard' , which is application Entry Point@1935393b`
  • 1.

通过错误信息推测是 HAR 包合入应用内后,napi 加载模块是以应用而非 HAR 包的模块结构为准的。请问这种情况下该如何加载 HAR 包中的 ArkTS 模块呢?

项目的大致结构如下树形图标识:

├── entry 
│   ├── oh_modules 
│   │   └── geeguard -> ../../geeguard 
│   └── src 
│       ├── main 
│           ├── ets 
│           │   ├── entryability 
│           │   │   └── EntryAbility.ets 
│           │   └── pages 
│           │       └── Index.ets 
│           └── module.json5 
└── geeguard 
├── oh_modules 
│   └── libgeeguard.so -> ../src/main/cpp/types/libgeeguard 
└── src 
└── main 
├── cpp 
│   ├── CMakeLists.txt 
│   └── xxx.cpp 
├── ets 
│   └── GeeGuard.ets 
└── module.json5
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

具体到该项目结构中,想在 libgeeguard.so 中调用 geeguard/src/main/ets/GeeGuard.ets。

HarmonyOS
2024-09-11 12:17:21
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
put_get

加载路径的时候需要把路径拼写。

let module:ESObjext = testNapi.loadModuleWithInfo("har/src/main/ets/Calc", "com.example.moduleinfo/entry") ; 
"buildOption": { 
  "arkOptions": { 
    "runtimeOnly": { 
      "sources": [ 
      "./src/main/ets/Calc.ets" 
      ] 
    } 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
分享
微博
QQ
微信
回复
2024-09-11 15:12:59


相关问题
HarmonyOS har引用so问题
1193浏览 • 1回复 待解决
har集成怎么配置so架构
1098浏览 • 1回复 待解决
HarmonyOS模块引入har版本问题
676浏览 • 1回复 待解决
HAR里子窗口无法加载页面
1150浏览 • 1回复 待解决
HarmonyOS 如何build har
703浏览 • 1回复 待解决
HarmonyOS har能否引用tgz
802浏览 • 1回复 待解决
获取 har 相关信息
1218浏览 • 1回复 待解决