草庐IT

Napi_generator(一)—NAPI框架生成工具介

FFH杞人 2023-03-28 原文

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

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

前言

对于南向设备开发者进行OpenHarmony 标准系统应用开发来说,在进行设备开发的过程中,难免要与北向应用层打交道,为北向应用开发提供一些硬件控制的接口,这是就需南向开发者学习OpenHarmony提供的NAPI机制,而这又需要开发者了解JS/eTS的一些知识,关注Nodejs语法、C++与JS之间的数据类型转换等上层应用转换逻辑,通过了这几天的学习也发现学习和使用NAPI确实要耗费挺大的精力。
在学习NAPI框架的过程中,偶然间在源码下napi_generator目录发现这么一款好用的工具,简直是南向开发者的福音,通过NAPI框架生成工具,使用者可输入一个接口定义的ts文件,一键生成NAPI框架代码、业务代码框架、GN脚本等文件,并使用生成的NAPI接口及功能。使用者也可以输入一个定义方法的.h头文件,反向生成ts文件。这让开发者只关注底层业务逻辑即可,专业的人做专业的事,从而可以大大提高开发效率,下面先介绍一下这款工具的安装和使用教程。

参考资料

本工具由深开鸿公司开发,这里也感谢将这么一款好用的工具开源,本篇对于工具的详细使用,也大多出自文档,可以参考napi_generator仓库:
​NAPI框架生成工具使用说明——作者:深圳开鸿数字产业发展有限公司​​对于NAPI机制,已经有许多博主介绍得很详细了,不懂的童鞋可以先了解下:
NAPI组件仓库
基于OpenHarmony Native Api框架实现控制LED灯亮灭
三方库移植之NAPI开发[1]—Hello OpenHarmony NAPI
OpenHarmony 源码解析之JavaScript API框架(NAPI)
标准设备应用开发—Native Api-开源基础软件社区-51CTO.COM

使用环境

  • OpenHarmony-3.2-Beta5
  • 九联UnionPi-Tiger开发板
  • Visual Studio Code(版本需1.62.0及以上)

工具简介及下载

NAPI框架代码生成工具,它可以根据用户指定路径下的ts(typescript)接口文件一键生成NAPI框架代码、业务代码框架、GN文件等。NAPI框架生成工具支持三种入口,分别是可执行程序、VS Code插件、IntelliJ插件,使用者可以根据自己的需要选择合适的工具,本人IntelliJ插件没尝试过,主要介绍一下可执行程序以及VS code 插件的使用,这两者也会比较常用一点。
可执行文件、IntelliJ插件、VS Code插件下载路径如下:
http://ftp.kaihong.com:5000/fsdownload/PC6uOorrM/NAPI。

下载文件说明:

|── generator.jar # IntelliJ插件
|── gnapi-0.0.1.vsix # VS Code插件
|── napi_generator-linux # Linux可执行程序
|── napi_generator-win.exe # Windows可执行程序
└── napi_generator-macos # Mac可执行程序

使用方法

一、预检查

napi_generator的可执行程序方式和插件方式都具有预检查的功能,如果.d.ts文件中存在语法错误,那么执行的时候命令行会打印出错误信息,指出代码中存在错误的行号。使用效果如下:

joey@joey-virtual-machine:~/code/napi_test$ ./napi_generator-linux -f @ohos.napitest.d.ts
@ohos.napitest.d.ts (33,12): Identifier expected.
@ohos.napitest.d.ts (33,13): ';' expected.
@ohos.napitest.d.ts (33,13): An identifier or keyword cannot immediately follow a numeric literal.
@ohos.napitest.d.ts (33,13): Cannot find name 'shutdownDevice'.
@ohos.napitest.d.ts (33,28): Cannot find name 'reason'.
@ohos.napitest.d.ts (33,34): ',' expected.
@ohos.napitest.d.ts (33,36): 'string' only refers to a type, but is being used as a value here.
@ohos.napitest.d.ts (33,43): ';' expected.
@ohos.napitest.d.ts (33,49): Expression expected.

joey@joey-virtual-machine:~/code/napi_test$

二、生成框架

