精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

OpenHarmony 源碼解析之JavaScriptAPI-NAPI 實踐

開發 前端
本文以最簡單的NAPI接口函數為例,詳細說明在OpenHarmony系統如何編寫模塊文件、本地調試、系統集成、上機測試。

[[439364]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

1、簡介

開源鴻蒙(OpenHarmony)的APP開發框架是ACE,開發語言是JS/eTS。有時候需要增加一些額外功能,依賴現有的C/C++ 開源庫,或者遇到一些CPU密集計算的場合,就需要使用C/C++ 語言來編寫更底層的函數,供上層JS調用。

OpenHarmony提供了統一的NAPI接口函數,通過編譯系統的裁剪,方便增加新的JS功能模塊。

本文以最簡單的NAPI接口函數為例,詳細說明在OpenHarmony系統如何編寫模塊文件、本地調試、系統集成、上機測試。

1.1 UI架構相關系列

  • 《OpenHarmony 源碼解析之ACE (JavaScript運行環境初始化)》
  • 《OpenHarmony 源碼解析之JavaScript API框架(NAPI)》
  • 《OpenHarmony 源碼解析之JavaScript API框架(NAPI-C接口)》
  • 《OpenHarmony 源碼解析之JavaScript API框架(NAPI實踐)》
  • 《OpenHarmony 源碼解析之JavaScript(文件管理API)》

1.2 OpenHarmony架構圖

#星光計劃2.0# OpenHarmony 源碼解析之JavaScriptAPI-NAPI實踐-鴻蒙HarmonyOS技術社區

1.3 JS UI架構

JS UI框架包括應用層(Application)、前端框架層(Framework)、引擎層(Engine)和平臺適配層(Porting Layer),其架構如下圖所示:

#星光計劃2.0# OpenHarmony 源碼解析之JavaScriptAPI-NAPI實踐-鴻蒙HarmonyOS技術社區

2、快速實現

建立模塊目錄,編寫基礎編譯文件

模塊目錄理論上可以建立在OpenHarmony代碼庫的任何地方,為行文方便,假設OpenHarmony代碼庫的目錄為OHOS_SRC,在OHOS_SRC目錄下,建立此次測試模塊目錄:myapp。

此時,OHOS_SRC目錄下應該有 ark, foundation, device, …, myapp 等目錄,其中myapp就是剛剛建立的,在myapp目錄下,建立以下文件:

  1. |-- BUILD.gn 
  2. |-- app.cpp 
  3. |-- ohos.build 

BUILD.gn:

  1. import("//build/ohos.gni"
  2.    ohos_shared_library("myapp") { 
  3.      # 指定編譯源文件 
  4.      sources = [ 
  5.        "app.cpp"
  6.      ] 
  7.      # 指定編譯依賴,如果依賴第三方庫,需要在此添加 
  8.      deps = [ "//foundation/ace/napi:ace_napi" ] 
  9.      # 指定庫生成的路徑 
  10.      relative_install_dir = "module" 
  11.      # 子系統及其組件,后面會引用 
  12.      subsystem_name = "myapp" 
  13.      part_name = "myapp_part" 
  14.    }    

 最終會生成system/lib/module/libmyapp.z.so,并且在APP中:import myapp from '@ohos.myapp'

這幾處的myapp都是統一名稱:

  1. “module_list”: [ “//myapp:myapp” ] 

//myapp指的是myapp目錄,:myapp指的是上面BUILD.gn中的目標ohos_shared_library("myapp")

ohos.build:

  1.   "subsystem""myapp"
  2.   "parts": { 
  3.     "myapp_part": { 
  4.       "module_list": [ 
  5.         "//myapp:myapp" 
  6.       ], 
  7.       "test_list": [ ] 
  8.     } 
  9.   } 

app.cpp:

  1. #include <assert.h> 
  2.  
  3. #include "napi/native_api.h" 
  4. #include "napi/native_node_api.h" 
  5.  
  6. static napi_value Method(napi_env env, napi_callback_info info) { 
  7.   napi_status status; 
  8.   napi_value world; 
  9.   status = napi_create_string_utf8(env, "Hello, world!", 13, &world); 
  10.   assert(status == napi_ok); 
  11.   return world; 
  12.  
  13. static napi_value Init(napi_env env, napi_value exports) { 
  14.   napi_status status; 
  15.     napi_property_descriptor desc[] = { 
  16.         DECLARE_NAPI_FUNCTION("hello", Method), 
  17.     }; 
  18.   status = napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 
  19.   assert(status == napi_ok); 
  20.   return exports; 
  21.  
  22. NAPI_MODULE(myapp, Init) 

這里只簡單寫了一個JS模塊,只有一個hello函數,返回"Hello, world!"字符串。

3、本地測試

利用 node-gyp進行本地測試,先確保系統安裝了node.js。

  1. node --version 

在myapp目錄下,建立test目錄,然后編寫binding.gyp和test.js文件:

  1. |-- BUILD.gn 
  2. |-- app.cpp 
  3. |-- ohos.build 
  4. `-- test 
  5.     |-- binding.gyp 
  6.     `-- test.js 

binding.gyp:

按自己系統的實際情況,填寫編譯器、源代碼(sources)、頭文件目錄(include_dirs)、依賴庫(dependencies)、編譯參數(cflags、cflags_cc)、鏈接參數(link_settings: libraries)。

這里的目標名稱(target_name)就是下一步test.js引用測試的名稱。

  1.   'targets': [ 
  2.     { 
  3.       'cc''clang'
  4.       'c++''clang++'
  5.       'target_name''test-native'
  6.       'sources': [ '../app.cpp'], 
  7.       'include_dirs': ["/OHOS_SRC/foundation/ace/napi/interfaces/kits"], 
  8.       'dependencies': [], 
  9.       'cflags!': [ '-DTESTDEBUG''-std=gnu2x' ], 
  10.       'cflags_cc': [ '-DTESTDEBUG''-std=c++17' ], 
  11.       'link_settings': { 
  12.           'libraries': [''
  13.       }, 
  14.     } 
  15.   ] 

接下來,確保系統安裝了node-gyp

  1. node-gyp --version 

如果系統沒有安裝,那么在測試目錄下臨時安裝也是可以的。

  1. cd OHOS_SRC/myapp/test 
  2. npm install node-gyp 
  3. ./node_modules/.bin/node-gyp --version 

運行如下命令,確保app.cpp文件無語法錯誤,可以正確通過編譯鏈接。

  1. cd OHOS_SRC/myapp/test 
  2. node-gyp configure 
  3. node-gyp build 

 之后如果修改了binding.gyp文件,需要node-gyp rebuild,

test.js:

  1. var myapp = require('./build/Release/test-native'
  2. console.log(myapp) 
  3. console.log(myapp.hello) 
  4. console.log(myapp.hello()) 

 如果編譯正常,那么就可以進行本地測試了:

  1. node test.js 

4、集成

集成到系統,在本地測試通過后,各種功能看起來正常,那么就可以集成到OpenHarmony系統,燒錄上機測試了。

集成到OpenHarmony的步驟參考鴻蒙子系統的集成步驟:標準系統編譯構建指導

這里簡單描述一下:

在OHOS_SRC/build/subsystem_config.json文件中,增加(注意前后逗號,保持文件格式正確):

  1. "myapp": { 
  2.     "project""hmf/myapp"
  3.     "path""myapp"
  4.     "name""myapp"
  5.     "dir""" 

 在產品配置中添加上述子系統的功能模塊,編譯到產品產出文件中(注意前后逗號,保持文件格式正確)

  1. OHOS_SRC/productdefine/common/products/產品名稱.json 
  1. “myapp:myapp_part”:{} 

即可開始編譯。

  1. ./build.sh --product-name 產品名稱 

編譯完成后,可以在OHOS_SRC/out目錄找到生成的.so文件。

  1. root@1fe862aba551:/home/openharmony# find out -name 'libmyapp*' 
  2. out/ohos-arm-release/packages/phone/NOTICE_FILES/system/lib/module/libmyapp.z.so.txt 
  3. out/ohos-arm-release/packages/phone/system/lib/module/libmyapp.z.so 
  4. out/ohos-arm-release/lib.unstripped/myapp/myapp_part/libmyapp.z.so 
  5. out/ohos-arm-release/myapp/myapp_part/libmyapp.z.so 

 鏡像輸出在 out/ohos-arm-release/packages/phone/images/ 目錄下。

5、上機測試及小技巧

第一次編寫完成后,需要燒錄鏡像文件。之后再修改,就可以利用hdc工具,只上傳.so文件覆蓋原文件即可。

  1. hdc.exe file send libmyapp.z.so system/lib/module/libmyapp.z.so 

編寫測試HAP:

  1. import myapp from '@ohos.myapp' 
  2. export default { 
  3.   testGetAppName() { 
  4.     console.log(myapp.hello()) 
  5.   } 

假設測試APP的包是com.example.testmyapp,可以使用hdc工具很方便進行的安裝、啟動、關閉APP等操作。

安裝:

  1. hdc install -r 安裝包的本地路徑.hap 

卸載:

  1. hdc uninstall com.example.testmyapp 

列出已經安裝的包:

  1. hdc shell bm dump -a 

啟動:

  1. hdc shell aa start -b com.example.testmyapp -a com.example.testmyapp.MainAbility 

關閉:

  1. hdc shell killall com.example.testmyapp 

hdc工具查看日志,可以根據進程號只看測試進程的,這樣就更清晰方便了。:

  1. hdc.exe shell 
  2. ps -elf |grep com.example.testmyapp # 輸出的第二列是pid 
  3. hilog -P pid #這里的pid是上面第二列的數字 

6、小結

OpenHarmony系統的ACE框架已經具備了基礎的APP功能,可以很方便的利用NAPI擴展來增強APP,補充JS的不足之處。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-12-06 06:19:03

鴻蒙HarmonyOS應用

2021-09-16 15:08:08

鴻蒙HarmonyOS應用

2022-07-19 20:04:31

NAPI模塊鴻蒙

2022-02-14 14:47:11

SystemUIOpenHarmon鴻蒙

2022-05-17 10:42:36

reboot源碼解析

2022-06-13 14:18:39

電源管理子系統耗電量服務

2021-12-17 16:42:09

鴻蒙HarmonyOS應用

2021-11-08 15:04:47

鴻蒙HarmonyOS應用

2021-11-25 09:54:54

鴻蒙HarmonyOS應用

2022-01-06 16:17:58

鴻蒙HarmonyOS應用

2021-09-18 14:40:37

鴻蒙HarmonyOS應用

2022-02-17 20:57:07

OpenHarmon操作系統鴻蒙

2022-07-05 16:03:29

電源管理子系統鴻蒙

2022-05-20 10:32:49

事件循環器事件隊列鴻蒙

2022-10-11 15:04:28

NAPI開發鴻蒙

2024-01-03 15:41:49

2022-01-20 14:33:29

openharmonwayland協議鴻蒙

2021-08-30 18:09:57

鴻蒙HarmonyOS應用

2023-04-12 15:31:11

系統服務管理鴻蒙

2022-01-10 15:30:11

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

国产欧美中文字幕| 久久久国产视频| 黄色成人免费看| 欧美日韩xx| 成人激情小说网站| 51精品国产黑色丝袜高跟鞋 | 精品亚洲永久免费| 亚洲综合福利| 日韩午夜在线影院| 黄色免费观看视频网站| 欧美性videos| 97久久精品人人做人人爽| 国产精品久久久久aaaa九色| 久久久久久久久毛片| 九热爱视频精品视频| 日韩欧美三级在线| 欧美特级aaa| 国产v日韩v欧美v| 亚洲视频小说图片| 青青草原成人| 女人18毛片水真多18精品| 美国十次了思思久久精品导航| 国内揄拍国内精品| 国产精品视频一区二区三| 最新亚洲精品| 亚洲韩国欧洲国产日产av| 亚洲午夜精品一区| 秋霞国产精品| 精品国产乱码久久久久久虫虫漫画| 在线视频一区观看| 久草在线网址| 91婷婷韩国欧美一区二区| 99re国产在线播放| 国产又色又爽又黄又免费| 久热综合在线亚洲精品| 97国产一区二区精品久久呦 | 在线观看xxx| 国产精品资源网| 成人国产精品久久久| 日本视频网站在线观看| 国产情侣久久| 久久久久久久久久婷婷| 麻豆一区产品精品蜜桃的特点| 日韩综合一区| 亚洲天堂视频在线观看| 99久久人妻无码精品系列| 国内精品偷拍| 亚洲国产精品一区二区久| 特级特黄刘亦菲aaa级| 日韩视频一二区| 91精品国产麻豆国产自产在线| 亚洲娇小娇小娇小| 久久久久久久性潮| 色婷婷综合视频在线观看| www黄色av| 国产精品专区免费| 日本高清不卡视频| 亚洲精品乱码久久久久久自慰 | 亚洲va欧美va天堂v国产综合| 国产在线视频综合| 波多野结衣在线观看| 亚洲 欧美综合在线网络| 性欧美大战久久久久久久| 91禁在线看| 欧美丝袜美女中出在线| 一本色道无码道dvd在线观看| 日韩中文影院| 欧美中文字幕一二三区视频| 三上悠亚在线一区二区| 少妇高潮一区二区三区99| 欧美日韩成人在线| 成人性生交视频免费观看| 成人在线啊v| 精品国产免费一区二区三区四区 | 怡春院在线视频| 麻豆精品在线视频| 91gao视频| 日本精品一区二区在线观看| 91视频在线观看免费| 欧美日韩在线精品| 色哟哟免费在线观看| 亚洲精品日产精品乱码不卡| 青青青青草视频| 国产精欧美一区二区三区蓝颜男同| 欧美午夜免费电影| 一级日本黄色片| 女仆av观看一区| 亚洲最大在线视频| 1024手机在线视频| 国产精品一二| 91精品久久久久久综合乱菊 | 亚洲午夜国产成人av电影男同| 国产传媒在线看| 欧美欧美全黄| 国产精品wwww| 免费看av毛片| 国产精品久久久久久久久免费相片 | 欧性猛交ⅹxxx乱大交| 久久嫩草精品久久久精品| 一本色道久久99精品综合| 牛牛精品视频在线| 91久久一区二区| 中文写幕一区二区三区免费观成熟| 天堂成人娱乐在线视频免费播放网站 | 亚洲第一综合色| 一级特黄性色生活片| xxxxxhd亚洲人hd| 色爱精品视频一区| 男女视频免费看| 国产真实精品久久二三区| 国产在线一区二| 免费黄色网页在线观看| 欧美三级xxx| 男人女人拔萝卜视频| 美女精品一区最新中文字幕一区二区三区 | 欧美网站在线观看| 男人女人拔萝卜视频| 日韩视频在线观看| 国产91九色视频| 日韩一区二区三区不卡| 亚洲美女在线国产| 久草福利视频在线| 亚洲高清极品| 国模精品系列视频| www.黄色av| 日韩毛片一二三区| 青青青在线视频免费观看| 色老板在线视频一区二区| 欧美激情高清视频| 国产日韩免费视频| 国产精品久久久久aaaa| 又色又爽又高潮免费视频国产| av日韩精品| 欧美疯狂xxxx大交乱88av| 97人妻一区二区精品免费视频| 国产欧美一区二区精品久导航| 黄网站欧美内射| jazzjazz国产精品久久| 欧美精品免费看| a网站在线观看| 亚洲免费观看高清| 在线观看免费视频污| 视频在线不卡免费观看| 国产精品日韩欧美综合| 毛片在线播放网址| 色婷婷精品久久二区二区蜜臂av | 欧美精品成人在线| 亚洲xxxx天美| 一区二区三区四区在线播放| 亚洲18在线看污www麻豆| 久久一区91| 国产一区二区在线免费视频| 色三级在线观看| 欧美久久婷婷综合色| 国精产品久拍自产在线网站| 久久国产精品色| 樱花www成人免费视频| 欧美男男gaygay1069| 久久精品国产欧美亚洲人人爽| 亚洲系列第一页| 日韩久久一区二区| 91丨porny丨九色| 欧美激情一区| 国内视频一区二区| 惠美惠精品网| 中文字幕久久亚洲| 国产精品伦理一区| 一区二区激情小说| 欧美极品jizzhd欧美仙踪林| 亚洲精品黄色| 欧美久久综合性欧美| 电影一区二区| 久久中文字幕在线| 六月婷婷综合网| 欧美午夜久久久| 极品蜜桃臀肥臀-x88av| 狠狠色丁香婷婷综合| 东北少妇不带套对白| 亚洲精品国产精品粉嫩| 国产精品久久一区主播| www在线免费观看视频| 欧美精品一区二区三区在线| 成人毛片18女人毛片| 欧美经典一区二区| 免费观看黄网站| 亚洲欧美卡通另类91av| 一区二区不卡在线观看| 中文字幕日韩在线| 国产91在线播放精品91| 18视频在线观看| 日韩av一区在线| 亚洲影院一区二区三区| 亚洲一区二区三区美女| 欧美丰满美乳xxⅹ高潮www| 国产成人鲁色资源国产91色综| 久久精品免费一区二区| 99久久.com| 精品在线一区| 在线日韩三级| 欧美在线观看一区二区三区| 日本高清在线观看wwwww色| 亚洲激情视频在线播放| 91片黄在线观看喷潮| 五月婷婷另类国产| 欧美a级片免费看| 91视频在线观看免费| 超碰在线免费av| 久久综合伊人| 丁香六月激情婷婷| 91精品久久久久久久蜜月| 久久偷看各类wc女厕嘘嘘偷窃 | 欧美一区二区三区人| 亚洲av无码精品一区二区| 亚洲免费观看高清完整| 毛片视频免费播放| 91麻豆免费看片| 国产综合内射日韩久| 国产乱国产乱300精品| 久草综合在线观看| 午夜亚洲视频| 成人免费毛片在线观看| 综合天堂av久久久久久久| 欧美日韩精品不卡| 欧美日韩一本| 国产超碰91| 国产精品久久免费视频| 国产精品日本精品| 三上悠亚国产精品一区二区三区| 国内免费久久久久久久久久久| a视频在线播放| 久久久999精品| 日本美女高清在线观看免费| 亚洲视频免费一区| 四虎成人免费在线| 精品国产伦一区二区三区观看体验| 一二三四区视频| 欧美三级电影在线看| 日韩黄色片网站| 91久久精品国产91性色tv| 国产精品视频久久久久久久| 亚洲一二三专区| 国产一级特黄aaa大片| 一区二区三区四区亚洲| 欧美日韩成人免费观看| 亚洲一区av在线| 久久精品国产亚洲AV无码男同| 亚洲综合在线免费观看| 久久久久久久蜜桃| 亚洲va中文字幕| 国产成人免费观看视频| 日韩欧美黄色动漫| 无码任你躁久久久久久久| 91久久国产最好的精华液| 人妻中文字幕一区二区三区| 91成人免费电影| 中文字幕人妻互换av久久| 欧美性色黄大片| 国产美女精品视频国产| 日韩欧美国产综合| 人妻一区二区三区| 日韩精品免费在线视频| 男人的天堂在线| 自拍亚洲一区欧美另类| 五月天婷婷在线视频| 久久久精品在线观看| 18+激情视频在线| 97人洗澡人人免费公开视频碰碰碰| 阿v视频在线| 2019最新中文字幕| 欧美aaa大片视频一二区| 成人免费福利在线| 盗摄牛牛av影视一区二区| 精品免费一区二区三区蜜桃| 国产精品免费大片| 亚洲精品自在在线观看| 一本到12不卡视频在线dvd| 全黄性性激高免费视频| 日本在线不卡视频| 操人视频免费看| 久久先锋影音av| 夫妻性生活毛片| 午夜不卡av免费| 亚洲一区二区激情| 精品久久久久久综合日本欧美| 欧美另类自拍| 不用播放器成人网| 激情国产在线| 91欧美精品成人综合在线观看| 一区二区三区在线资源| 欧美日韩一区二区三区在线视频 | 亚洲一区在线观| 亚洲成av人片在线观看香蕉| 国产福利在线视频| 欧美极品少妇xxxxⅹ喷水| 日韩中文在线播放| 99国产高清| 欧美一区二区三区高清视频| 国产青草视频在线观看| 美腿丝袜一区二区三区| 国模无码视频一区| 亚洲欧美综合网| 久久久久久不卡| 精品捆绑美女sm三区| 91porn在线观看| 91av视频在线播放| 狂野欧美xxxx韩国少妇| 日韩精品资源| 一区二区久久| 91丝袜超薄交口足| 欧美激情一区三区| 成人免费看片98欧美| 日韩精品中午字幕| 在线国产91| 日韩av片永久免费网站| 国产精品一线| 特级黄色录像片| 日韩精品电影一区亚洲| 亚洲熟女一区二区| 亚洲精品少妇30p| 中文字幕+乱码+中文乱码www| 日韩精品在线视频观看| 国产一线二线在线观看| 91香蕉亚洲精品| 久久一区91| 亚洲国产高清av| 国产亚洲欧美日韩俺去了| 亚洲国产成人无码av在线| 欧美xingq一区二区| 成人免费高清| 国产在线拍揄自揄视频不卡99 | 日本a级片在线播放| 久久成人av少妇免费| 国产日韩精品中文字无码| 一本色道久久综合亚洲aⅴ蜜桃| 欧洲精品久久一区二区| 久久久久久尹人网香蕉| 9l视频自拍九色9l视频成人| japanese在线播放| 国产美女视频一区| 少妇人妻丰满做爰xxx| 欧美丰满一区二区免费视频| 自拍视频在线免费观看| 国产精品一区二区久久久| 色中色综合网| 日韩va在线观看| 亚洲精品日日夜夜| 亚洲第一天堂影院| 午夜精品久久久99热福利| 国产精品色在线网站| www.av中文字幕| 91蜜桃免费观看视频| 亚洲 欧美 日韩 在线| 中文欧美日本在线资源| 欧美天堂在线| 强开小嫩苞一区二区三区网站 | 色综合激情五月| 你懂的好爽在线观看| 国产精品扒开腿爽爽爽视频| 人人狠狠综合久久亚洲婷婷 | 成人永久aaa| 日本一区二区网站| 亚洲精品小视频| 国产一区二区三区朝在线观看| 午夜精品亚洲一区二区三区嫩草| 人人精品人人爱| h色网站在线观看| 欧美精品一区二区三区视频| 美女在线视频免费| 日本一区不卡| 精品亚洲欧美一区| 久久久国产成人| 日韩av在线电影网| 91成人抖音| 超薄肉色丝袜足j调教99| 国产成a人无v码亚洲福利| 欧美不卡视频在线观看| 亚洲欧美国产精品va在线观看| 国产资源一区| av在线观看地址| 欧美国产综合一区二区| 国产手机视频在线| 欧美亚洲激情视频| 91麻豆精品国产91久久久平台| 国产免费a级片| 在线精品视频一区二区| 在线观看中文字幕的网站| 美女主播视频一区| 国产麻豆视频一区| 午夜毛片在线观看| 久久综合伊人77777蜜臀| 日韩欧美美女在线观看| 中文字幕线观看| 狠狠躁夜夜躁人人躁婷婷91| 免费av在线播放| 精品一区二区久久久久久久网站| 蓝色福利精品导航| 99视频在线看| 北条麻妃在线一区二区| 国产伦精品一区二区三区免费优势| 国内自拍视频一区|