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

跟著小白一起學鴻蒙--寫個NAPI子系統(七)

系統 OpenHarmony
此篇文章,我們主要是熟悉下NAPI框架,并一起寫一個支持NAPI的子系統,這樣以后當我們想在hap應用里加自己功能的時候就可以方便的添加。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

在《#跟著小白一起學鴻蒙#[六]第一個hap應用》我們熟悉了如何在開源鴻蒙開發hap應用,后期的文章我們會寫在hap應用里調用系統庫甚至是動態庫。此篇文章,我們主要是熟悉下NAPI框架,并一起寫一個支持NAPI的子系統,這樣以后當我們想在hap應用里加自己功能的時候就可以方便的添加。

NAPI框架簡介

NAPI(Native API)組件是一套對外接口基于Node.js N-API規范開發的原生模塊擴展開發框架。類似于Android的JNI,NAPI框架實現了應用層ts/ets/js語言編寫的代碼和開源鴻蒙的native代碼(c/c++)交互的能力。此框架由Node.js N-API框架擴展而來。

注意:開源鴻蒙的標準系統是采用NAPI框架的,輕量系統則是采用jerryscript框架。

#沖刺創作新星# #跟著小白一起學鴻蒙# [七] 寫個NAPI子系統-開源基礎軟件社區

詳細的內容介紹在一下鏈接內可以看到官方的說明:

參考鏈接:https://gitee.com/openharmony/arkui_napi。

NAPI的使用

graph LR
創建d.ts --> 執行napi_generator --> 建立子系統 --> 引入子系統 --> 編譯生成

創建d.ts: @ohos.napitest.d.ts, basic.d.ts。

@ohos.napitest.d.ts是NAPI的聲明文件,在DevEco Studio開發的時候會用到d.ts來檢查語法和提供代碼幫助。

import {AsyncCallback} from './basic';
/**
* Provides interfaces to napitest.
*
* @since 7
*/
declare namespace napitest {
/**
* Shuts down the system.
*
* <p>This method requires the ohos.permission.SHUTDOWN permission.
*
* @param reason Indicates the shutdown reason.
* @systemapi
* @since 7
*/
function shutdownDevice(reason: string): void;
/**
* Restarts the system.
*
* <p>This method requires the ohos.permission.REBOOT permission.
*
* @param reason Indicates the restart reason. For example, "updater" indicates entering the updater mode
* after the restart. If the parameter is not specified, the system enters the normal mode after the restart.
* @since 7
*/
function rebootDevice(reason: string): void;
/**
* Checks whether the screen of a device is on or off.
*
* @return Returns true if the screen is on; returns false otherwise.
* @since 7
*/
function isScreenOn(callback: AsyncCallback<boolean>): void;
function isScreenOn(): Promise<boolean>;
}
export default napitest;

basic.d.ts:一些基礎方法的聲明。

export interface Callback<T> {
(data: T): void;
}
export interface ErrorCallback<T extends Error = BusinessError> {
(err: T): void;
}
export interface AsyncCallback<T> {
(err: BusinessError, data: T): void;
}
export interface BusinessError extends Error {
code: number;
}

執行napi_generator建立個文件夾,將上面建立的兩個d.ts和napi_generator放在一起。

//準備環境
mkdir napitest
cd napitest
vim @ohos.napitest.d.ts
vim basic.d.ts
//拷貝napi_generator
cp [路徑]/napi_generator-linux .
chmod +x napi_generator-linux
//生成napitest代碼
./napi_generator-linux -f @ohos.napitest.d.ts -o out
//當看到success則說明燒錄成功

//檢視out目錄
├── binding.gyp //工具中間文件
├── BUILD.gn //之后需要用到的gn文件
├── napi_gen.log //工具log
├── napitest.cpp //自動生成的接口調用的實際代碼
├── napitest.h //自動生成的接口調用的實際代碼
├── napitest_middle.cpp //自動生成的napi適配代碼
├── test.sh //生成js代碼的腳本,官方沒給說明,試了下不可用
├── tool_utility.cpp //自動生成的napi適配代碼
└── tool_utility.h //自動生成的napi適配代碼

建立子系統。

在鴻蒙源碼目錄下建立foundation/napitest,將之前生成的文件拷貝到文件夾內。

foundation
├── ability
├── ai
├── arkui
├── barrierfree
├── bundlemanager
├── communication
├── deviceprofile
├── distributeddatamgr
├── distributedhardware
├── filemanagement
├── graphic
├── multimedia
├── multimodalinput
├── napitest
├── binding.gyp
├── BUILD.gn
├── bundle.json
├── napi_gen.log
├── napitest.cpp
├── napitest.h
├── napitest_middle.cpp
├── test.sh
├── tool_utility.cpp
└── tool_utility.h
├── resourceschedule

在目錄里創建bundle.json,使用一下內容。

