鸿蒙的NDK开发初级入门篇

初级必备的知识: NDK开发在什么时候用?

答: :NDK 开发在帮助应用提升性能的情况下使用,比如游戏开发,和硬件交互的场景中。

还有一个公司已经有标准的C或C++库,不想在开发ArkTS的代码前提下。

开发NDK必须要了解的基础知识从低到高一步一步了解

第一:NDK 开发的基础调用流程。

NDK 开发是基于C/c++ 的开发工程,因此项目中会存在c++/c代码,因此项目存在entry工程中的ArkTS调用C/c++ 代码的情况。也有c/c++ 调用ArkTS的情况(进阶版本 hap 包里面的C调用hsp/har包中的c/ArkTS)

第二:实现以上的内容需要用到什么技术?

答: 要想实现以上的技术需要使用到Node-API

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

第三:在鸿蒙中如何实现NDK 的开发

hap的创建流程:

如果当前未打开任何工程,可以在DevEco Studio的欢迎页,选择Create Project开始创建一个新NDK工程。

如果已经打开了工程,可以在菜单栏选择File > New > Create Project来创建一个新NDK工程。

根据工程创建向导,选择Native C++工程模板,然后单击Next。
hsp/har包的创建需要在创建包含c代码(NDK开发)的时候,需要在创建页面,将这个勾选

创建成功以后工程目录下的nain 下面包含一个cpp目录,就是用来开发NDK代码的

第三:如何构建NDK 工程:

答;使用CMake命令的方式(我不会)

可以使用项目中的CMake配置脚本,在上面的图片中cpp目录下有一个CMakeLists.txt 这个文件就是配置脚本文件。在NDK 项目创建的时候会有默认的脚本,具体含义如下:

the minimum version of CMake.

cmake_minimum_required(VERSION 3.5.0)#这个CMake的版本号。2025年7月12默认是3.50

project(MyApplication) #工程的名字,不是库的名字哦

定义一个变量,并赋值为当前模块cpp目录

set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})#如果你需要引入其他的so包,以当前的这个目录为准,向上找比如:

set(TSE_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}.../.../.../oh_modules/libtest/abc)

添加头文件.h目录,包括cpp,cpp/include,告诉cmake去这里找到代码引入的头文件

include_directories(${NATIVERENDER_ROOT_PATH}

${NATIVERENDER_ROOT_PATH}/include

${TSE_ROOT_PATH}/include)# 这个是基于刚才加的abc那个目录下有一个头文件,所以添加这个变量

声明一个产物libentry.so,SHARED表示产物为动态库,hello.cpp为产物的源代码

add_library(entry SHARED hello.cpp)# 这个地方可以将你要写的源代码编译到对应的库里面,有多个文件的时候可以这样添加

add_library(entry SHARED hello.cpp hello1.cpp hello2.cpp)

声明产物entry链接时需要的三方库libace_napi.z.so

这里直接写三方库的名称是因为它是在ndk中,已在链接寻址路径中,无需额外声明

target_link_libraries(entry PUBLIC libace_napi.z.so) #这个是链接三方库,如果有多个的情况可以这样添加,这个了还有几种情况 1 如果是一个项目中,其他模块的so库 2 entry模块下entry/libs/arm64-v8a/目录下有so库

第一个实现方案是:

target_link_libraries(entry PUBLIC libace_napi.z.so 模块名字:: 编译的库名字)

如:target_link_libraries(entry PUBLIC libace_napi.z.so libhsp::libhsp)

第二个实现方案是

target_link_libraries(entry PUBLIC libace_napi.z.so 模块名字:: 编译的库名字)

第四:构建NDK 工程需要在build-profile.json5 中配置什么

externalNativeOptions

模块级build-profile.json5中externalNativeOptions参数是NDK工程C/C++文件编译配置的入口,可以通过path指定CMake脚本路径、arguments配置CMake参数、cppFlags配置C++编译器参数、abiFilters配置编译架构等。

"apiType": "stageMode",

"buildOption": {

"arkOptions": {

},

"externalNativeOptions": {

"path": "./src/main/cpp/CMakeLists.txt",

"arguments": "",

"cppFlags": "",

"abiFilters": [

"arm64-v8a",

"x86_64"

],

}

}

相关推荐
键盘鼓手苏苏3 小时前
Flutter 三方库 p2plib 的鸿蒙化适配指南 - 实现高性能的端到端(P2P)加密通讯、支持分布式节点发现与去中心化数据流传输实战
flutter·harmonyos·鸿蒙·openharmony
加农炮手Jinx3 小时前
Flutter for OpenHarmony:postgrest 直接访问 PostgreSQL 数据库的 RESTful 客户端(Supabase 核心驱动) 深度解析与鸿蒙适配指南
数据库·flutter·华为·postgresql·restful·harmonyos·鸿蒙
加农炮手Jinx3 小时前
Flutter 组件 heart 适配鸿蒙 HarmonyOS 实战:分布式心跳监控,构建全场景保活检测与链路哨兵架构
flutter·harmonyos·鸿蒙·openharmony
钛态3 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
王码码20353 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
王码码20353 小时前
Flutter 三方库 dns_client 的鸿蒙化适配指南 - 告别 DNS 劫持、探索 DNS-over-HTTPS (DoH) 技术、构建安全的鸿蒙网络请求环境
flutter·harmonyos·鸿蒙·openharmony·dns_client
键盘鼓手苏苏3 小时前
Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构
flutter·harmonyos·鸿蒙·openharmony
国医中兴3 小时前
Flutter 三方库 langchain_google 的鸿蒙化适配指南 - 链接 Gemini 智慧中枢、LangChain AI 实战、鸿蒙级智能应用专家
flutter·langchain·harmonyos
左手厨刀右手茼蒿3 小时前
Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)
android·flutter·ui·华为·自动化·harmonyos
雷帝木木3 小时前
Flutter 三方库 http_client_interceptor 的鸿蒙化适配指南 - 实现原生 HttpClient 的全量请求拦截、支持端侧动态 Headers 注入与网络流量审计实战
flutter·harmonyos·鸿蒙·openharmony·http_client_interceptor