三方库移植之NAPI开发(三)通过IDE开发NAPI工程

这篇具有很好参考价值的文章主要介绍了三方库移植之NAPI开发(三)通过IDE开发NAPI工程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 在三方库移植之NAPI开发[1]—Hello OpenHarmony NAPI一文中,笔者开发的是一个rom包的napi工程。该工程需要编译烧录固件,C ++的动态库会集成到开发板的ROM中。
  • 在本篇文章中,笔者使用三方库移植之NAPI开发[1]—Hello OpenHarmony NAPI中一样的hellonapi.cpp和index.ets源码,通过IDE开发一个RAM包的NAPI工程(集成C ++的动态库到开发板的RAM中),直接编译安装hap包到开发板即可。两个开发方式的hap包运行效果一致。

开发环境:

  • IDE:​​DevEco Studio 3.0 Release​​
  • 开发板:润和DAYU200开发板

创建工程

打开IDE,创建一个Native C++工程。

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

SDK选择API9,model选择Stage。

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

源码实现

  • 新建的Native C++工程有一个默认的hello world教程,接下来需要编辑的文件如下:

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

C++方法实现

将默认的hello.cpp文件重命名为hellonapi.cpp,选中右键选中重构重命名。

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

hellonapi.cpp内容如下:

#include "napi/native_api.h"
#include <string>

//接口业务实现C/C++代码
//std::string 需要引入string头文件,#include <string>
static napi_value getHelloString(napi_env env, napi_callback_info info) {
  napi_value result;
  std::string words = "Hello OpenHarmony NAPI";
  //NAPI_CALL(env, napi_create_string_utf8(env, words.c_str(), words.length(), &result));
  napi_create_string_utf8(env, words.c_str(), words.length(), &result);

  return result;
}

// napi_addon_register_func
//2.指定模块注册对外接口的处理函数,具体扩展的接口在该函数中声明

static napi_value registerFunc(napi_env env, napi_value exports)
{
    static napi_property_descriptor desc[] = {
        // 声明该napi_module对外具体的提供的API
        { "getHelloString", nullptr, getHelloString, nullptr, nullptr, nullptr, napi_default, nullptr }
    };
    //NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}

// 1.先定义napi_module,指定当前NAPI模块对应的模块名
//以及模块注册对外接口的处理函数,具体扩展的接口在该函数中声明
// nm_modname: 模块名称,对应eTS代码为import nm_modname from '@ohos.ohos_shared_library_name'
//示例对应eTS代码为:import hellonapi from '@ohos.hellonapi'
static napi_module hellonapiModule = {
    .nm_version = 1,
    .nm_flags = 0,
    .nm_filename = nullptr,
    .nm_register_func = registerFunc, // 模块对外接口注册函数
    .nm_modname = "hellonapi",  // 自定义模块名
    .nm_priv = ((void*)0),
    .reserved = { 0 },
};

//3.模块定义好后,调用NAPI提供的模块注册函数napi_module_register(napi_module* mod)函数注册到系统中。
// register module,设备启动时自动调用此constructor函数,把模块定义的模块注册到系统中
extern "C" __attribute__((constructor)) void hellonapiModuleRegister()
{
    napi_module_register(&hellonapiModule);
}

此时的native_api.h文件是在sdk\native\3.2.7.5\sysroot\usr\include\napi目录下。

CMakeLists.txt编译配置文件编写

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

  • 和开发rom包的NAPI工程需要在BUILD.gn文件中指定编译so库需要的头文件和源文件、动态库名称、依赖的库一样,通过IDE开发ROM包时也需要在CMakeLists.txt中指定编译so库需要的头文件和源文件、动态库名称、依赖的库,内容如下:
cmake_minimum_required(VERSION 3.4.1)
project(MyApplication3)
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${NATIVERENDER_ROOT_PATH}
                    ${NATIVERENDER_ROOT_PATH}/include)

add_library(hellonapi SHARED hellonapi.cpp)
target_link_libraries(hellonapi PUBLIC libace_napi.z.so)
  • NATIVERENDER_ROOT_PATH路径指的是sdk\native\3.2.7.5\sysroot\usr
  • add_library(hellonapi SHARED hellonapi.cpp)表示编译libhellonapi.so需要的是hellonapi.cpp
  • target_link_libraries(hellonapi PUBLIC libace_napi.z.so)表示编译编译libhellonapi.so依赖libace_napi.z.so
  • 开发ROM包的NAPI工程时,libhellonapi.z.so也依赖libace_napi.z.so,以下为开发ROM包的NAPI工程时BUILD.gn文件

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

