91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【開(kāi)源三方庫(kù)】Aki:一行代碼極簡(jiǎn)體驗(yàn)JS&C++跨語(yǔ)言交互

OpenAtom OpenHarmony ? 來(lái)源:未知 ? 2023-08-02 21:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們


開(kāi)源項(xiàng)目 OpenHarmony
是每個(gè)人的 OpenHarmony

郭振雄

OpenHarmony知識(shí)體系組


一、簡(jiǎn)介

OpenAtom OpenHarmony(以下簡(jiǎn)稱(chēng)“OpenHarmony”)的前端開(kāi)發(fā)語(yǔ)言是ArkTS,在TypeScript(簡(jiǎn)稱(chēng)TS)生態(tài)基礎(chǔ)上做了進(jìn)一步擴(kuò)展,繼承了TS的所有特性,是JavaScript(簡(jiǎn)稱(chēng)JS)的超集。而Node-API(簡(jiǎn)稱(chēng)NAPI)是方舟引擎用于封裝JS能力為Native插件的API,是前端JS與Native C/C++的FFI(Foreign Function Interface 跨語(yǔ)言交互接口)。
Aki——針對(duì)OpenHarmony上提供JS與C/C++跨語(yǔ)言互調(diào)的場(chǎng)景提供解決方案,提供了復(fù)雜度僅為O(1)級(jí)別的極簡(jiǎn)語(yǔ)法糖使用方式,一行代碼完成JS與C/C++的無(wú)障礙跨語(yǔ)言互調(diào),所鍵即所得。同時(shí)開(kāi)發(fā)者無(wú)需關(guān)心NAPI的線程安全問(wèn)題、Native對(duì)象GC問(wèn)題,為開(kāi)發(fā)者屏蔽NAPI內(nèi)部復(fù)雜邏輯。


OpenHarmony中NAPI的用法不在本文闡述,不然就有點(diǎn)像孔乙己“茴香豆有幾種寫(xiě)法”的感覺(jué)了。感興趣的可以參考OpenHarmony關(guān)于Native API使用指導(dǎo)。而開(kāi)發(fā)者使用NAPI過(guò)程中還會(huì)發(fā)現(xiàn):為了做跨線程任務(wù),需要做線程管理,需要關(guān)心環(huán)境上下文;為了使用結(jié)構(gòu)體對(duì)象,需要關(guān)注napi_value生命周期如何管理;巴拉巴拉等等與自己業(yè)務(wù)無(wú)關(guān)的邏輯。搞了半天,發(fā)現(xiàn)業(yè)務(wù)代碼一行沒(méi)寫(xiě),還在寫(xiě)NAPI的跨語(yǔ)言調(diào)用實(shí)現(xiàn)。擁有潔癖的開(kāi)發(fā)者還會(huì)發(fā)現(xiàn),很難做到隔離NAPI代碼與業(yè)務(wù)代碼,我們討厭毫無(wú)邊界性的編程

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



歸根結(jié)底NAPI要做的就是FFI即跨語(yǔ)言調(diào)用,而開(kāi)發(fā)者重視的是自己的業(yè)務(wù)邏輯而不是如何做跨語(yǔ)言調(diào)用:我就想把大象放進(jìn)冰箱,你非要告訴我:先打開(kāi)冰箱,然后抬起大象放進(jìn)去,再關(guān)上冰箱。開(kāi)發(fā)者想要的就是直截了當(dāng)指明這個(gè)函數(shù)是個(gè)跨語(yǔ)言調(diào)用函數(shù)。Aki提供了JSBind語(yǔ)法糖,就做了這么一件事,開(kāi)發(fā)者集成后,完全做到一行代碼:所鍵即所得,并把業(yè)務(wù)代碼與FFI代碼完美隔離,提供了友好的邊界性編程體驗(yàn)。

示例一:同步異步接口封裝
示例一期望將C++業(yè)務(wù)邏輯(GetName)注冊(cè)為JS同步接口(getSync)、異步接口(getAsync),Aki提供了極簡(jiǎn)的JSBind函數(shù)綁定語(yǔ)法糖,一行代碼綁定跨語(yǔ)言調(diào)用接口:
● C/C++ Code
#include 


