鸿蒙5.0开发常见问题【如何在Native侧直接使用其他模块的ArkTS方法?】

问题详情

在ArkTS侧已经定义了接口,未实现对应的NDK接口,当使用C++代码实现业务逻辑时,想直接使用已有的ArkTS接口。

解决措施

可通过napi_load_module接口实现对ArkTS文件中的接口的调用。具体步骤如下:

  1. 通过napi_load_module接口加载模块。
  2. 通过napi_get_named_property接口获取模块属性。
  3. 通过napi_call_function接口调用方法。

具体方法可参考以下加载ArkTS文件中的模块使用示例代码。

声明ArkTS侧方法:

// src/main/ets/pages/Test.ets 
let value = 123; 
function test() { 
  console.log('Hello HarmonyOS'); 
} 
export {value, test};

在模块级build-profile.json5文件中进行以下配置:

注意是在模块级的build-profile.json5文件中配置,而非工程级。同时需要确保"sources"配置项为正确的Test.ets文件路径。

"buildOption": { 
  "externalNativeOptions": { 
    "path": "./src/main/cpp/CMakeLists.txt", 
    "arguments": "", 
    "cppFlags": "", 
  }, 
  "arkOptions": { 
    "runtimeOnly": { 
      "sources": [ 
        "./src/main/ets/pages/Test.ets" 
      ] 
    } 
  }, 
},

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

#include "napi/native_api.h" 
#include <string> 
 
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/pages/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 value; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值