NDK开发环境搭建-VsCode 目录背景什么是NDK开发NDK开发的使用场景VScode中搭建NDK环境工具下载环境变量创建工程编译工程结语背景大家好我是幸运-草在Android开发中我们如果想要通过JNI调用Native(C/C)代码, 就需要使用NDK进行开发请注意我说的是在Android开发中使用的是NDK开发而不是指的是java调用C/C)。本篇文章不会介绍AndroidStudio中搭建NDK开发环境如果需要在AndroidStudio中搭建NDK开发环境也可以先阅读一下这篇文章因为这会让您了解到其中的依赖关系。什么是NDK开发首先要区分NDK开发和JNI开发本质是两码事是不同的应用场景。图片来源百度百科JNI开发是Java标准支持的是为了Java可以调用到C/C代码跟Android没有任何关系。NDK开发是Android提供的是为了让开发者可以脱离Android源码进行Native开发。再做一下解释JNI开发是Java支持的它规定了如何通过java代码调用到C/C代码。无论是不是在Android中只要使用Java都是可以使用JNI的NDK是Android提供的一个开发工具包你可以理解为一个SDK这个SDK可以提供给开发者直接编译出可以在Android平台上运行的动态库、静态库、可执行程序。也就是说通过JNI我们可以实现Java-C/C的调用如果我们还想要C/C代码(表现形式为动态库、静态库、可执行程序) 能够在Android平台上能够运行就必须通过NDK否则你只能在Android源码环境中进行编译。这听起来更像一个交叉编译工具是的没错NDK确实提供了交叉编译工具但它绝不仅仅是纯粹的交叉编译工具他还提供了一些Android环境中需要用到的API接口。NDK开发的使用场景NDK开发通常是为了开发一些高性能的库、比如很多大型的游戏渲染、图像与音视频处理、还有一些复杂的计算等除此之外我们希望可以复用一些已经使用C/C开发好的功能时也需要使用NDK。VScode中搭建NDK环境工具下载VsCode: https://code.visualstudio.com/NDK: https://dl.google.com/android/repository/android-ndk-r26b-windows.zipCmake: https://cmake.org/files/v3.26/cmake-3.26.4-windows-x86_64.zipNinja: https://github.com/ninja-build/ninja/releasesNDK版本、Cmake版本、Ninja版本建议使用较新的如果您查看本文章时上面给的版本已经太老了或者访问失效请您自行下载最新的稳定版即可。Cmake跨平台的交叉编译工具在不同平台下生成不同的构建文件也就是如果你有一套代码想要运行在不同的平台下就需要编写不同的构建脚本, 这样开发者就很麻烦但是如果使用MakeFille那么它可以在任何环境下自动生成不同的构建脚本而不需要开发者去适配多套。需要注意的是Android平台下需要NDK的支持也就是Cmake并不能直接生成Android平台下的构建脚本还需要NDK来协助。Ninja通过Cmake编译后生成的只是构建文件.ninja所以Ninja是去真正执行编译指令的。环境变量我们将上述工具下载解压到某个存放路径后需要将ninja.exe、cmake路径下的bin文件夹添加到环境变量中。创建工程安装好之前的工具以后就已经完成了NDK的环境搭建接下来我们来看一下是如何使用怎么样才可以编译我的代码。一个基本的demo结构src中是一个基本的main.cpp整个项目的CMakeLists.txt一般放到最外层如果您还不会cmake请您务必先学习一下Cmake,下面提供了我这里最基本的一个Cmake配置# 1.cmake最低版本要求 cmake_minimum_required(VERSION 3.20) # 2.项目名字编译的语言C和CXX即C project(myndk C CXX) #3.指定C版本为C17 set(CMAKE_CXX_STANDARD 17) #4.native.cpp 编译为叫ndkdemo的动态库 add_library(ndkdemo SHARED src/native.cpp) #5.依赖库 target_link_libraries( ndkdemo log )工程创建完毕我们下一步就进行编译。编译工程编译的本质就是通过前面安装好的cmke工具ninja工具执行命令完成编译操作所以为了方便以及通用性我们在CMakeLists.txt的统计路径下写一个bat脚本来简化该操作你可以直接复制它按需修改即可。REM 关闭脚本内执行命令时本身的打印 只显示结果 echo off REM NDK的路径修改为你自己的NDK路径 set NDK_ROOTD:/soft/vs_ndk/ndk/android-ndk-r26b REM 清空build目录 创建并进入build目录下 rmdir /s /q build mkdir build cd build REM DANDROID_ABI产物的CPU架构 REM DANDROID_PLATFORM指定最低Android的运行版本 24对应Android7.0 REM DANDROID_STLc_static静态库 c_shared动态库 REM DCMAKE_BUILD_TYPE Debug 保留调试信息 Release 开启编译器优化去掉调试信息 REM .. : CMakeLists.txt脚本的相对位置因为当前在build目录下 cmake -G Ninja ^ -DCMAKE_TOOLCHAIN_FILE%NDK_ROOT%/build/cmake/android.toolchain.cmake ^ -DANDROID_ABIarm64-v8a ^ -DANDROID_PLATFORMandroid-24 ^ -DANDROID_STLc_static ^ -DCMAKE_BUILD_TYPERelease ^ .. ninja pause运行脚本即可编译产物在build目录下。结语当你配置好环境后用该脚本去编译Cmake的工程时除了修改编译选项外、不需要修改其他任何东西。我并不建议开发者在Vscode中安装一些类如CMake Tools的图形化工具一方面是因为安装一些工具后通常会根据工具的不同、有不同的配置文件把你搞得你晕头转向另一方面是在我的过往经历中、也遇到过只会用git GUI提交代码、不会使用命令提交代码的同事。无论图形化界面如何变化、我们了解了其中的本质就会更加游刃有余。准确的来说我们并不是在讲解VsCode中的NDK编译环境的搭建、因为NDK环境从来不依赖代码编辑器、它只是命令行工具而已。看完这篇文章如果您需要在AndroidStudio中的搭建NDK环境您会有更加透彻的认识。如果您还觉得这篇文章还不错还请您点个赞或收藏鼓励一下