// C++業(yè)務(wù)邏輯
std::string GetName(std::string key)
{
std::string result = ...... // 獲取數(shù)據(jù)的業(yè)務(wù)邏輯


return result; // 返回字符串類(lèi)型
}


// Aki JSBind語(yǔ)法糖
JSBIND_ADDON(task_runner);
JSBIND_GLOBAL() {
JSBIND_FUNCTION(GetName, "getNameSync"); // 綁定同步方法
JSBIND_PFUNCTION(GetName, "getNameAsync"); // 綁定異步方法
}

● JavaScript Code
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);
});

示例二:Native與JS對(duì)象綁定
示例二期望將C++結(jié)構(gòu)體/類(lèi)對(duì)象(Person)邏輯注冊(cè)為JS類(lèi)對(duì)象(Person),包含類(lèi)構(gòu)造函數(shù)+類(lèi)成員函數(shù)+類(lèi)靜態(tài)函數(shù)+類(lèi)屬性訪問(wèn)等特性,通知支持類(lèi)對(duì)象作為參數(shù)及返回值。Aki提供了極簡(jiǎn)的JSBind對(duì)象綁定語(yǔ)法糖,開(kāi)發(fā)者無(wú)需關(guān)注Native對(duì)象內(nèi)存與JS引擎GC垃圾回收關(guān)系,直接綁定Native對(duì)象:
● C/C++ Code
#include 


// C++邏輯
struct Person {
// 構(gòu)造函數(shù),用于JS側(cè) new 對(duì)象
Person(std::string name) : name(name) {}


// 靜態(tài)函數(shù)
static Person GetAllPerson(); // 支持類(lèi)對(duì)象作為參數(shù)


// 成員函數(shù)
int SayHello();


std::string name;
};


// Aki JSBind語(yǔ)法糖
JSBIND_ADDON(person);
JSBIND_CLASS(Person) {
JSBIND_CONSTRUCTOR<std::string>(); // 綁定構(gòu)造函數(shù)
JSBIND_METHOD(GetAllPerson); // 綁定類(lèi)靜態(tài)函數(shù)
JSBIND_METHOD(SayHello); // 綁定類(lèi)成員函數(shù)
JSBIND_PROPERTY(name); // 綁定類(lèi)成員屬性
}

● JavaScript Code
import libperson from 'libperson.so';


let person = new libperson.Person("aki"); // 調(diào)用構(gòu)造函數(shù)
console.log('person name: ' + person.name); // 訪問(wèn)類(lèi)屬性
let greeting = person.SayHello(); // 調(diào)用類(lèi)成員函數(shù)
letpersons=libperson.Person.GetAllPerson();//調(diào)用類(lèi)靜態(tài)函數(shù)

示例三:在非JS線程中回調(diào)JS接口
示例三期望在非JS線程中回調(diào)JS接口,Aki提供了線程安全的JSBind語(yǔ)法糖,開(kāi)發(fā)者無(wú)需關(guān)注JS線程安全問(wèn)題——OpenHarmony方舟引擎規(guī)定JS回調(diào)的任務(wù)必須拋到JS線程中才能執(zhí)行,否則會(huì)出現(xiàn)崩潰(即Native側(cè)只能在JS線程使用NAPI)。
● C/C++ Code
#include 


// C++邏輯
void SafetyCallback(std::function<void (std::string)> callback) {
std::thread t([callback = std::move(callback)] () {
callback("aki"); // 線程安全,直接調(diào)用
});
t.detach();
}


// Aki JSBind語(yǔ)法糖
JSBIND_ADDON(sub_thread);
JSBIND_GLOBAL() {
JSBIND_FUNCTION(SafetyCallback);
}

● JavaScript Code
import libsub_thread from 'libsub_thread.so';
// 入?yún)镴S方法回調(diào)
libsub_thread.SafetyCallback((data) => {
console.error('test result = ' + data); // test result = aki
})

