成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenHarmony 源碼解析之JavaScriptAPI-NAPI 實(shí)踐

開(kāi)發(fā) 前端
本文以最簡(jiǎn)單的NAPI接口函數(shù)為例,詳細(xì)說(shuō)明在OpenHarmony系統(tǒng)如何編寫(xiě)模塊文件、本地調(diào)試、系統(tǒng)集成、上機(jī)測(cè)試。

[[439364]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

1、簡(jiǎn)介

開(kāi)源鴻蒙(OpenHarmony)的APP開(kāi)發(fā)框架是ACE,開(kāi)發(fā)語(yǔ)言是JS/eTS。有時(shí)候需要增加一些額外功能,依賴(lài)現(xiàn)有的C/C++ 開(kāi)源庫(kù),或者遇到一些CPU密集計(jì)算的場(chǎng)合,就需要使用C/C++ 語(yǔ)言來(lái)編寫(xiě)更底層的函數(shù),供上層JS調(diào)用。

OpenHarmony提供了統(tǒng)一的NAPI接口函數(shù),通過(guò)編譯系統(tǒng)的裁剪,方便增加新的JS功能模塊。

本文以最簡(jiǎn)單的NAPI接口函數(shù)為例,詳細(xì)說(shuō)明在OpenHarmony系統(tǒng)如何編寫(xiě)模塊文件、本地調(diào)試、系統(tǒng)集成、上機(jī)測(cè)試。

1.1 UI架構(gòu)相關(guān)系列

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

1.2 OpenHarmony架構(gòu)圖

#星光計(jì)劃2.0# OpenHarmony 源碼解析之JavaScriptAPI-NAPI實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

1.3 JS UI架構(gòu)

JS UI框架包括應(yīng)用層(Application)、前端框架層(Framework)、引擎層(Engine)和平臺(tái)適配層(Porting Layer),其架構(gòu)如下圖所示:

#星光計(jì)劃2.0# OpenHarmony 源碼解析之JavaScriptAPI-NAPI實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

2、快速實(shí)現(xiàn)

建立模塊目錄,編寫(xiě)基礎(chǔ)編譯文件

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

此時(shí),OHOS_SRC目錄下應(yīng)該有 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.      # 指定編譯依賴(lài),如果依賴(lài)第三方庫(kù),需要在此添加 
  8.      deps = [ "//foundation/ace/napi:ace_napi" ] 
  9.      # 指定庫(kù)生成的路徑 
  10.      relative_install_dir = "module" 
  11.      # 子系統(tǒng)及其組件,后面會(huì)引用 
  12.      subsystem_name = "myapp" 
  13.      part_name = "myapp_part" 
  14.    }    

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

這幾處的myapp都是統(tǒng)一名稱(chēng):

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

//myapp指的是myapp目錄,:myapp指的是上面BUILD.gn中的目標(biāo)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) 

這里只簡(jiǎn)單寫(xiě)了一個(gè)JS模塊,只有一個(gè)hello函數(shù),返回"Hello, world!"字符串。

3、本地測(cè)試

利用 node-gyp進(jìn)行本地測(cè)試,先確保系統(tǒng)安裝了node.js。

  1. node --version 

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

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

binding.gyp:

按自己系統(tǒng)的實(shí)際情況,填寫(xiě)編譯器、源代碼(sources)、頭文件目錄(include_dirs)、依賴(lài)庫(kù)(dependencies)、編譯參數(shù)(cflags、cflags_cc)、鏈接參數(shù)(link_settings: libraries)。

這里的目標(biāo)名稱(chēng)(target_name)就是下一步test.js引用測(cè)試的名稱(chēng)。

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

接下來(lái),確保系統(tǒng)安裝了node-gyp

  1. node-gyp --version 

如果系統(tǒng)沒(méi)有安裝,那么在測(cè)試目錄下臨時(shí)安裝也是可以的。

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

運(yùn)行如下命令,確保app.cpp文件無(wú)語(yǔ)法錯(cuò)誤,可以正確通過(guò)編譯鏈接。

  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()) 

 如果編譯正常,那么就可以進(jìn)行本地測(cè)試了:

  1. node test.js 

4、集成

集成到系統(tǒng),在本地測(cè)試通過(guò)后,各種功能看起來(lái)正常,那么就可以集成到OpenHarmony系統(tǒng),燒錄上機(jī)測(cè)試了。

