文章目录
- Native适配开发
- 三方库的基本使用
🏡作者主页:点击!
🤖HarmonyOS专栏:点击!
⏰️创作时间:2024年12月09日11点12分
Native适配开发
Node-API
HarmonyOS Node-API 是 HarmonyOS 提供的ArkTS JS C C++ 跨语言调用的接口,在Node.js提供的Node-API基础上扩展而来的,但与其并不完全兼容
- ArkTS Native Module 是提供给开发者使用 Node-API开发的模块,主要用于实现 Native 侧业务逻辑
- ModuleManager:管理对象模块,ArkTS调用C++时,会加载Native侧到ModuleManager,转换为ArkTS对象返回上层
- ScopeManager:用于管理 napi_value 生命周期,napi_value 是Node-API独特的数据类型,类似于ArkTS 中的 number、string等各种数据类型的统一表现形式,在 Native 代码开发中不需要感知不同的数据类型,统一都是 napi_value
- ReferenceManager:用于管理引用,开发时遇到的跨进程场景,这时就需要创建引用 napi_ref,否则就会被垃圾回收掉。napi_ref用于指向napi_value,允许用户管理 napi_value 的生命周期
- Native Engine作用主要统一ArkTS引擎在 Node-API 接口行为
Node-API关键交互流程
- 模块初始化
- ArkTS侧在import一个so库的时候,先找到ArkTS引擎,之后会加载模块到 ModuleManager,对应就是dlopen函数注意:知识首次调用时加载,多次import会去缓存找
- 之后ModuleManager把模块信息返回ArkTS引擎。
- ArkTS拿到模块信息后,在native层触发模块注册,初始化模块,之后调用C++的方法
- 函数调用
- ArkTS通过上述import返回对象调用方法,ArkTS引擎会找到并调用对应的C/C++方法
Node-API数据类型
- napi_status:枚举数据类型
- napi_value:独特的数据类型,类似于ArkTS中的number、String类型
- napi_env:表示Node-API执行时上下文,传递函数中Node-API接口。退出Native侧时,napi_env将失效
- napi_callback_info:native侧函数的入参,保存ArkTS侧参数信息,传递给napi_get_cb_info()函数获取ArkTS侧入参信息
Node-API接口
- napi_get_cb_info:给定的napi_callback_info 中获取有关调用的详细信息
- napi_get_value_double:获取给定ArkTS的number类型值
- napi_create_string_utf8:通过UTF8编码的C字符串数据创建ArkTS侧string类型的数据
Node-API典型场景开发
使用Node-API进行同步任务开发
- 应用侧在调用Native接口后,将会被阻塞等待Native侧计算结果
使用Node-API进行异步任务开发
- 应用侧在调用Native接口后,会收到临时结果,并继续执行UI操作,Native侧将异步执行业务逻辑,不阻塞应用侧
使用Node-API进行线程安全开发
- ArkTS天然线程安全,而Native侧代码需要开发者自行保障线程安全,Native侧C++子线程不可跨线程直接访问 ArkTS 对象
- Node-API提供了可保障线程异步执行与通信安全的机制——线程安全函数
三方库的基本使用
ohpm下载
ohpm安装完成之后在安装的根目录下面 oh-package.json5文件中可找到 @ohos/lottie的配置信息,在oh_modules下的 @ohos 目录找到包的存放位置
- 构建渲染上下文:renderingContext为构建的上下文
- 准备JSON文件文件中描述了动画具体路径
- 关联画布,创建Canvas,绑定renderingContext,并且需要给画布设置一个初始图片背景
- 加载动画,传入之前定义的 Canvas、上下文、JSON文件