HarmonyOS Native与ArkTs交互 ?

1,需要通过CMake导入C源码打包动态库,因为api交互接口太多我想分模块定义交互接口(但是以下文件只能有一个,cpp/types/libentry/index.d.ts)。
2,试图分模块创建多个CMakeLists以及多个types下的动态库的arkTs交互接口目录文件,用于打包多个动态库,但是用的时候是无法调用除了entry.so中Native函数的。
3,DevEco Studio Next Native项目CmakeLists中使用message无法日志输出。

阅读 757
1 个回答

官方文档中有说明禁止缓存napi_env,禁止在不同Worker中传递napi_env。您用logContext.env = env;把env缓存到了全局变量中,并在子线程中使用:
napi_create_string_utf8(baseLogContext.env, log->file.c_str(), log->file.size(), &callArg[1]);
napi_create_string_utf8(baseLogContext.env, log->func.c_str(), log->func.size(), &callArg[3]);
napi_create_string_utf8(baseLogContext.env, log->data.c_str(), log->data.size(), &callArg[4]);
其实在创建的安全函数可以拿到系统传递的env,使用callJsLog(napi_env env, napi_value jsCb, [[maybe_unused]] void context, void data)中的env,上面的函数可以写成:
napi_create_int32(env, log->logLevel, &callArg[0]);
napi_create_int32(env, log->line, &callArg[2]);
napi_create_string_utf8(env, log->file.c_str(), log->file.size(), &callArg[1]);
napi_create_string_utf8(env, log->func.c_str(), log->func.size(), &callArg[3]);
napi_create_string_utf8(env, log->data.c_str(), log->data.size(), &callArg[4]);
napi_call_function(env, nullptr, jsCb, 5, callArg, nullptr);
此外,在func中的napi_get_reference_value(logContext.env, logContext.callbackRef, &jsCallback);也有使用缓存env的问题,但是这个jsCallback对象并没有在后续使用,这边就暂时注释掉了。更改过后就没有出现1229112862: %{public}s的log了。参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题