libhellonapi.so依赖的libace_napi.z.so在sdk\native\3.2.7.5\sysroot\usr\lib\aarch64-linux-ohos目录下。

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

sdk\native\3.2.7.5\sysroot\usr\lib\arm-linux-ohos目录下也有开发ROM包的NAPI时候可能依赖的动态库。

index.d.ts声明文件编写

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

index.d.ts内容如下:

export const getHelloString: () => string;

界面设计

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

index.ets和​ 三方库移植之NAPI开发 1 一文中一致。

import prompt from '@system.prompt'
import hellonapi from 'libhellonapi.so'

@Entry
@Component
export struct HelloNAPI {
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Button("NAPI: hellonapi.getHelloString()").margin(10).fontSize(24).onClick(() => {
        // 调用getHelloString接口
        let strFromNAPI = hellonapi.getHelloString()
        prompt.showToast({ message: strFromNAPI })
      })
    }
    .width('100%')
    .height('100%')
  }
}

json配置文件编写

  • package.json内容如下:

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

{
  "name": "libhellonapi.so",
  "types": "./index.d.ts"
}
  • entry/package-lock.json内容如下:

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

"@types/libhellonapi.so":"file:./src/main/cpp/types/libhellonapi"

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

  • 有报错就删除原有的libentry.so符号链接。

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

  • entry/package.json内容如下:

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

