GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>系统教程 > 跟着小白一起学鸿蒙--写个NAPI子系统(七)

跟着小白一起学鸿蒙--写个NAPI子系统(七)

来源:Ghost系统之家浏览:时间:2023-04-13 16:52:14

跟着小白一起学鸿蒙--写个NAPI子系统(七)

作者:王石 2022-10-09 15:05:50系统 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. * *

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

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): void;function isScreenOn(): Promise;}export default napitest;

basic.d.ts:一些基础方法的声明。

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

执行napi_generator建立个文件夹,将上面建立的两个d.ts和napi_generator放在一起。

//准备环境mkdir napitestcd napitestvim @ohos.napitest.d.tsvim basic.d.ts//拷贝napi_generatorcp [路径]/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": ["//foundation/napitest:napitest"],"inner_kits": [{"header": {"header_base": "//foundation/napitest","header_files": ["tool_utility.h","napitest.h"]},"name": "//foundation/napitest:napitest"}]}}}

为了和bundle.json对应,将BUILD.gn改成如下:

import("//build/ohos.gni")ohos_shared_library("napitest"){sources = ["napitest_middle.cpp","napitest.cpp","tool_utility.cpp",]include_dirs = [".","//third_party/node/src","//base/hiviewdfx/hilog/interfaces/native/innerkits/include",]deps=["//foundation/arkui/napi:ace_napi","//base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog",]remove_configs = [ "//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开源基础软件社区 NAPI框架鸿蒙

推荐系统

  • 微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    语言:中文版系统大小:5.13GB系统类型:Win11

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化  1、保留 Edge浏览器。  2、隐藏“操作中心”托盘图标。  3、保留常用组件(微软商店,计算器,图片查看器等)。  5、关闭天气资讯。 

  • Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    语言:中文版系统大小:4.75GB系统类型:Win11

    Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件

  • windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化

  • 微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载

  • 微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    语言:中文版系统大小:0MB系统类型:Win11

    微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为

  • 雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    语言:中文版系统大小:4.75GB系统类型:

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统

  • 雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    语言:中文版系统大小:5.91GB系统类型:Win7

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户

  • 番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载

    番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载

    语言:中文版系统大小:3.91GB系统类型:Win7

    欢迎使用 番茄花园 Ghost Win7 x64 SP1 2022.07 极速装机版 专业装机版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上独有人性化的设计。是电脑城、个人、公司快速装机之首选!拥有此系统