示例四:Native調(diào)用綁定JS函數(shù)
示例四期望在C/C++側(cè)調(diào)用JS接口(非回調(diào))創(chuàng)建rdb關(guān)系型數(shù)據(jù)庫(kù)表。Aki提供了JS側(cè)的內(nèi)建JSBind語(yǔ)法糖,開(kāi)發(fā)者可直接綁定JS側(cè)函數(shù)供Native側(cè)調(diào)用。
● JavaScript Code
import libAddon from 'libaddon.so'


function createTable(table: string) {
rdbStore.executeSql()... // OHOS 關(guān)系型數(shù)據(jù)庫(kù)邏輯
}


libAddon.JSBind.bindFunction('createTable',createTable);//綁定JS函數(shù)

● C/C++ Code
#include 


// C++邏輯
bool DoSomethingFromNative() {
if (auto createTable = aki::GetJSFunction("createTable")) {
createTable->Invoke<void>("MYSTORE"); // 入?yún)㈩?lèi)型 string
}

示例五:類(lèi)型轉(zhuǎn)換

Aki支持豐富的類(lèi)型轉(zhuǎn)換,幾乎所有JS的數(shù)據(jù)類(lèi)型都可以通過(guò)Aki映射為同等的C/C++數(shù)據(jù)類(lèi)型,開(kāi)發(fā)者無(wú)需處理類(lèi)型轉(zhuǎn)換,如上述示例用法,框架支持自動(dòng)匹配類(lèi)型轉(zhuǎn)換,下表為當(dāng)前支持的完整類(lèi)型轉(zhuǎn)換關(guān)系:



三、集成依賴Aki

1.創(chuàng)建平臺(tái)工程
DevEco Studio 創(chuàng)建包含Native C++的工程

File > New > Create Project | Module

2.配置依賴并安裝
● ohpm三方組件依賴:@ohos/aki
指定模塊路徑下(如:項(xiàng)目根路徑/entry),輸入如下命令安裝ohpm har包依賴:
cd entry
ohpminstall@ohos/aki

CMakeLists.txt添加依賴:
...
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)制依賴
...

● 源碼依賴
用戶自定義路徑下(如:項(xiàng)目根路徑/entry/src/main/cpp),輸入如下命令下載源碼:
cd entry/src/main/cpp
gitclonehttps://gitee.com/openharmony-sig/aki.git
CMakeLists.txt添加依賴:
...
add_subdirectory(aki)
target_link_libraries(entry PUBLIC aki_jsbind) // entry 為編譯目標(biāo)
...

3.編譯工程&運(yùn)行
完成?。?!

相關(guān)鏈接

《Aki使用指導(dǎo)》

https://gitee.com/openharmony-sig/aki

《Aki example》

https://gitee.com/openharmony-sig/aki/tree/master/example/ohos

OpenHarmony三方庫(kù)中心倉(cāng)

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)題:【開(kāi)源三方庫(kù)】Aki:一行代碼極簡(jiǎn)體驗(yàn)JS&C++跨語(yǔ)言交互

文章出處:【微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2968

    瀏覽量

    45950
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3955

    瀏覽量

    21137

原文標(biāo)題:【開(kāi)源三方庫(kù)】Aki:一行代碼極簡(jiǎn)體驗(yàn)JS&C++跨語(yǔ)言交互