集成到OpenHarmony的步驟參考鴻蒙子系統(tǒng)的集成步驟:標(biāo)準(zhǔn)系統(tǒng)編譯構(gòu)建指導(dǎo)

這里簡(jiǎn)單描述一下:

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

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

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

  1. OHOS_SRC/productdefine/common/products/產(chǎn)品名稱(chēng).json 
  1. “myapp:myapp_part”:{} 

即可開(kāi)始編譯。

  1. ./build.sh --product-name 產(chǎn)品名稱(chēng) 

編譯完成后,可以在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、上機(jī)測(cè)試及小技巧

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

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

編寫(xiě)測(cè)試HAP:

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

假設(shè)測(cè)試APP的包是com.example.testmyapp,可以使用hdc工具很方便進(jìn)行的安裝、啟動(dòng)、關(guān)閉APP等操作。

安裝:

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

卸載:

  1. hdc uninstall com.example.testmyapp 

列出已經(jīng)安裝的包:

  1. hdc shell bm dump -a 

啟動(dòng):

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

關(guān)閉:

  1. hdc shell killall com.example.testmyapp 

hdc工具查看日志,可以根據(jù)進(jìn)程號(hào)只看測(cè)試進(jìn)程的,這樣就更清晰方便了。:

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

6、小結(jié)

OpenHarmony系統(tǒng)的ACE框架已經(jīng)具備了基礎(chǔ)的APP功能,可以很方便的利用NAPI擴(kuò)展來(lái)增強(qiáng)APP,補(bǔ)充JS的不足之處。

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2021-12-06 06:19:03

鴻蒙HarmonyOS應(yīng)用

2021-09-16 15:08:08

鴻蒙HarmonyOS應(yīng)用

2022-07-19 20:04:31

NAPI模塊鴻蒙

2022-02-14 14:47:11

SystemUIOpenHarmon鴻蒙

2022-05-17 10:42:36

reboot源碼解析

2022-10-11 15:04:28

NAPI開(kāi)發(fā)鴻蒙

2024-01-03 15:41:49

2022-06-13 14:18:39

電源管理子系統(tǒng)耗電量服務(wù)

2022-05-20 10:32:49

事件循環(huán)器事件隊(duì)列鴻蒙

2021-11-25 09:54:54

鴻蒙HarmonyOS應(yīng)用

2022-01-06 16:17:58

鴻蒙HarmonyOS應(yīng)用

2021-11-08 15:04:47

鴻蒙HarmonyOS應(yīng)用

2022-02-17 20:57:07

OpenHarmon操作系統(tǒng)鴻蒙

2021-12-17 16:42:09

鴻蒙HarmonyOS應(yīng)用

2022-07-05 16:03:29

電源管理子系統(tǒng)鴻蒙

2021-09-18 14:40:37

鴻蒙HarmonyOS應(yīng)用

2022-01-20 14:33:29

openharmonwayland協(xié)議鴻蒙

2023-04-12 15:31:11

系統(tǒng)服務(wù)管理鴻蒙

2021-08-30 18:09:57

鴻蒙HarmonyOS應(yīng)用

2022-01-10 15:30:11

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产伦精品一区二区三区四区视频 | 国产精品久久久久无码av | 精品视频一区二区 | 亚洲视频自拍 | 一区欧美| 国产av毛片 | 精品国产精品国产偷麻豆 | 国产欧美精品区一区二区三区 | 盗摄精品av一区二区三区 | 国产成人久久av免费高清密臂 | 国产综合精品一区二区三区 | 日韩一级黄色毛片 | 91亚洲精品在线观看 | 久久久久免费精品国产 | 999视频在线播放 | 日韩av美女电影 | 久久鲁视频 | 欧美激情在线播放 | 日韩欧美中文 | 在线日韩欧美 | 国产精品影视在线观看 | 欧美一二三四成人免费视频 | 在线免费观看黄色av | 在线国产视频 | 国产在线视频一区二区 | av高清毛片 | 亚洲狠狠爱 | 中文字幕日韩欧美一区二区三区 | 久久综合一区 | 成人午夜视频在线观看 | 亚洲日本乱码在线观看 | 精品视频一区二区三区在线观看 | 亚洲欧美日韩国产综合 | 亚洲成人三级 | 久久久久九九九九 | 精品国产18久久久久久二百 | 日韩第一夜 | 久久机热 | 国产目拍亚洲精品99久久精品 | 成人福利网站 | 一本一道久久a久久精品蜜桃 |