通过可执行程序生成(Linux环境下)

  1. 首先准备待转换的.d.ts文件,这里选择napi_generator/examples/ts下的@ohos.napitest.d.ts文件进行测试。若.d.ts文件中声明了basic.d.ts文件,将basic.d.ts文件放置在待转换.d.ts文件上一级目录;若除此之外还声明其它.d.ts文件,将此类文件放置在待转换.d.ts文件同级目录。
    此处在example下新建out文件夹,用于存放生成框架代码。
cd napi_generator/examples/ts
mkdir ../out
  1. 运行napi_generator-linux,命令如下(~/tools/napi_generator-linux根据自己的下载位置更改):
~/tools/napi_generator-linux -f @ohos.napitest.d.ts -o ../out -i false -n int
其中,参数详情如下: -f, 待转换的.d.ts文件,若同时转换多个文件,文件之间用“,”隔开; -d, 根据指定路径转换该文件夹中所有.d.ts文件; -i, 可选参数,默认false,待转换.d.ts文件中引用非basic.d.ts的ts文件时打开开关; -o, 可选参数,默认为当前目录,指定生成框架代码输出路径; -n, 可选参数,默认为uint32_t,指定生成框架代码中number类型全部为指定类型。
备注:-f与-d两个参数只选其中一个参数即可。

  1. 运行成功后会在out目录下生成框架代码文件,如下所示:
Windows 上的方法与Linux上的类似,可以自行参考仓库教程进行尝试。

通过VS code插件生成

打开VS code,在左侧边栏中选择插件,点击右上角的三个小圆点,选择从VISI安装,注意如果代码在远程服务器的话要将插件文件下载到服务器上,选择在服务器进行安装。

选择刚才下载的gnapi-0.0.1.vsix插件文件,再单击确定进行安装。

安装完成后就会在VS Code的插件管理器中能看到gnapi这个插件了。

选择需要转换的.d.ts文件,若.d.ts文件中声明了basic.d.ts文件,将basic.d.ts文件放置在待转换.d.ts文件上一级目录;若除此之外还声明其它.d.ts文件,将此类文件放置在待转换.d.ts文件同级目录。例如napi_generator下的一个exampl,位于napi_generator/examples/ts/@ohos.napitest.d.ts下,右键文件选择Generate Napi Frame。

工具弹出Generate Napi Frame弹窗,选择Napi-Gen页签。接口文件文本框填写.d.ts文件路径;生成框架路径文本框填写生成框架存放路径(这里我在example下新建了out目录);编译脚本路径默认填写;number目的类型此处选择float,表示指定生成框架代码中number类型全部为float类型。;启用import功能不选择(待转换.d.ts文件未引用其它文件);点击ok。

执行结束后会在out目录下生成框架代码文件。

三、生成文件总结

  • napitest.cpp:生成的napitest.cpp文件中的接口即为.d.ts文件中定义的接口,开发者只需要使用C/C++实现对于的接口功能即可。
  • BUILD.gn: GN脚本,需要注意一点就是生成的BUILD.gn文件中的ace_napi路径位置可能不准确,需根据自己的OpenHarmony进行修改,以及所属子系统,组件等,根据自己需要进行配置。
  • napitest_middle,tool_utility :NAPI中间文件,包括NAPI模块定义,模块注册,接口工具都存放在里面。
  • napi_gen.log: 生成过程日志、

后记

本篇简单介绍了一下工具的安装和使用,后面一篇文章将会用实例进行演示。

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

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

有关Napi_generator(一)—NAPI框架生成工具介的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  3. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  4. ruby-on-rails - Ruby on Rails - 为文本区域和图片生成列 - 2

    我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数

  5. ruby-on-rails - Prawn PDF : I need to generate nested tables - 2

    我需要一个表,其中行实际上是2行表,一个嵌套表是..我怎样才能在Prawn中做到这一点?也许我需要延期..但哪一个? 最佳答案 现在支持子表:Prawn::Document.generate("subtable.pdf")do|pdf|subtable=pdf.make_table([["sub"],["table"]])pdf.table([[subtable,"original"]])end 关于ruby-on-rails-PrawnPDF:Ineedtogeneratenested

  6. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  7. ruby-on-rails - 如何在 Rails 3 中创建自定义脚手架生成器? - 2

    有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我

  8. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  10. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

随机推荐