NAPI篇【1】——如何创建含NAPI的OpenHarmony工程

news2024/11/17 19:36:34

        笔者从事OpenHarmony的北向应用开发,关于NAPI的应用这里做一个笔记总结,包含NAPI的OpenHarmony工程的创建、cpp文件详解、如何编写NAPI函数等,都是基于笔者的开发经验和网上参考资料汇集而成,笔者也处于学习阶段,如有错误,欢迎指正。

一、NAPI的介绍

     1、简介

  NAPI,全称 Native API,是OpenHarmony系统中的一套原生模块拓展开发框架。基于Nodejs中的N-API开发,为开发者提供了JS与C/C++不同语言模块之间的相互访问,交互的能力,方便开发者使用C或者C++语言实现应用的关键功能。在应用中使用Native API会编译成动态库打包到应用中。

        个人理解:允许开发者用C/C++去编写一些功能函数,然后通过NAPI使得可以调用这些函数去完成特定的功能,如操作开发板中某个GPIO节点的状态(OpenHarmony并没有提供直接操作GPIO口状态的API),实现JS与C/C++不同语言模块之间的相互访问,交互的能力。

        2、目的优势:

(1)、OpenHarmony系统系统可以将框架层丰富的模块功能通过js接口开放给上层应用使用。

(2)、应用开发者也可以选择将一些对性能、底层系统调用有要求的核心功能用C/C++封装实现,再通过js接口使用,提高应用本身的执行效率。