"@types/libhellonapi.so": {
      "version": "file:src/main/cpp/types/libhellonapi",
  • 修改原有的libentry为libhellonapi

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

  • 设置hap为自动签名

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

hap包运行效果

和三方库移植之NAPI开发[1]—Hello OpenHarmony NAPI一文效果一致。

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

总结:RAM包的NAPI工程和ROM包的NAPI工程的异同

以下为个人总结,希望各位老师和同学批评指正

  • 动态库的命名方式的不同,RAM包的NAPI工程(通过IDE开发NAPI工程)使用的动态库libhellonapi.so,而ROM包的NAPI工程编译出来使用的动态库是libhellonapi.z.so。

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

  • libhellonapi.so位于hap包源码路径如下:
entry\build\default\intermediates\libs\default\arm64-v8a
entry\build\default\intermediates\cmake\default\obj\arm64-v8a
entry\build\default\intermediates\libs\default\armeabi-v7a
entry\build\default\intermediates\cmake\default\obj\armeabi-v7a

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

  • 开发ROM包的NAPI工程需要加入OHOS编译体系,编写BULID.gn、ohos.build等,开发过程较为繁琐。而RAM包的NAPI工程不需要加入OHOS编译体系,编写CMakeLists.txt配置编译需要的源文件、头文件、依赖的库等。因此开发RAM包的NAPI工程相对简洁。
  • .d.ts声明文件的编写不同
  • 开发ROM包的NAPI工程时,笔者编写的@ohos.hellonapi.d.ts内容为

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

  • 开发RAM包的NAPI工程时,笔者编写的@ohos.hellonapi.d.ts内容为:

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

编写.d.ts声明文件时,RAM包开发的NAPI工程定义功能方法getHelloString: () => string比ROM包多了=>符号。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

三方库移植之NAPI开发(三)通过IDE开发NAPI工程,HarmonyOS,移动开发,OpenHarmony,ide,harmonyos,OpenHarmony,鸿蒙开发,移动开发,分布式文章来源地址https://www.toymoban.com/news/detail-852762.html

到了这里,关于三方库移植之NAPI开发(三)通过IDE开发NAPI工程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS开发:超详细了解项目的工程结构

    系列文章目录: HarmonyOS开发第一步,熟知开发工具DevEco Studio 当我们熟练的掌握了DevEco Studio之后,就可以创建项目进行练习了,和市场上大多数IDE一样,DevEco Studio也给我们提供了很多的实例模板,当然了,对于大多数移动端开发者而言,这些模板和我们的UI设计有着很大的

    2024年02月11日
    浏览(36)
  • 毕业设计--智能环境监测系统基于harmonyOS的移动端应用开发

    目录 第一章 绪论 1.1 引言 1.2 智能环境监测APP概述 1.3 课题设计思路 第二章 项目开发环境 2.1 鸿蒙介绍 2.1.1 鸿蒙的发展史 2.1.2 鸿蒙应用开发的意义 2.1.3 HUAWEI DevEco Studio 介绍 2.1.4 HUAWEI DevEco Studio 环境安装 2.1.5 HarmonyOS系统技术架构 2.1.6 HUAWEI dececo studio 使用 2.1.7 Harmony编程语言

    2024年02月15日
    浏览(43)
  • 【VScode Embedded IDE】Keil工程导入VScode,与Keil协同开发MCU

    由于最近实习要练手一份代码量巨大的Keil项目(写得过于繁杂。由于有几百份第三方设备的源文件头文件,再加上各种条件编译,使得一份c文件里都有近6k行代码),让我这个小白非常头疼,再加之Keil相较于现在的IDE,编辑器在代码阅读,编写等方面都显得老旧些。在这么

    2024年02月05日
    浏览(49)
  • OpenHamony开发笔记一:在HarmonyOS虚拟机上运行openharmony工程

    在HarmonyOS的虚拟机上要运行openharmony的工程时需要修改的地方有 1.修改build-profile.json5,将runtimeOS改为HarmonyOS 2.修改工程引用的SDK,在文件local.properties上将sdk.dir的openharmony sdk改为hwsdk.dir的HarmonyOS的sdk

    2024年02月06日
    浏览(30)
  • HarmonyOS 鸿蒙开发DevEco Studio OpenHarmony:创建OpenHarmony工程

    目录 创建和配置新工程 将原子化服务工程改为应用工程 当开始开发一个OpenHarmony应用/服务时,首先需要根据工程创建向导,创建一个新的工程,工具会自动生成对应的代码和资源模板。 说明 在运行DevEco Studio工程时,建议每一个运行窗口有2GB以上的可用内存空间。 通过如下

    2024年01月25日
    浏览(47)
  • HarmonyOS实战开发-通过screenshot模块实现屏幕截图 。

    本示例展示全屏截图和屏幕局部截图。 本示例通过screenshot模块实现屏幕截图 ,通过window模块实现隐私窗口切换,通过display模块查询当前隐私窗口。 使用说明: 点击右上角图标打开弹窗,选择截屏,展示全屏截图;选择局部截屏,选择截屏区域,点击右下角完成,展示局部

    2024年04月13日
    浏览(36)
  • openHarmony使用Napi开发样例

    代码gitee路径 Napi在开发工程中的指导         1.2.1 cmake引入按照napi处理后的模块生成一个可以让ninja编译的文件配置。         1.2.2 并且要把cmakelist文件引入到当前模块的打包构建文件中。 在这个代码片段中, sizeof(desc) / sizeof(desc[0])  是用来计算  desc  数组中的元素个数

    2024年03月27日
    浏览(45)
  • 华为鸿蒙开发(HarmonyOs开发):超详细的:DevEco Studio 的安装和配置 、华为第三方包依赖:SDK软件包的安装、Nodejs的导入配置

    2023年11月28日20:00:00 ⚠️⚠️HarmonyOs 开发工具 ⚠️⚠️ ⚠️⚠️DevEco Studio 的安装和配置⚠️⚠️ ⚠️⚠️⚠️❤️❤️ 关注了解更多 一、打开鸿蒙开发工具官网 下面是安装DevEco Studio 的详细步骤:希望大家给个关注,祝大家:踏上HarmonyOs 之旅,步步高升! 下载地址:官

    2024年02月03日
    浏览(52)
  • Android开发:通过Tesseract第三方库实现OCR

    一、引言         什么是 OCR ?OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。简单地说,OCR是一种技术,该项技术采用光学的

    2024年02月16日
    浏览(46)
  • 用Rust开发鸿蒙应用(ArkTS NAPI)

    在DevEco Studio的模板工程中包含使用Native API的默认工程,使用File-New-Create Project创建Native C++模板工程。 在此基础上进行修改 删除 entry/src/main/cpp 打开 entry/build-profile.json5 删除c++ build 配置 创建rust项目 修改 Cargo.toml lib.rs 添加测试代码 添加对应ts代码 配置依赖 在 rust 根目录下编

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包