引言:

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

我们在开发的过程中难免会遇到三方语言的调用问题,NDK是目前非常成熟和完善的工具包。

所以接下来我们将学习如何使用NDK进行跨语言的Node-API调用和原生的ArkTS的交互。

首先:

1.创建NDK工程

        根据工程创建向导,选择Native C++工程模板,然后单击Next

在工程配置页面,根据向导配置工程的基本信息后,单击Finish,工具会自动生成示例代码和相关资源,等待工程创建完成。

在工程entry/src/main目录下会包含cpp目录,该目录文件的详细介绍请参见C++工程目录结构

重点介绍一下CMakeLists.txt,它是连接的桥梁。

  • src > main > cpp > CMakeLists.txt:CMake配置文件,提供CMake构建脚本。

根目录CMakeLists.txt内容

# 指定CMake的最小版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.16)


# 工程名称,这里我们就叫HELLO
PROJECT(HELLO)


#添加一个子目录并构建该子目录。
ADD_SUBDIRECTORY(src)

SET(LIBHELLO_SRC hello.cpp)

//设置项目根目录,用来调用Lib库。
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})

//# 添加一个libsum动态库目标,编译成功会生成一个libsum.so
add_library(HELLO SHARED napi_init.cpp)

//# 添加一个libsum动态库目标,编译成功会生成一个libsum.so
add_library(HELLO SHARED napi_init.cpp)

//# 指定Hello目标include目录路径

target_link_libraries(Hello PUBLIC ../include)

//# 指定Hello目标需要链接的库名字

target_link_libraries(Hello PUBLIC sum)

源码内容

然后就是对源码的编写了

hello.cpp源码

#include <iostream>
#include "sum.h"


int main(int argc,const char **argv)
{
    std::cout<< "hello world!" <<std::endl;
    int total = sum(1, 100);
    std::cout<< "Sum 1 + 100=" << total << std::endl;
    return 0;
}

sum.h源码

int sum(int a, int b);

sum.cpp源码

#include <iostream>
    
int sum(int a, int b)
{
    return a + b;
}

通过上述配置我们就得到了一个简单的NDK项目了。

后续我们进行C代码的编写和调用。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