相关新闻

最新新闻

智能驾驶中的车道线检测技术:从传统方法到深度学习

智能驾驶中的车道线检测技术:从传统方法到深度学习

1. 车道线检测技术概述车道线检测作为计算机视觉在智能驾驶领域的核心应用,已经发展了近三十年。这项技术从最初的基于颜色分割的简单算法,逐步演变为如今融合深度学习与几何约束的复杂系统。在实际道路场景中,车道线不仅要应对光照变化、遮挡…

2026/7/14 23:28:30
零基础做一个「每日壁纸 + 短句」静态网页

零基础做一个「每日壁纸 + 短句」静态网页

本文使用AI做了一个「每日壁纸 短句」静态网页 1.需求 做一个极简静态网页,打开就是一张高清壁纸 一句温柔文案,干净、治愈、极简。 打开自动显示一张高清壁纸壁纸上叠加一句治愈短句 / 名言支持一键刷新换壁纸、换句子支持一键保存壁纸手机 / 电脑…

2026/7/14 23:28:30
嵌入式系统电源管理:ADP5350 PMIC与STM32实战解析

嵌入式系统电源管理:ADP5350 PMIC与STM32实战解析

1. 为什么需要高级电源管理解决方案在现代嵌入式系统中,电源管理已经成为一个关键的设计挑战。我最近为一个工业数据采集项目选型时,就深刻体会到了这一点。系统需要同时处理传感器数据采集、无线通信和本地存储,而传统的线性稳压方案根本无法…

2026/7/14 23:28:30
Offline RL实战:IQL如何通过隐式Q学习规避OOD动作,实现策略提升

Offline RL实战:IQL如何通过隐式Q学习规避OOD动作,实现策略提升

1. 离线强化学习与IQL的核心挑战想象你手里有一本菜谱合集,但厨房被封了——这就是离线强化学习(Offline RL)面临的基本场景。我们只能依靠历史数据训练智能体,无法像在线RL那样通过试错来优化策略。这种设定下,算法需…

2026/7/14 23:28:30
Chet.Admin 项目结构全解析:前后端目录一图看懂

Chet.Admin 项目结构全解析:前后端目录一图看懂

《Chet.Admin 全栈实战》系列第 3 篇 前言 上一篇我们把项目跑起来了,但项目一打开可能会懵: 后端怎么这么多项目?前端 packages/ apps/ internal/ 都是啥?新增一个模块,代码该放哪? 这篇就把目录结构彻…

2026/7/14 23:28:30
DiffThinker:视觉推理新范式与扩散模型实践

DiffThinker:视觉推理新范式与扩散模型实践

1. 项目背景与核心突破 最近在CVPR 2024上看到一篇颠覆性的论文《DiffThinker》,彻底刷新了我对多模态推理的认知。传统方法总是依赖文本思维链(Chain-of-Thought)进行逻辑推理,而这篇论文提出了一个疯狂的观点:人类最…

2026/7/14 23:23:30

月新闻