当前位置: 首页 > article >正文

【HarmonyOS NAPI 深度探索11】搭建 NAPI 开发环境:HarmonyOS DevEco Studio 全指南

【HarmonyOS NAPI 深度探索11】搭建 NAPI 开发环境:HarmonyOS DevEco Studio 全指南

在开始 NAPI 开发之前,一个高效、完善的开发环境是成功的第一步。对于 HarmonyOS 开发者来说,DevEco Studio 是最推荐的开发工具,它为 HarmonyOS 提供了丰富的支持。今天我们将一起学习如何使用 DevEco Studio 搭建 NAPI 开发环境,为后续的开发打下坚实基础。
在这里插入图片描述

为什么选择 DevEco Studio

DevEco Studio 是专为 HarmonyOS 开发定制的集成开发环境(IDE),它支持多设备开发、分布式特性调试,并为 NAPI 开发提供了完整的工具链和接口支持。相比于其他 IDE,DevEco Studio 提供了更多适配 HarmonyOS 的功能,例如:

  • 内置 NAPI 模块支持
  • 提供调试工具,方便 JavaScript 和 C/C++ 的联合调试
  • 支持多设备模拟器,轻松测试分布式场景
环境搭建前的准备

在开始搭建之前,请确保你的开发环境满足以下基本要求:

  1. 操作系统
    推荐使用 Windows、macOS 或 Linux。根据你的系统类型下载对应版本的 DevEco Studio。

  2. 安装必备软件

    • Node.js:确保已安装最新的 LTS 版本。
    • C/C++ 编译器:
      • Windows:安装 Visual Studio 并勾选 C++ 开发工具集。
      • macOS:安装 Xcode,并启用命令行工具。
      • Linux:安装 GCC 或 Clang(根据需求选择)。
      • HarmonyOS 跨平台编译器,这里要将代码编译到手机,所以需要用到HarmonyOS提供的C++编译器,在DevEco Studio中自带。
    • Python:推荐 3.x 版本,某些工具链可能依赖它。
  3. 下载和安装 DevEco Studio
    前往 HarmonyOS 官网 下载最新版本的 DevEco Studio 并完成安装。

DevEco Studio 的安装与配置
  1. 安装 DevEco Studio
    下载 DevEco Studio 的安装包后,运行安装程序并按照提示完成安装。安装完成后首次启动时,会提示你配置开发环境:

    • 选择你的开发模式:建议选择标准模式以获得完整的功能支持。
    • 下载 HarmonyOS SDK:根据需要选择目标设备类型(手机、IoT、穿戴设备等)并下载对应的 SDK。
  2. 配置 C/C++ 工具链

    • 打开 DevEco Studio,进入 File > Settings > Tools > CMake,确保 CMake 的路径正确配置。
    • 确保 NDK 已安装并配置好路径,可通过 File > Settings > Appearance & Behavior > System Settings > Android SDK > SDK Tools 检查。
  3. 创建新项目

    • 打开 DevEco Studio,选择 File > New > HarmonyOS Project
    • 在模板选择中,选择 JS-C++ 模块,为后续的 NAPI 开发打下基础。
创建第一个 NAPI 模块
  1. 创建Native C++工程
    创建Native C++工程后,DevEco Studio会自动生成C++相关示例代码:
    在这里插入图片描述

  2. napi_init.cpp中编写C++逻辑

EXTERN_C_START  
static napi_value Init(napi_env env, napi_value exports)  
{  
    napi_property_descriptor desc[] = {  
        { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr }  
    };  
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);  
    return exports;  
}  
EXTERN_C_END  
  
static napi_module demoModule = {  
    .nm_version = 1,  
    .nm_flags = 0,  
    .nm_filename = nullptr,  
    .nm_register_func = Init,  
    .nm_modname = "entry",  
    .nm_priv = ((void*)0),  
    .reserved = { 0 },  
};  
  
extern "C" __attribute__((constructor)) void RegisterEntryModule(void)  
{  
    napi_module_register(&demoModule);  
}

在Init中声明C++暴露给TS的接口方法,这里以加法add函数为例,实现add方法:

