點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們
郭振雄
OpenHarmony知識體系組
一、簡介

二、所鍵即所得:NAPI的盡頭就是Aki

// C++業(yè)務(wù)邏輯
std::string GetName(std::string key)
{
std::string result = ...... // 獲取數(shù)據(jù)的業(yè)務(wù)邏輯
return result; // 返回字符串類型
}
// Aki JSBind語法糖
JSBIND_ADDON(task_runner);
JSBIND_GLOBAL() {
JSBIND_FUNCTION(GetName, "getNameSync"); // 綁定同步方法
JSBIND_PFUNCTION(GetName, "getNameAsync"); // 綁定異步方法
}import libtask_runner from 'libtask_runner.so';
const name = libstorage.getNameSync('name');// 調(diào)用同步方法
console.log('name is ' + name);
// 調(diào)用異步方法
libstorage.getNameAsync('name').then(date => {
console.log('name is ' + data);
}).catch(error => {
console.log('error: ' + error);
});
// C++邏輯
struct Person {
// 構(gòu)造函數(shù),用于JS側(cè) new 對象
Person(std::string name) : name(name) {}
// 靜態(tài)函數(shù)
static Person GetAllPerson(); // 支持類對象作為參數(shù)
// 成員函數(shù)
int SayHello();
std::string name;
};
// Aki JSBind語法糖
JSBIND_ADDON(person);
JSBIND_CLASS(Person) {
JSBIND_CONSTRUCTOR<std::string>(); // 綁定構(gòu)造函數(shù)
JSBIND_METHOD(GetAllPerson); // 綁定類靜態(tài)函數(shù)
JSBIND_METHOD(SayHello); // 綁定類成員函數(shù)
JSBIND_PROPERTY(name); // 綁定類成員屬性
}import libperson from 'libperson.so';
let person = new libperson.Person("aki"); // 調(diào)用構(gòu)造函數(shù)
console.log('person name: ' + person.name); // 訪問類屬性
let greeting = person.SayHello(); // 調(diào)用類成員函數(shù)
letpersons=libperson.Person.GetAllPerson();//調(diào)用類靜態(tài)函數(shù)
// C++邏輯
void SafetyCallback(std::function<void (std::string)> callback) {
std::thread t([callback = std::move(callback)] () {
callback("aki"); // 線程安全,直接調(diào)用
});
t.detach();
}
// Aki JSBind語法糖
JSBIND_ADDON(sub_thread);
JSBIND_GLOBAL() {
JSBIND_FUNCTION(SafetyCallback);
}import libsub_thread from 'libsub_thread.so';
// 入?yún)镴S方法回調(diào)
libsub_thread.SafetyCallback((data) => {
console.error('test result = ' + data); // test result = aki
})import libAddon from 'libaddon.so'
function createTable(table: string) {
rdbStore.executeSql()... // OHOS 關(guān)系型數(shù)據(jù)庫邏輯
}
libAddon.JSBind.bindFunction('createTable',createTable);//綁定JS函數(shù)
// C++邏輯
bool DoSomethingFromNative() {
if (auto createTable = aki::GetJSFunction("createTable")) {
createTable->Invoke<void>("MYSTORE"); // 入?yún)㈩愋?string
}Aki支持豐富的類型轉(zhuǎn)換,幾乎所有JS的數(shù)據(jù)類型都可以通過Aki映射為同等的C/C++數(shù)據(jù)類型,開發(fā)者無需處理類型轉(zhuǎn)換,如上述示例用法,框架支持自動(dòng)匹配類型轉(zhuǎn)換,下表為當(dāng)前支持的完整類型轉(zhuǎn)換關(guān)系:

三、集成依賴Aki
File > New > Create Project | Module
cd entry
ohpminstall@ohos/aki...
set(AKI_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules/@ohos/aki) # 設(shè)置AKI根路徑
set(CMAKE_MODULE_PATH ${AKI_ROOT_PATH})
find_package(Aki REQUIRED)
...
target_link_libraries(${YOUR_TARGET} PUBLIC Aki::libjsbind) # 鏈接二進(jìn)制依賴
...cd entry/src/main/cpp
gitclonehttps://gitee.com/openharmony-sig/aki.git...
add_subdirectory(aki)
target_link_libraries(entry PUBLIC aki_jsbind) // entry 為編譯目標(biāo)
...相關(guān)鏈接
《Aki使用指導(dǎo)》
https://gitee.com/openharmony-sig/aki
《Aki example》
https://gitee.com/openharmony-sig/aki/tree/master/example/ohos
OpenHarmony三方庫中心倉
https://ohpm.openharmony.cn/#/cn/home
DevEco Studio
https://developer.harmonyos.com/cn/develop/deveco-studio/
Native API使用指導(dǎo)
https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/napi/napi-guidelines.md/
原文標(biāo)題:【開源三方庫】Aki:一行代碼極簡體驗(yàn)JS&C++跨語言交互
文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
鴻蒙
+關(guān)注
關(guān)注
60文章
2963瀏覽量
45899 -
OpenHarmony
+關(guān)注
關(guān)注
33文章
3952瀏覽量
21102
原文標(biāo)題:【開源三方庫】Aki:一行代碼極簡體驗(yàn)JS&C++跨語言交互
文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
釘釘正式開源HarmonyOS圖片編輯組件
開放原子開源基金會程曉明理事長一行蒞臨拓維信息交流,共繪開源產(chǎn)業(yè)新藍(lán)圖
C語言特性
韓國交通部部長一行參訪小馬智行
知乎開源“智能預(yù)渲染框架” 幾行代碼實(shí)現(xiàn)鴻蒙應(yīng)用頁面“秒開”
貨拉拉開源兩款三方庫,為鴻蒙應(yīng)用高效開發(fā)貢獻(xiàn)力量
基于開源鴻蒙的語音識別及語音合成應(yīng)用開發(fā)樣例
【開源三方庫】Aki:一行代碼極簡體驗(yàn)JS&C++跨語言交互

評論