全部频道
有奖互动
全部
讨论
问答
问答 已解决 当使用uv_queue_work方法将任务抛到JS线程上面执行的时候,对JS线程的回调方法,一般情况下需要加上napi_handle_scope来管理回调方法创建的napi_value的生命周期。对于初学者来说,学习鸿蒙开发如何来入门比较好? 使用uv_queue_work方法,不会走Node-API框架,此时需要开发者自己合理使用napi_handle_scope来管理napi_value的生命周期。这是为什么?有没有相关的演示代码帮我分析一下呢?
2401_85698579 回答:异步任务 【规则】 当使用uv_queue_work方法将任务抛到JS线程上面执行的时候,对JS线程的回调方法,一般情况下需要加上napi_handle_scope来管理回调方法创建的napi_value的生命周期。 使用uv_queue_work方法,不会走Node-API框架,此时需要开发者自己合理使用napi_handle_scope来管理napi_value的生命周期。 说明 本 1天前
harmonyos
1 回答 61 浏览
1天前
问答 已解决 引擎实例是一个独立运行环境,JS对象创建访问等操作必须在同一个引擎实例中进行。在 HarmonyOS 中,如何理解这个概念? 每个napi_value属于特定的HandleScope,HandleScope通过napi_open_handle_scope和napi_close_handle_scope来建立和关闭,HandleScope关闭后,所属的napi_value就会自动释放。有没有相关代码可以实现这个功能呢?
2401_85698579 回答:生命周期管理 【规则】 合理使用napi_open_handle_scope和napi_close_handle_scope管理napi_value的生命周期,做到生命周期最小化,避免发生内存泄漏问题。 每个napi_value属于特定的HandleScope,HandleScope通过napi_open_handle_scope和napi_close_handle_scope来建立和关 1天前
harmonyos
1 回答 41 浏览
1天前
问答 已解决 当argv不为nullptr时,napi_get_cb_info会根据argc声明的数量将JS实际传入的参数写入argv。我在学习鸿蒙中,遇到了一个问题怎么理解呢? 如果argc小于等于实际JS传入参数的数量,该接口仅会将声明的argc数量的参数写入argv;而当argc大于实际参数数量时,该接口会在argv的尾部填充undefined。有没有相关介绍这个问题的呢?
2401_85698579 回答:Node-API开发规范 获取JS传入参数及其数量 【规则】 当传入napi_get_cb_info的argv不为nullptr时,argv的长度必须大于等于传入argc声明的大小。 当argv不为nullptr时,napi_get_cb_info会根据argc声明的数量将JS实际传入的参数写入argv。如果argc小于等于实际JS传入参数的数量,该接口仅会将声明的argc数量的参数写入 1天前
harmonyos
1 回答 38 浏览
1天前
问答 已解决 napi_value持有了ArkTS/JS对象,同时,napi_value受napi_handle_scope管理,scope中napi_value持有的JS对象不会被释放。怎么理解这个概念呢? napi_value是一个C的结构体指针,表示一个ArkTS/JS对象的引用。对于初学者来说,学习鸿蒙开发如何来入门比较好?
2401_85698579 回答:Node-API支持的数据类型和接口 napi_value napi_value是一个C的结构体指针,表示一个ArkTS/JS对象的引用。napi_value持有了ArkTS/JS对象,同时,napi_value受napi_handle_scope管理,scope中napi_value持有的JS对象不会被释放;出scope后,napi_value将失效,不再持有对应的ArkTS/JS对象。 nap 1天前
harmonyos
1 回答 43 浏览
1天前
问答 已解决 将so库和对应的Native侧接口文件加入到工程中,在工程中配置so库对应的模块动态依赖,在ArkTS侧通过import引入依赖接口调用so库。这是为什么?有没有相关的演示代码帮我分析一下呢? 需要注意该方案只能引用适配Native的so库,因此在编译生成so库时需要实现功能函数并向Napi注册其Native侧接口,提供对应的Native侧接口文件index.d.ts和配置文件oh-package.json5。在 HarmonyOS 中,如何理解这个概念?
2401_85698579 回答:在ArkTS侧引用三方so库 按照实际开发场景可分为两部分:生成适配Native的so库和在ArkTS侧引用so库。 第一部分:开发功能函数,编译生成so库并适配Native。具体操作可参考:使用命令行CMake构建NDK工程。 第二部分:在ArkTS侧通过配置模块动态依赖的方式引用so库。 通过配置模块动态依赖引用 实现原理 将so库和对应的Native侧接口文件加入到工程中,在工程中配置so库 1天前
harmonyos
1 回答 40 浏览
1天前
问答 将so库加入到工程中,在ArkTS侧将so库的沙箱路径传递至Native侧,在Native侧使用dlopen解析so库调用功能函数。有没有相关代码可以实现这个功能呢? 为保障用户隐私安全,dlopen具有命名空间隔离能力,应用可以加载的动态库受到命名空间的限制。我在学习鸿蒙中,遇到了一个问题怎么理解呢?
2401_85698579 回答:通过调用dlopen的方式引用 实现原理 将so库加入到工程中,在ArkTS侧将so库的沙箱路径传递至Native侧,在Native侧使用dlopen解析so库调用功能函数。但是需要注意,该方案只能引用C语言编译模式生成的so库,因此用于生成so库的.h头文件需要用extern "C" {}包裹。 此处需要使用so库的沙箱路径,而不是其真实路径。 为保障用户隐私安全,dlope 1天前
harmonyos
1 回答 39 浏览
1天前
问答 已解决 在实际项目中,业务功能可能由不同“团队/组织”提供,如:团队A开发功能编译生成so库,团队B引用so库进行后续开发。供,如:团队A开发功能编译生成so库,团队B引用so库进行后续开发。 so库可以将项目的不同功能模块化,提升代码的复用性和工程的可维护性。团队开发过程中引用三方so库的场景可分为几种?
2401_85698579 回答:三方动态链接库集成 在实际项目中,业务功能可能由不同“团队/组织”提供,如:团队A开发功能编译生成so库,团队B引用so库进行后续开发。so库可以将项目的不同功能模块化,提升代码的复用性和工程的可维护性。团队开发过程中引用三方so库的场景可分为两种: 在Native侧引用三方so库。在ArkTS侧引用三方so库。 下面针对这两种场景给出具体的实现方案。 在Native侧引用三方so库 按照实际开发 1天前
harmonyos
1 回答 42 浏览
1天前
问答 已解决 如果预构建so没有SONAME,链接器将会将so的绝对路径插入到依赖这个so的二进制文件的dynamic section中。怎么理解这个概念呢? 当这些二进制文件随hap包发布运行时,动态加载器(dynamic loader)可能最终无法找到这个so而导致错误。对于初学者来说,学习鸿蒙开发如何来入门比较好?
2401_85698579 回答:预构建库的SONAME问题 请确保引入的预构建动态库(so)正确设置了SONAME。 如果预构建so没有SONAME,链接器将会将so的绝对路径插入到依赖这个so的二进制文件的dynamic section中。当这些二进制文件随hap包发布运行时,动态加载器(dynamic loader)可能最终无法找到这个so而导致错误。 可以使用llvm-readelf工具查看so文件是否设置了SONAME。 1天前
harmonyos
1 回答 42 浏览
1天前
问答 已解决 在NDK工程中,可以通过CMake语法规则引入并使用预构建库。在引用预构建库时,模块libs目录中的预构建库,以及在CMakeLists.txt编译脚本中声明的预构建库都会被打包。这是为什么?有没有相关的演示代码帮我分析一下呢? 确保引入的SO动态库是通过HarmonyOS NDK 编译工具链编译生成,如何通过HarmonyOS NDK 编译工具链编译预构建库。在 HarmonyOS 中,如何理解这个概念?
2401_85698579 回答:在NDK工程中使用预构建库 在NDK工程中,可以通过CMake语法规则引入并使用预构建库。在引用预构建库时,模块libs目录中的预构建库,以及在CMakeLists.txt编译脚本中声明的预构建库都会被打包。 预构建库使用约束 1.确保引入的SO动态库是通过HarmonyOS NDK 编译工具链编译生成,如何通过HarmonyOS NDK 编译工具链编译预构建库,请参考CMake构建三方库适配流程 1天前
harmonyos
1 回答 41 浏览
1天前
问答 已解决 在工程目录的模块目录下,创建build目录,用来放置CMake构建时产生的中间文件。注意:ohos-sdk是下载下来的SDK的根目录,开发者需要自行替换成实际的下载目录。有没有相关代码可以实现这个功能呢? 用OHOS_STL=c++_static静态链接c++库方式构建工程,当OHOS_ARCH=armeabi-v7a会编译32位静态库,而当OHOS_ARCH=arm64-v8a会编译64位静态库。我在学习鸿蒙中,遇到了一个问题怎么理解呢?
2401_85698579 回答:编译构建demo工程 linux 和 mac 系统环境下 在工程目录的模块目录下,创建build目录,用来放置CMake构建时产生的中间文件。注意:ohos-sdk是下载下来的SDK的根目录,开发者需要自行替换成实际的下载目录。 采用OHOS_STL=c++_shared动态链接c++库方式构建工程,如不指定,默认采用c++_shared;OHOS_ARCH参数可根据系统架构来决定具体值,例如当O 1天前
harmonyos
1 回答 39 浏览
1天前
查看更多