static napi_value Add(napi_env env, napi_callback_info info)  
{  
    size_t argc = 2;  
    napi_value args[2] = {nullptr};  
  
    napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);  
  
    napi_valuetype valuetype0;  
    napi_typeof(env, args[0], &valuetype0);  
  
    napi_valuetype valuetype1;  
    napi_typeof(env, args[1], &valuetype1);  
  
    double value0;  
    napi_get_value_double(env, args[0], &value0);  
  
    double value1;  
    napi_get_value_double(env, args[1], &value1);  
  
    napi_value sum;  
    napi_create_double(env, value0 + value1, &sum);  
  
    return sum;  
  
}

通过napi_get_cb_info函数获取TS中传入的值,然后转换成对应的C++对象,然后将传入的doubule类型数据相加后通过napi_create_double将C++的doubule类型数据转换成TS的napi_value后返回。

  1. Index.d.ts中声明可以供TS调用的方法
    在这里插入图片描述

  2. 声明动态库名称

在oh-package.json5中配置动态库名称,在TS中直接导入模块后调用
在这里插入图片描述

  1. CMakelist.txt中配置C++编译脚本
    在这里插入图片描述

声明要编译的源码,以及要连接的外部库。

调试 NAPI 模块
  1. 设置断点
    在 C++ 文件中,单击行号区域可以设置断点。
  2. 启动调试器
    选择 Run > Debug,选择你的目标设备。DevEco Studio 会启动调试器,允许你逐步调试代码。
  3. 检查变量与内存
    调试器提供了变量监控和内存检查功能,帮助你排查问题。
常见问题与解决
  1. 找不到 CMake 或 NDK
    检查 File > Settings > Appearance & Behavior > System Settings > Android SDK 中的路径是否正确。
  2. 模块无法编译
    • 确保 CMakeLists.txt 配置正确,目标文件与路径一致。
  3. 调试时无法连接设备
    • 检查设备是否启用开发者模式。
    • 确保设备已通过 USB正确连接到电脑。
总结

通过以上步骤,我们成功在 DevEco Studio 中搭建了适配 NAPI 的开发环境。从创建项目到编写模块,再到编译与调试,整个过程简单高效。
一个高效的开发环境不仅能提高我们的开发效率,还能帮助我们更快地发现问题。如果你还没尝试过,赶紧动手搭建起来吧!相信未来你会感受到 DevEco Studio 与 HarmonyOS 的强大组合能为开发带来多大的便利。


http://www.kler.cn/a/511689.html

相关文章:

  • 【玩转全栈】----Django模板的继承
  • 金仓Kingbase客户端KStudio报OOM:Java heap space socketTimeout
  • 第6章:Python TDD实例变量私有化探索
  • 【PowerQuery专栏】PowerQuery提取XML数据
  • 【QT用户登录与界面跳转】
  • Java——Stream流的peek方法详解
  • PortSwigger NoSQL 注入
  • mybatis保存数据库类型为json类型数据报错
  • JAVA使用自定义注解,在项目中实现EXCEL文件的导出
  • 微服务学习:基础理论
  • 【STM32-学习笔记-11-】RTC实时时钟
  • SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——主目录(持续更新)
  • 【机器学习实战入门项目】使用深度学习创建您自己的表情符号
  • Selenium工具使用Python 语言实现下拉框定位操作
  • 深入了解JSON:Python中JSON的全面应用指南
  • deeply c-函数栈帧(函数栈帧的过程)
  • VLAN基础理论
  • Unity 学习指南与资料分享
  • Python操作Excel——openpyxl使用笔记(1)
  • matlab实现了一个完整的语音通信系统的模拟,包括语音信号的读取、编码(PCM 和汉明码)、调制
  • redux 结合 @reduxjs/toolkit 的使用
  • 【机器学习实战入门】泰坦尼克号生存预测
  • matlab实现一个雷达信号处理的程序,涉及到对原始图像的模拟、加权、加噪以及通过迭代算法对图像进行恢复和优化处理
  • 三格电子——CAN转WIFI网关
  • Web安全|渗透测试|网络安全
  • oracle 的物化视图介绍