二、创建含NAPI的Openharmony工程

        在进行OpenHarmony应用开发时,若要调用自己编写的NAPI函数,则必须建立一个支持NAPI的OpenHarmony工程。

        在DevEco Studio 3.0 Release版本中,OpenHarmony工程创建有自带了一个Native C++ hello的模板,我们只需新建该模板的一个工程即可,如下图所示。

         然而在DevEco Studio 4.0 Release版本,并没有提供OpenHarmony工程的Native C++ hello的模板;Native C++ 的模板创建的是Harmony工程的模板,如下图。

       下面演示如何创建一个支持NAPI的OpenHarmony工程,演示环境:

        电脑:Windows11

        Deveco Studio 版本:4.0.0.600

        1、首先使用Native C++ 的模板创建一个Harmony的NAPI工程。

        (1) Harmony的NAPI工程的目录如下

        2、创建一个OpenHarmony工程,并使之支持NAPI,分三步

        (1)按正常流程,创建一个OpenHarmony工程。创建好,目录如下

      (2)将Harmony的NAPI工程的../main目录下的cpp文件夹整个复制,粘贴到OpenHarmony工程的../main目录下。(为OpenHarmony工程添加支持NAPI所需要的包含c/c++源码、接口导出文件以及编译文件的文件夹)

        (3)将Harmony的NAPI工程目录...\entry\build-profile.json5文件中"buildOption"配置项的部分代码复制,然后粘贴到OpenHarmony工程目录...\entry\build-profile.json5文件中"buildOption"配置项的内容中去,如下图如所示。(为OpenHarmony工程添加支持NAPI的配置声明,使整个工程在编译时能够执行相应NAPI的编译链接的脚本文件CMakeLists.txt)

        (4)将Harmony的NAPI工程目录...\entry\oh-package.json5文件中"dependencies"配置项的部分代码复制,然后粘贴到OpenHarmony工程目录...\entry\oh-package.json5文件中"dependencies"配置项的内容中去,如下图如所示。(为OpenHarmony工程的引入调用NAPI函数时,添加验证依赖

        补充说明:"libentry.so": "file:./src/main/cpp/types/libentry",libentry对应cpp\types文件夹中的libentry文件夹,

        "libentry.so"对应...\cpp\types\libentry\oh-package.json5文件中的name配置项的值如下图。如果不进行这一步,调用NAPI的函数时,编译会有如下图的警告。

        至此、OpenHarmony工程支持NAPI的配置完成。

        3、验证

        只需要将Harmony的NAPI工程目录...\entry\src\main\ets\pages\Index.ets文件中内容复制,然后粘贴到OpenHarmony工程目录...\entry\src\main\ets\pages\Index.ets文件中,然后签名、编译下载到开发板验证NAPI的接口是否调用成功即可

参考资料:

1、napi系列学习基础篇——如何通过DevEco Studio开发一个NAPI工程_napi构建方法-CSDN博客

2、【坚果派-坚果】Napi入门_libnapi-CSDN博客

ps:配置NAPI的cpp文件夹详解见NAPI篇【2】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

佳裕达物流:披露风险,负债1.26亿,营收下滑,净利润下滑-5925.93%

来源:猛兽财经 作者:猛兽财经 一、佳裕达物流公司介绍 佳裕达物流成立于2009年,总部位于广东省深圳市,是中国领先的端到端供应链解决方案供应商之一。 现已发展成为立足粤港澳大湾区、面向全国、布局全球的大型AAAA级综合服务型…

基于 Native 技术加速 Spark 计算引擎

本文整理自 2024 年 6 月 DataFunSummit 2024 OLAP 架构峰会 Lakehouse 湖仓一体化架构论坛的同名主题分享。 今天分享的主题是基于 Native 技术加速 Spark 计算引擎,大家将会了解到如何基于 ClickHouse 来改造 Spark 引擎,最终获得较为可观的性能提升。…

对于todesk共享剪切板不好用的问题记录

todesk 远程复制粘贴 共享剪切版 1.对于已经开启todesk里面的共享剪切板设置的2. 如果此时仍不能远程复制粘贴,可以考虑查看快捷键映射的问题 1.对于已经开启todesk里面的共享剪切板设置的 2. 如果此时仍不能远程复制粘贴,可以考虑查看快捷键映射的问题 …

计算机网络 —— 网络字节序

网络字节序 1、网络字节序 (Network Byte Order)和本机转换 1、大端、小端字节序 “大端” 和” 小端” 表示多字节值的哪一端存储在该值的起始地址处;小端存储在起始地址处,即是小端字节序;大端存储在起始地址处,即是大端字节…

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别 目录 分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融…

昇思25天学习打卡营第1天|FCN图像语义分割》

全卷积网络(Fully Convolutional Networks,FCN)是UC Berkeley的Jonathan Long等人于2015年在Fully Convolutional Networks for Semantic Segmentation一文中提出的用于图像语义分割的一种框架。 论文地址:https://arxiv.org/pdf…

【云计算 复习】第6节 AWS亚马逊

一、基础存储架构Dynamo 1.概述 (1)为了保证其稳定性,Amazon的系统采用完全的分布式、去中心化的架构。 (2)Dynamo只支持简单的键值对方式的数据存储,不支持复杂的查询 (3)Dynamo中…

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画…

车联网全方位安全适配与领先架构

设想一下如下场景: 您钟爱的座驾,在毫无外力破坏迹象的情况下,突然被侵入,远程启动,然后绝尘而去… 别以为这只是大银幕上的虚构桥段,事实上,这一幕在现实中已经上演。 某款备受欢迎的车型&a…

【数列极限证明大题】解题方法,证明数列极限存在并求此极限,单调有界准则

文章目录 数列极限证明大题1.单调有界准则1.1 证有界性和单调性 1.2真题实战1.2 证明有界性中常用到的不等式 写在最前,持续更新中 数列极限证明大题 数列极限的证明大题的目标是,证明数列极限存在且求此极限。 核心方法是:单调有界准则&…

重磅消息:ONLYOFFICE8.1版本桌面编辑器发布:功能完善的 PDF 编辑器、幻灯片版式、改进从右至左显示、新的本地化选项等

目录 ONLYOFFICE介绍 PDF 编辑器 功能全面的 PDF 编辑器 文本编辑 页面处理 (添加、旋转、删除) 插入和调整各种对象,例如表格、形状、文本框、图像、TextArt、超链接、方程等。 此外 PDF 表单 文本文档编辑器更新内容 页面颜色 页面…

如何使用 ArcGIS Pro 和 Landsat 8 影像计算叶绿素指数和全球环境监测指数

GIS 工具和技术的出现极大地帮助了识别、量化和解决问题。GIS 还通过研究可能的情况并实施预防方案提供了一种主动的解决方案。多年来,GIS 通过电信和网络服务、事故/事件分析、城市规划、交通规划、环境影响评估、洪水损失估计、自然资源管理、环境健康和安全、植被…

JVS开源底座与核心引擎的全方位探索,助力IT智能、高效、便捷的进化

引言 JVS产品的诞生背景 JVS是软开企服构建的一站式数字化的解决方案,产生的背景主要来源于如下几个方面: 企业数字化需求的增长:企业对IT建设的依赖程度越来越高,数字化、指标化的经营已经是很多企业的生存的基础和前提&#…

Java项目:垃圾分类信息网站(java+springboot+vue+mysql)

列表 */ IgnoreAuth RequestMapping(“/list”) public R list(RequestParam Map<String, Object> params,ConfigEntity config){ EntityWrapper ew new EntityWrapper(); PageUtils page configService.queryPage(params); return R.ok().put(“data”, page);…

虚幻引擎 Gerstner Waves -GPU Gems 从物理模型中实现有效的水体模拟

这篇文章重点在于结合GPU Gems一书中有关Gerstner Waves 的数学公式&#xff0c;在虚幻引擎中复现正确的Gerstner Waves和正确的法线 文中内容整理自书中&#xff0c;并附带我的理解&#xff0c;与在虚幻引擎中的实现&#xff0c;可以参考原文看这篇文章&#xff0c;原文网上很…

大模型时代,普通人的科研何去何从

前言 随着大模型技术的飞速发展和普及&#xff0c;我们已经步入了一个全新的科研时代。在这个时代&#xff0c;大数据、深度学习和人工智能等前沿技术成为了推动科研创新的重要引擎。 那么&#xff0c;面对如此迅猛的发展势头&#xff0c;普通人科研该何去何从呢&#xff1f;…

【离散数学】图的随机生成和欧拉(回)路的确定(c语言实现)

实验要求 变量定义 因为如果我们使用局部变量&#xff0c;每一个函数都会使用这些变量&#xff0c;会让函数的参数越变越多。所以我们定义全局变量&#xff0c;这样就不用在参数中调用了。 #define MAX 100 int arrMap[MAX][MAX] { 0 };//图的矩阵 int degree[MAX] { 0 };…

vue2+webpack 和 vite+vue3 配置获取环境变量(补充)

相关涉及知识点可看小编该文章&#xff1a; nginx: 部署前端项目的详细步骤&#xff08;vue项目build打包nginx部署&#xff09;_前端工程打包部署到nginx-CSDN博客 1.vue2webpack 我们通常会在项目中看到这么两个文件(没有则自己创建&#xff0c;文件名&#xff1a;.env.***) …

热腾腾的,仓颉cangjie和C#的初战

花了一个下午快速浏览了一下仓颉&#xff08;Cangjie&#xff09;的文档。总体感觉&#xff0c;仓颉把现代编程语言的各种特征都融合在一起&#xff0c;称它为“缝合怪”一点都不夸张。没有历史包袱的确让它看起来很爽。由于目前还无法实际试用它&#xff0c;所以编译和运行性能…