鸿蒙next ndk入门到精通第一集

前言导读

各位同学大家好,从这篇文章开始,我们就开始讲我们的 鸿蒙next里面的ndk开发了,也希望大家能跟着我一起学习和完善这一块的知识点,那么废话不多说。

NDK介绍(这些是官方的说明我不写怕有些同学觉得看不懂 觉得啰嗦可以看后面的内容)

NDK(Native Development Kit)是HarmonyOS SDK提供的Native API、相应编译脚本和编译工具链的集合,方便开发者使用C或C++语言实现应用的关键功能。NDK只覆盖了HarmonyOS一些基础的底层能力,如C运行时基础库libc、图形库、窗口系统、多媒体、压缩库、面向ArkTS/JS与C跨语言的Node-API等,并没有提供ArkTS/JS API的完整能力。

运行态,开发者可以使用NDK中的Node-API接口,访问、创建、操作JS对象;也允许JS对象使用Native动态库。

NDK适用场景

适合使用NDK的场景:应用涉及如下场景时,适合采用NDK开发

  • 性能敏感的场景,如游戏、物理模拟等计算密集型场景。
  • 需要复用已有C或C++库的场景。
  • 需要针对CPU特性进行专项定制库的场景,如Neon加速。

不建议使用NDK的场景:应用涉及如下场景时,不建议采用NDK开发

  • 纯C或C++的应用。
  • 希望在尽可能多的HarmonyOS设备上保持兼容的应用。

NDK必备基础知识

为顺利进行NDK开发,开发者需要先掌握必要的基本概念及基础知识。

NDK基本概念

  • Node-API

    曾用名NAPI,是HarmonyOS中提供ArkTS/JS与C/C++跨语言调用的接口,是NDK接口中的一部分。该接口是在Node.js提供的Node-API基础上扩展而来,但与Node.js中的Node-API不完全兼容。

  • C API

    HarmonyOS NDK的曾用名,不再使用。

前置知识

  • Linux C语言编程知识

    内核、libc基础库基于POSIX等标准扩展而来,掌握基本的Linux C编程知识能够更好的帮助理解HarmonyOS NDK开发。

  • CMake使用知识

    CMake是HarmonyOS默认支持的构建系统。请先通过CMake官方文档了解基础用法。

  • Node Addons开发知识

    ArkTS采用Node-API作为跨语言调用接口,熟悉基本的Node Addons开发模式,可以更好理解NDK中Node-API的使用。

  • Clang/LLVM编译器使用知识

    具备一定的Clang/LLVM编译器基础知识,能够帮助开发者编译出更优的Native动态库。

创建ndk的工程

选择我们的 Native c++这个选项

然后输入我们的工程名字

ndk 工程目录结构 我们可以看到对比我们的多出一个我们的cpp的文件夹 里面分别有

r 复制代码
napi_init.cpp c++源代码
CMakeLists.ext c++代码编译配置文件
Index.d.ts   c++ 代码对外接口配置文件
oh-package.json5  c++ library工程配置文件

c++ 部分代码

ini 复制代码
#include "napi/native_api.h"

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;

}

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);
}

c++对外方法

typescript 复制代码
export const add: (a: number, b: number) => number;

c++ 库配置文集内容

json 复制代码
{
  "name": "libentry.so",
  "types": "./Index.d.ts",
  "version": "1.0.0",
  "description": "Please describe the basic information."
}

在arkts 里面调用

首先要导入我们的 libentry.so 是我们的c++编译之后的产物

javascript 复制代码
import testNapi from 'libentry.so';

arkts 调用我们的c++代码

typescript 复制代码
aboutToAppear(): void {
  let getnumber:number=testNapi.add(2, 3);
  console.log("getnnumber -- > "+getnumber);
}

我们在控制台上面看到打印成功了

我们需要注意的是因为我们的arkts 里面数据类型对比c++这种静态语言要少很多,那么他们之间互相通信数据类型是怎么对应的呢

数据类型转换

markdown 复制代码
-   ArkTS的`number`对应C++的`int/double`

-   字符串通过`napi_get_value_string`转换14

-   对象类型需特殊处理封装3
    

最后总结:

鸿蒙next的 ndk 知识的第一集我们就讲到这里,因为我也是一边学一边分享,学好我们的ndk 。我们可以用到的场景非常的多 例如我们的音视频 ffmpeg的开发,游戏引擎里面的交互也是用这个特别是unity3d 和cocos2d 都是使用c++ 和我们的arkts 通信 他们也是使用我们ndk来通信 使用cmake配置编译。所以这一块只是相当重要,我们后续也会更新一系列这类的文章和课程。今天的文章就讲到这里我们下一期再见。今天的文章就讲到这里有兴趣的 关注我B站教程 了解更多鸿蒙开发的知识 可以关注坚果派公众号 。 谢谢

课程地址

www.bilibili.com/cheese/play...

项目内容:

1 常用布局组件的学习
2 网络请求工具类封装
3 arkui 生命周期启动流程
4 日志工具类的封装
5 自定义组合组件的封装
6 路由导航跳转的使用
7 本地地数据的缓存 以及缓存工具类的封装
8 欢迎页面的实现
9 登录案例和自动登录效果实现
10 请求网络数据分页上拉加载 下拉刷新的实现
11 list数据懒加载实现
12 webview组件的使用

如果使用更多好用的鸿蒙next三方库

友情链接

harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用,能够满足各种不同的开发需求。

harmony-dialog 一款极为简单易用的零侵入弹窗,仅需一行代码即可轻松实现,无论在何处都能够轻松弹出。

相关推荐
二流小码农18 分钟前
鸿蒙开发:实现一个标题栏吸顶
android·ios·harmonyos
坚果的博客43 分钟前
uniappx插件nutpi-idcard 开发与使用指南(适配鸿蒙)
华为·harmonyos
程序员小刘1 小时前
【HarmonyOS 5】 社交行业详解以及 开发案例
华为·harmonyos
软件测试小仙女1 小时前
鸿蒙APP测试实战:从HDC命令到专项测试
大数据·软件测试·数据库·人工智能·测试工具·华为·harmonyos
Raink老师1 小时前
鸿蒙任务项设置案例实战
harmonyos·鸿蒙·案例实战
程序员小刘1 小时前
【HarmonyOS 5】 影视与直播详以及 开发案例
华为·harmonyos
程序员小刘1 小时前
鸿蒙【HarmonyOS 5】 (React Native)的实战教程
react native·华为·harmonyos
王二蛋与他的张大花2 小时前
HarmonyOS运动语音开发:如何让运动开始时的语音播报更温暖
harmonyos
Android研究员2 小时前
华为仓颉语言初识:并发编程之同步机制(上)
harmonyos
陈奕昆3 小时前
4.2 HarmonyOS NEXT分布式AI应用实践:联邦学习、跨设备协作与个性化推荐实战
人工智能·分布式·harmonyos