文章出處:【微信號(hào):gh_e4f28cfa3159,微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    宜賓市委書(shū)記存好一行蒞臨思必馳考察調(diào)研

    3月9日,宜賓市委書(shū)記存好一行蒞臨思必馳考察調(diào)研,詳細(xì)了解企業(yè)發(fā)展歷程、技術(shù)創(chuàng)新與產(chǎn)業(yè)落地情況。相關(guān)領(lǐng)導(dǎo)及部門(mén)負(fù)責(zé)人陪同調(diào)研,思必馳董事長(zhǎng)、CEO 高始興熱情接待并作詳細(xì)介紹。
    的頭像 發(fā)表于 03-11 11:46 ?308次閱讀

    釘釘正式開(kāi)源HarmonyOS圖片編輯組件

    近日,由釘釘團(tuán)隊(duì)自主研發(fā)的“HarmonyOS圖片編輯組件”正式上線OpenHarmony三方庫(kù)中心倉(cāng)并開(kāi)源。作為款填補(bǔ)鴻蒙社區(qū)圖像處理領(lǐng)域空白的重量級(jí)組件,該方案基于Harmony
    的頭像 發(fā)表于 01-05 09:58 ?518次閱讀

    開(kāi)放原子開(kāi)源基金會(huì)程曉明理事長(zhǎng)一行蒞臨拓維信息交流,共繪開(kāi)源產(chǎn)業(yè)新藍(lán)圖

    11月26日,開(kāi)放原子開(kāi)源基金會(huì)理事長(zhǎng)程曉明、秘書(shū)長(zhǎng)助理李博等一行蒞臨拓維信息總部考察交流。拓維信息創(chuàng)始人、董事長(zhǎng)李新宇,拓維信息副總裁、開(kāi)鴻智谷總裁廖秋林,拓維信息副總裁、CTO李曙光,開(kāi)鴻智谷
    的頭像 發(fā)表于 11-27 18:04 ?432次閱讀
    開(kāi)放原子<b class='flag-5'>開(kāi)源</b>基金會(huì)程曉明理事長(zhǎng)<b class='flag-5'>一行</b>蒞臨拓維信息交流,共繪<b class='flag-5'>開(kāi)源</b>產(chǎn)業(yè)新藍(lán)圖

    C語(yǔ)言特性

    1、高效性:直接操作硬件 C 語(yǔ)言代碼的執(zhí)行效率極高,這是其最為顯著的優(yōu)勢(shì)之。它能夠直接訪問(wèn)硬件資源,與底層硬件進(jìn)行緊密交互,充分發(fā)揮硬件
    發(fā)表于 11-24 07:01

    韓國(guó)交通部部長(zhǎng)一行參訪小馬智

    10月17日,韓國(guó)國(guó)土交通部部長(zhǎng)金潤(rùn)德一行抵達(dá)北京亦莊參觀小馬智,并試乘了無(wú)人駕駛Robotaxi。小馬智副總裁高天帶隊(duì)接待了代表團(tuán)一行。隨團(tuán)參訪成員包括韓國(guó)國(guó)土交通部移動(dòng)出行與汽
    的頭像 發(fā)表于 10-24 16:59 ?1470次閱讀

    知乎開(kāi)源“智能預(yù)渲染框架” 幾行代碼實(shí)現(xiàn)鴻蒙應(yīng)用頁(yè)面“秒開(kāi)”

    近日,知乎在Gitee平臺(tái)開(kāi)源了其自研的鴻蒙“智能預(yù)渲染框架”,并將該框架的Har包上架到OpenHarmony三方庫(kù)中心倉(cāng)。該框架在鴻蒙平臺(tái)首創(chuàng)“智能預(yù)渲染”技術(shù),旨在破解應(yīng)用復(fù)雜頁(yè)面加載緩慢
    的頭像 發(fā)表于 08-29 14:32 ?636次閱讀
    知乎<b class='flag-5'>開(kāi)源</b>“智能預(yù)渲染框架” 幾行<b class='flag-5'>代碼</b>實(shí)現(xiàn)鴻蒙應(yīng)用頁(yè)面“秒開(kāi)”

    貨拉拉開(kāi)源兩款三方庫(kù),為鴻蒙應(yīng)用高效開(kāi)發(fā)貢獻(xiàn)力量

    、可擴(kuò)展的通用工具,持續(xù)提升鴻蒙應(yīng)用的創(chuàng)新體驗(yàn)與開(kāi)發(fā)效率。 在這生態(tài)共建的浪潮中,貨拉拉積極貢獻(xiàn)了其在鴻蒙應(yīng)用開(kāi)發(fā)過(guò)程中的寶貴經(jīng)驗(yàn)與技術(shù)積累,開(kāi)源了兩款實(shí)用三方庫(kù)——AspectPr
    的頭像 發(fā)表于 08-26 14:02 ?563次閱讀
    貨拉拉<b class='flag-5'>開(kāi)源</b>兩款<b class='flag-5'>三方</b><b class='flag-5'>庫(kù)</b>,為鴻蒙應(yīng)用高效開(kāi)發(fā)貢獻(xiàn)力量

    基于開(kāi)源鴻蒙的語(yǔ)音識(shí)別及語(yǔ)音合成應(yīng)用開(kāi)發(fā)樣例

    本期內(nèi)容由AI Model SIG提供,介紹了在開(kāi)源鴻蒙中,利用sherpa_onnx開(kāi)源三方庫(kù)進(jìn)行ASR語(yǔ)音識(shí)別與TTS語(yǔ)音合成應(yīng)用開(kāi)發(fā)的流程。
    的頭像 發(fā)表于 08-25 14:26 ?4142次閱讀
    基于<b class='flag-5'>開(kāi)源</b>鴻蒙的語(yǔ)音識(shí)別及語(yǔ)音合成應(yīng)用開(kāi)發(fā)樣例

    飛書(shū)富文本組件庫(kù)RichTextVista開(kāi)源

    近日,飛書(shū)正式將其自研的富文本組件庫(kù) RichTextVista(簡(jiǎn)稱(chēng)“RTV”)開(kāi)源,并上線OpenHarmony 三方庫(kù)中心倉(cāng)。該組件以領(lǐng)先的性能、流暢的渲染體驗(yàn)與高度的開(kāi)放性,為
    的頭像 發(fā)表于 07-16 16:47 ?1023次閱讀

    【潤(rùn)開(kāi)鴻HH-SCDAYU800A開(kāi)發(fā)板試用體驗(yàn)】潤(rùn)開(kāi)鴻HH-SCDAYU800A開(kāi)發(fā)板(

    代碼編輯為 ArkTS、JSC/C++ 編程語(yǔ)言提供代碼智能補(bǔ)齊、
    發(fā)表于 07-07 10:40

    ArkUI-X平臺(tái)橋接Bridge說(shuō)明

    三方庫(kù)等。 說(shuō)明 平臺(tái)橋接支持ArkUI調(diào)用Android Java API和iOS Objective-C API。此外,些平臺(tái)相關(guān)功能可直接通過(guò)已有的OpenHarmony
    發(fā)表于 06-19 23:12

    三方工業(yè)互聯(lián)網(wǎng)平臺(tái)有哪些

    三方工業(yè)互聯(lián)網(wǎng)平臺(tái)有哪些
    的頭像 發(fā)表于 06-14 15:48 ?1149次閱讀

    開(kāi)源鴻蒙應(yīng)用技術(shù)組件共建計(jì)劃啟動(dòng)

    通過(guò)兼容性測(cè)評(píng),覆蓋金融、交通、教育、醫(yī)療、航天等多個(gè)行業(yè)領(lǐng)域,已成為發(fā)展速度最快的開(kāi)源操作系統(tǒng)之。截至目前,開(kāi)源鴻蒙已累計(jì)發(fā)布 8 個(gè)大版本,共建共享15個(gè)技術(shù)域的1115款開(kāi)源
    的頭像 發(fā)表于 06-05 14:33 ?1039次閱讀

    DialogHub上線OpenHarmony開(kāi)源社區(qū),高效開(kāi)發(fā)鴻蒙應(yīng)用彈窗

    三方庫(kù),只需要一兩個(gè)配置項(xiàng)就可以輕松解決上述問(wèn)題。 “DialogHub”可高效地解決以下3點(diǎn)問(wèn)題:1、上文提到的焦點(diǎn)、手勢(shì)、動(dòng)畫(huà)等交互問(wèn)題;2、彈窗需要與UI進(jìn)行解耦。3、彈窗需要具備復(fù)用能力
    發(fā)表于 04-03 17:30

    越南副總理一行到訪商湯科技

    近日,越南副總理阮志勇率代表團(tuán)一行到訪商湯。深圳商湯總經(jīng)理李廷波主介紹、商湯科技首席人力資源官?gòu)埓壕昙吧虦萍悸?lián)合創(chuàng)始人、元蘿卜智能科技有限公司總裁馬堃等陪同熱情接待考察團(tuán)一行
    的頭像 發(fā)表于 03-24 10:01 ?1065次閱讀