{
"name": "@ohos/napitest",
"description": "napitest provides atomic capabilities",
"version": "3.1",
"license": "Apache License 2.0",
"publishAs": "code-segment",
"segment": {
"destPath": "foundation/napitest"
},
"dirs": {},
"scripts": {},
"component": {
//部件名稱
"name": "napitest_interface",
//子系統名稱
"subsystem": "napitest",
"features": [],
"adapted_system_type": [
"standard"
],
"rom": "10000KB",
"ram": "10000KB",
"deps": {
"components": [
"ace_napi",
"ipc_core",
"libhilog"
],
"third_party": [
"node"
]
},
"build": {
"sub_component": [
"http://foundation/napitest:napitest"
],
"inner_kits": [
{
"header": {
"header_base": "http://foundation/napitest",
"header_files": [
"tool_utility.h",
"napitest.h"
]
},
"name": "http://foundation/napitest:napitest"
}
]
}
}
}

為了和bundle.json對應,將BUILD.gn改成如下:

import("http://build/ohos.gni")
ohos_shared_library("napitest")
{
sources = [
"napitest_middle.cpp",
"napitest.cpp",
"tool_utility.cpp",
]
include_dirs = [
".",
"http://third_party/node/src",
"http://base/hiviewdfx/hilog/interfaces/native/innerkits/include",
]
deps=[
"http://foundation/arkui/napi:ace_napi",
"http://base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog",
]
remove_configs = [ "http://build/config/compiler:no_rtti" ]
cflags=[
]
cflags_cc=[
"-frtti",
]
ldflags = [
]
relative_install_dir = "module"
//部件名稱
part_name = "napitest_interface"
//子系統名稱
subsystem_name = "napitest"
}

引入子系統。

增加子系統,修改build/subsystem_config.json。

//在文件后增加
{
//前面省略的內容
...
//新增內容
"napitest": {
"path": "foundation/napitest",
"name": "napitest"
}
}

增加編譯入口(已目前的master版本為基礎,3.2后改過編譯路徑)。

//修改 vendor/hihope/[PRODUCT_NAME]/config.json 文件增加如下行
{
"subsystem": "napitest",
"components": [
{
"component": "napitest_interface",
"features": []
}
]
},

編譯生成。

./build.sh --product-name PRODUCT_NAME
//看到success則為編譯成功,可以通過find out/[PRODUCT_NAME] -name *napitest.z.so查看生成文件,比如我的文件路徑如下:
./out/rk3568/lib.unstripped/napitest/napitest_interface/libnapitest.z.so
./out/rk3568/napitest/napitest_interface/libnapitest.z.so
./out/rk3568/innerkits/ohos-arm/napitest_interface/napitest/libnapitest.z.so
./out/rk3568/packages/phone/system/lib/module/libnapitest.z.so
//最后一個路徑就是系統鏡像的路徑,所以兩種辦法
//1,直接copy到板子的/system/lib路徑;參考《#跟著小白一起學鴻蒙# [二]第一個OpenHarmony程序》
//2,燒錄鏡像;參考《#跟著小白一起學鴻蒙# [一]運行OpenHarmony》

總結

這樣我們就有了自己的subsystem和napi接口,后面的章節我們會講如何在hap應用里調用系統庫。

參考鏈接:https://gitee.com/openharmony/napi_generator/tree/master。

文章相關附件可以點擊下面的原文鏈接前往下載:

https://ost.51cto.com/resource/2308。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2022-10-31 15:35:02

Wi-Fi藍牙子系統

2022-10-17 14:29:24

鴻蒙應用開發

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-29 16:35:02

Tetris鴻蒙

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開發畫布功能

2023-04-04 09:24:11

鴻蒙HiDumper

2022-10-10 14:47:04

藍牙應用鴻蒙

2023-02-27 16:30:32

鴻蒙開源協議分析

2023-03-30 09:19:54

SELinux安全子系統

2022-08-19 19:02:20

開源鴻蒙操作系統

2023-01-03 15:09:10

鴻蒙常用工具

2022-12-06 15:39:16

鴻蒙主干代碼

2023-03-15 16:19:03

BinderIPC工具

2022-11-24 14:34:41

Hap程序鴻蒙

2022-10-20 16:40:16

JS應用控制LED鴻蒙

2023-02-24 16:02:45

WebSocket網絡通訊協議

2022-12-05 15:02:14

鴻蒙用戶鑒權

2022-11-22 15:15:46

Wi-Fi鴻蒙

2022-12-09 15:34:38

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线观看国产91 | 国产欧美日韩一区二区三区在线观看 | av在线免费网站 | 九九热免费视频在线观看 | 国产精品一区二区三区久久 | 综合国产 | 男人天堂社区 | 欧美激情亚洲 | 秋霞在线一区二区 | 一级黄色片日本 | 欧美日在线 | 免费精品 | 亚洲午夜精品 | 国产一级影片 | 在线观看你懂的网站 | 视频精品一区 | 丁香婷婷在线视频 | av一区二区三区四区 | 日本 欧美 国产 | 午夜影院在线观看 | 亚洲综合99 | 区一区二区三在线观看 | 中文字幕av网 | 在线国产一区 | 一区二区视频在线 | 一区欧美| 欧美激情精品久久久久久变态 | 免费一看一级毛片 | 天天干干 | 欧美狠狠操 | 日韩视频在线免费观看 | 中日韩毛片 | 亚洲成网站 | 成人午夜电影网 | 一区二区手机在线 | 偷拍自拍网站 | 美女黄18岁以下禁止观看 | 成人a免费 | 二区成人| 性视频一区 | 亚洲精品欧美一区二区三区 |