HarmonyOS 鸿蒙Next使用AKI轻松实现跨语言调用案例
HarmonyOS 鸿蒙Next使用AKI轻松实现跨语言调用案例 HarmonyOS Next应用开发案例(持续更新中……)
本案例完整代码,请访问:代码仓库
介绍
针对JS与C/C++跨语言访问场景,NAPI使用比较繁琐。而AKI提供了极简语法糖使用方式,一行代码完成JS与C/C++的无障碍跨语言互调,使用方便。本示例将介绍使用AKI编写C++跨线程调用JS函数场景。通过调用C++全局函数,创建子线程来调用JS函数,实现对变量value的加10操作,为开发者使用AKI提供参考。
效果图预览
使用说明
- 点击页面“AKI跨线程调用JS函数”按钮,每次点击,显示数值加10。
实现思路
以下是使用AKI和NPAI的libuv实现跨线程调用JS函数的实现对比:
-
AKI和NAPI初始化。
AKI初始化使用JSBIND_ADDON注册Native插件,使用AKI的JSBIND_GLOBAL注册FFI特性,然后在JSBIND_GLOBAL作用域下使用AKI的JSBIND_FUNCTION绑定C++全局函数AkiThreadsCallJs。源码参考akiusepractice.cpp。
NAPI的libuv初始化需要定义napi_property_descriptor结构体,准备模块加载相关信息,将Init函数与模块名等信息记录下来。源码参考hello.cpp。
-
AKI和NAPI在native侧的业务函数实现。
AKI在native侧业务函数实现是在AkiThreadsCallJs中创建子线程,子线程中使用aki::JSBind::GetJSFunction获取指定JavaScript函数akiAccumulate的句柄后,使用Invoke触发调用。源码参考akiusepractice.cpp。
NAPI的libuv在native侧业务函数实现是在native主线程中实现UvWorkTest接口。接口接收到ArkTS传入的JS回调函数后创建子线程,执行函数CallbackUvWorkTest。在CallbackUvWorkTest中创建工作任务workReq,通过uv_queue_work将工作任务添加到libuv队列中,等待被执行。源码参考hello.cpp。
-
AKI和NAPI在ArkTS侧调用JS函数。
AKI在ArkTS侧使用AKI的JSBind.bindFunction绑定JavaScript全局函数akiAccumulate。使用AKI调用C++全局函数AkiThreadsCallJs。源码参考AkiView.ets。
NAPI的libuv在ArkTS侧调用C++全局函数UvWorkTest。源码参考Index.ets)。
通过以上AKI和NAPI实现跨线程调用JS的实现步骤的对比,可以发现AKI在native侧相较于NAPI实现的代码量要少很多,使用也更加方便。
高性能知识点
- AKI使用方便,但相比于NPAI,对性能的损耗相对会多一些。对性能要求不高,且更需要易用性开发的场景,推荐使用AKI。
工程结构&模块类型
akiusepractice // har类型
|--src
| |--main
| | |--cpp
| |--akiusepractice.cpp // native层-native侧业务处理
| |--CMakeLists.txt // native层-AKI相关CMake配置
| |--main
| | |--ets
| |--view
| |--AkiView.ets // 视图层-AKI跨线程调用JS函数页面
模块依赖
- 本实例依赖AKI。
- 本实例依赖common模块来实现公共组件FunctionDescription。
参考资料
更多关于HarmonyOS 鸿蒙Next使用AKI轻松实现跨语言调用案例的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next使用AKI轻松实现跨语言调用案例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 鸿蒙Next使用AKI(Ability Kit Interface)实现跨语言调用的案例,主要展示了鸿蒙系统在应用开发中的灵活性和高效性。AKI作为鸿蒙系统提供的一套接口集合,旨在简化不同编程语言之间的调用流程,使得开发者能够在不同语言环境下无缝协作。
在鸿蒙Next版本中,AKI通过一套统一的接口规范,支持多种编程语言对系统能力的调用。这意味着,无论开发者使用的是哪种编程语言,都可以通过AKI接口访问到鸿蒙系统提供的各种服务和能力。
具体实现上,开发者需要在各自的编程语言环境中,通过AKI提供的接口规范,定义好需要调用的系统能力。然后,在运行时,鸿蒙系统会自动将调用请求转发到相应的系统服务上,并返回结果。这一过程对开发者来说是透明的,大大简化了跨语言调用的复杂性。
值得注意的是,AKI的设计充分考虑了性能和安全性。通过优化接口调用流程,AKI能够确保跨语言调用的高效执行。同时,通过严格的安全校验机制,AKI能够防止恶意调用和攻击,保障系统的稳定运行。
如果在使用AKI进行跨语言调用时遇到问题,建议检查接口定义是否正确,以及运行环境是否满足要求。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html