HarmonyOS 鸿蒙Next使用AKI轻松实现跨语言调用案例

HarmonyOS 鸿蒙Next使用AKI轻松实现跨语言调用案例 HarmonyOS Next应用开发案例(持续更新中……)

本案例完整代码,请访问:代码仓库

介绍

针对JS与C/C++跨语言访问场景,NAPI使用比较繁琐。而AKI提供了极简语法糖使用方式,一行代码完成JS与C/C++的无障碍跨语言互调,使用方便。本示例将介绍使用AKI编写C++跨线程调用JS函数场景。通过调用C++全局函数,创建子线程来调用JS函数,实现对变量value的加10操作,为开发者使用AKI提供参考。

效果图预览

效果图

使用说明

  1. 点击页面“AKI跨线程调用JS函数”按钮,每次点击,显示数值加10。

实现思路

以下是使用AKI和NPAI的libuv实现跨线程调用JS函数的实现对比:

  1. 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

  2. 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

  3. 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实现的代码量要少很多,使用也更加方便。

高性能知识点

  1. AKI使用方便,但相比于NPAI,对性能的损耗相对会多一些。对性能要求不高,且更需要易用性开发的场景,推荐使用AKI。

工程结构&模块类型

akiusepractice                                 // har类型
|--src
|   |--main
|   |   |--cpp
|       |--akiusepractice.cpp                     // native层-native侧业务处理
|       |--CMakeLists.txt                         // native层-AKI相关CMake配置
|   |--main
|   |   |--ets
|       |--view
|           |--AkiView.ets                            // 视图层-AKI跨线程调用JS函数页面 

模块依赖

  1. 本实例依赖AKI
  2. 本实例依赖common模块来实现公共组件FunctionDescription

参考资料

  1. AKI
  2. 公共组件FunctionDescription

更多关于HarmonyOS 鸿蒙Next使用AKI轻松实现跨语言调用案例的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于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

回到顶部