鸿蒙HarmonyOS应用开发之使用NAPI接口在主线程中进行模块加载

场景介绍

Node-API中的napi_load_module接口的功能是在主线程中进行模块的加载,当模块加载出来之后,可以使用函数napi_get_property获取模块导出的变量,也可以使用napi_get_named_property获取模块导出的函数,目前支持以下场景:

  • 加载系统模块,例如@ohos.hilog
  • 加载ets目录下文件中的模块

加载系统模块使用示例

使用napi_load_module导出系统模块hilog,并调用info函数

复制代码
static napi_value loadModule(napi_env env, napi_callback_info info) {
    //1. 使用napi_load_module加载模块@ohos.hilog
    napi_value result;
    napi_status status = napi_load_module(env, "@ohos.hilog", &result);
    
    //2. 使用napi_get_named_property获取info函数
    napi_value infoFn;
    napi_get_named_property(env, result, "info", &infoFn);
    
    napi_value tag;
    std::string formatStr = "test";
    napi_create_string_utf8(env, formatStr.c_str(), formatStr.size(), &tag);
    
    napi_value outputString;
    std::string str = "Hello OpenHarmony";
    napi_create_string_utf8(env, str.c_str(), str.size(), &outputString);
    
    napi_value flag;
    napi_create_int32(env, 0, &flag);

    napi_value args[3] = {flag, tag, outputString};
    //3. 使用napi_call_function调用info函数
    napi_call_function(env, result, infoFn, 3, args, nullptr);
    return result
}

加载ArkTS文件中的模块使用示例

当加载文件中的模块时,如以下ArkTS代码:

复制代码
//./src/main/ets/Test.ets
let value = 123;
function test() {
  console.log("Hello OpenHarmony");
}
export {value, test};
  1. 需要在工程的build-profile.json5文件中进行以下配置

    {
    "buildOption" : {
    "arkOptions" : {
    "runtimeOnly" : {
    "sources": [
    "./src/main/ets/Test.ets"
    ]
    }
    }
    }
    }

  2. 使用napi_load_module加载Test文件,调用函数test以及获取变量value

    static napi_value loadModule(napi_env env, napi_callback_info info) {
    napi_value result;
    //1. 使用napi_load_module加载Test文件中的模块
    napi_status status = napi_load_module(env, "ets/Test", &result);

    复制代码
     napi_value testFn;
     //2. 使用napi_get_named_property获取test函数
     napi_get_named_property(env, result, "test", &testFn);
     //3. 使用napi_call_function调用函数test
     napi_call_function(env, result, testFn, 0, nullptr, nullptr);
    
     napi_value value;
     napi_value key;
     std::string keyStr = "value";
     napi_create_string_utf8(env, keyStr.c_str(), keyStr.size(), &key);
     //4. 使用napi_get_property获取变量value
     napi_get_property(env, result, key, &value);
     return result

    }

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ......

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ......

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ......

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题

2.性能优化方向

3.架构方向

4.鸿蒙开发系统底层方向

5.鸿蒙音视频开发方向

6.鸿蒙车载开发方向

7.鸿蒙南向开发方向

相关推荐
Elastic 中国社区官方博客15 分钟前
隐藏在可观测性数据中的安全攻击
大数据·网络·安全·elasticsearch·搜索引擎·全文检索
重庆小透明20 分钟前
Kafka 完全指南:从基础组件到核心原理(包含面试题)
java·分布式·微服务·架构·kafka
贾伟康27 分钟前
【口算王|10】HarmonyOS ArkTS 语音报题实战:协调朗读、作答和页面生命周期
生命周期·harmonyos·arkts·语音交互·texttospeech
见闻小天地34 分钟前
空调机房冷冻泵与冷却泵是什么?选型要点与赛莱默方案解析
大数据·网络
云飞云共享云桌面41 分钟前
钣金制造研发优化:不采购传统工作站,实现 SolidWorks 团队共用服务器开展三维建模
运维·服务器·网络·数据库·3d·制造
啊阿狸不会拉杆1 小时前
《计算机网络-自顶向下方法》7.2 无线链路和网络特征 读书笔记
网络·计算机网络
lightningyang1 小时前
密码技术应用实验—AES 对称加密与口令安全初体验
网络·安全·天枢一体化虚拟仿真平台·密码技术应用
xixiaoyunya1 小时前
只备份数据远远不够:服务器系统备份的完整方案与实践
服务器·网络·数据库
淡淡的香烟1 小时前
AndroidKMP之网络请求
android·网络
贾伟康2 小时前
【口算王|08】HarmonyOS ArkTS 分类训练实战:让年级与运算分类参数保持一致
harmonyos·arkts·数据建模·路由参数·分类训练