HarmonyOS 鸿蒙Next napi 通过napi_load_module_with_info加载har中的类实现

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next napi 通过napi_load_module_with_info加载har中的类实现


在一个har库中,有c的代码,也有arkts的代码,c中想要通过napi_load_module_with_info引入arkts中指定的文件,如何实现?目前根据API,加载模块内文件,提示找不到对应的hsp,加载HAR模块名又提示不能自己引用自己。

实现遇到问题,希望能得到如何解决的支持

另,一个arkts中有多个export,通过napi_load_module_with_info方法,拿到的是哪个?

2 回复
参考如下代码:

Index.ets文件中将这个SDKManager类导出:

export {SDKManager} from './src/main/ets/components/SdkManager'
static napi_value loadSDKModule(napi_env env, napi_callback_info info) {
  napi_value result;
  //     napi_status status = napi_load_module_with_info(env, "sdk/src/main/ets/components/SdkManager", "com.example.load_har/entry", &result);
  napi_status status = napi_load_module_with_info(env, "sdk", "com.example.load_har/entry", &result);

NAPIInfoLog(“OHOS_USDK loadSDKModule status = %{public}d”, status);

napi_value SDKManager; // 2. 使用napi_get_named_property获取SDKManager类 napi_get_named_property(env, result, “SDKManager”, &SDKManager);

napi_value startSDK; napi_status status1 = napi_get_named_property(env, SDKManager, “startSDK”, &startSDK);

NAPIInfoLog(“OHOS_USDK loadSDKModule status1 = %{public}d”, status1);

// 3. 使用napi_call_function调用函数startSDK napi_call_function(env, result, startSDK, 0, nullptr, nullptr);

return nullptr; }

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/use-napi-load-module-with-info-V13#napi_load_module_with_info%E6%94%AF%E6%8C%81%E7%9A%84%E5%9C%BA%E6%99%AF

在HarmonyOS鸿蒙系统中,通过NAPI(Native API)的napi_load_module_with_info函数加载HAR(HarmonyOS Archive)文件中的类实现,涉及到动态模块加载和NAPI模块的使用。以下是简要步骤和注意事项:

  1. 准备HAR文件:确保HAR文件包含你需要加载的类,并且已正确打包。HAR文件是鸿蒙系统中的一种包格式,用于分发和部署应用程序或库。

  2. 调用napi_load_module_with_info:该函数用于加载动态模块,你需要提供模块路径、模块名称以及模块信息结构体。确保路径正确,且模块信息结构体(如napi_module_info)正确填写,包括模块版本、API版本等信息。

  3. 获取模块句柄:加载成功后,napi_load_module_with_info返回模块句柄,通过该句柄可以访问模块中的导出函数和类。

  4. 使用加载的类:根据NAPI的导出机制,使用句柄调用模块中的类或函数。

  5. 错误处理:加载过程中,注意检查返回值,处理可能的错误,如路径错误、模块不匹配等。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部