# aki **Repository Path**: lc168/aki ## Basic Information - **Project Name**: aki - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/openharmony-sig/aki - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 48 - **Created**: 2023-08-30 - **Last Updated**: 2023-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README - [AKI项目介绍](#AKI-项目介绍) - [快速接入](#快速接入) - [用户指南](#用户指南) - [用例demos](https://gitee.com/openharmony-sig/aki/blob/master/example/ohos/README.md) - [如何反馈](#如何反馈) - [如何贡献](#如何贡献) # AKI 项目介绍 **`AKI (Alpha Kernel Interacting)` 是一款边界性编程体验友好的ArkTs FFI开发框架,针对OpenHarmony Native开发提供JS与C/C++跨语言访问场景解决方案。支持极简语法糖使用方式,一行代码完成JS与C/C++的无障碍跨语言互调,所见即所得。** ## 优势 1. 极简使用,解耦FFI代码与业务代码,友好的边界性编程体验; 2. 提供完整的数据类型转换、函数绑定、对象绑定、线程安全等特性; 3. 支持JS & C/C++互调; 4. 支持与Node-API嵌套使用; 
| Native C/C++ 业务代码: | ArkTS 风格代码: |
|---|---|
#include <string>
#include <aki/jsbind.h>
// 类/结构体
struct Person {
std::string SayHello();
int age;
std::string name;
double weight;
};
// 全局函数
Person MakePerson() {
Person person = {99, "aki", 128.8};
return person;
}
// Aki JSBind语法糖
JSBIND_GLOBAL() {
JSBIND_FUNCTION(MakePerson);
}
JSBIND_CLASS(Person) {
JSBIND_CONSTRUCTOR<int>();
JSBIND_METHOD(SayHello);
JSBIND_PROPERTY(age);
JSBIND_PROPERTY(name);
JSBIND_PROPERTY(weight);
}
JSBIND_ADDON(<Name>)
|
import libaki from "lib<Name>.so" // 调用 C/C++ Person 构造函数 let man = new libaki.Person(10); // 访问类/结构体成员属性 console.log(man.age); // 类/结构体成员函数 man.SayHello(); // 调用 C/C++ 全局函数 let woman = libaki.MakePerson(); // 极简使用,支持全类型转换 console.log(woman.name); |
| 语法糖 | AKI | 说明 | |
|---|---|---|---|
| 插件注册 | C++ | JSBIND_ADDON | 注册OpenHarmony Native 插件。 使用指导 |
| 全局函数 | C++ | JSBIND_FUNCTION | 绑定 C++ 全局方法,JS 可调用。 使用指导 |
| JavaScript | JSbind.bindFunction | 绑定 JS 全局方法,C++ 可调用。 使用指导 |
|
| 类构造函数 | C++ | JSBIND_CONSTRUCTOR<> | 绑定 C++ 类构造函数,JS 可调用。构造函数可重载,需指定构造函数参数类型。 使用指导 |
| JavaScript | - | 暂不支持 | |
| 类成员函数 | C++ | JSBIND_METHOD | 绑定 C++ 类成员函数,JS 可调用。 成员函数可以为:类静态函数,类成员函数,const类成员函数。 使用指导 |
| JavaScript | - | 暂不支持 | |
| 类成员属性 | C++ | JSBIND_PROPERTY JSBIND_FIELD |
JSBIND_PROPERTY 绑定 C++类成员属性; JSBIND_FIELD 绑定 C++ 类成员属性访问器(Get/Set)。 使用指导 |
| JavaScript | - | 暂不支持 | |
| API | 调用次数 | AKI (ms) | Node-API (ms) |
| bool (*)() | 10000 | 0.0032 | 0.0031 |
| string (*)(string) | 10000 | 0.0058 | 0.0043 |
| void (*)( std::function ) | 10000 | 0.0667 | 0.0176 |
| void (*)( aki::Callback ) | 10000 | 0.0178 | |
| void (*)( aki::SafetyCallback ) | 10000 | 0.0664 |