一、先了解几个问题和概念:
1.什么是ndk?
ndk全名为native development kit,即本地开发工具包。ndk提供了一系列的工具,帮助我们快速开发c/c++动态库,并且自动将so和java应用一起打包成apk。
2.什么是jni?
jni全名为java native interface,它是java调用c/c++的规范。ndk就是基于jni实现的。
3.为什么要使用ndk?
3.1 执行速度提升:C和C++语言通常比Java语言执行速度更快,特别是在处理计算密集型任务时,如游戏、物理模拟等场景。通过使用NDK将这些性能敏感的部分用C/C++实现,可以显著提升应用程序的运行速度和响应能力。
3.2 图形和音视频处理:对于需要处理大量计算、图形渲染以及音视频处理的应用,NDK能够提供更高的性能。这是因为C/C++语言在底层硬件加速和算法优化方面具有优势。
3.3 重用现有库:NDK允许开发者使用现有的C/C++库或代码,并将其集成到Android应用程序中。这减少了重新编写代码的工作量,特别是对于已经拥有大量C/C++代码基础的项目来说,可以节省大量的开发时间和成本。
3.4. 跨平台支持:C/C++是一种具有广泛支持的语言,其代码可以在不同的操作系统上重用。通过NDK开发的部分代码可以更容易地在其他平台上移植和使用,如iOS、Windows等,从而实现跨平台的开发和代码共享。
3.5. 硬件访问:NDK提供了直接访问底层硬件功能的能力,如摄像头、传感器(如精确快速地获取某种传感器的值)、蓝牙等。这些功能在Android的Java API中可能无法直接访问或访问效率较低,而通过NDK则可以更高效地实现这些功能。
3.6. 反编译难度:由于APK的Java层代码容易被反编译,而C/C++库破解难度较大,因此使用NDK可以提高代码的安全性。通过将关键算法或核心代码用C/C++实现,并编译为本机代码库(.so文件),可以增加代码被破解的难度。
3.7. 完整工具链:NDK提供了完整的开发工具链,包括编译器、链接器、调试器等,方便开发人员进行本地代码的开发和调试。
综上所述就是性能更好、更安全和便于移植。
二、环境搭建
windows环境下搭建:
我现在用的Android studio版本不是最新的,因为用这个版本比较长,也比较熟悉,就没有更新到最新:
大家可以根据自己情况去下载对应的版本,可能不同版本配置时会有些差别。
1.新建工程:
2.下载ndk:
3.下载cmake:
4.在app.gradle下配置
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.31.1'
}
}
buildFeatures {
viewBinding true
}
ndkVersion '22.1.7171670'
5.在local.properties下配置
sdk.dir=C:\Users\Administrator\AppData\Local\Android\Sdk
ndk.dir=C:\Users\Administrator\AppData\Local\Android\Sdk\ndk\22.1.7171670
三、配置过程中可能存在的问题
错误1:[CXX1428] exception while building Json A problem occurred starting process 'command 'C:\Users\Administrator\AppData\Local\Android\Sdk\cmake\3.22.1\bin\cmake.exe''
这个是下载的cmake版本问题,可以下载个高版本的cmake。这里之前是3.22.1版本,更新到3.31.1版本就好了。
错误2:android studio Could not find Ninja on PATH or in SDK CMake bin folders.
这个需要配置Ninja环境变量
下载Ninjia二进制文件,将下载ninja-win.zip压缩到指定路径下,并配置到环境变量中
配置成功后,输入ninja --version可看到版本号
四、项目结构
运行效果:
结语
大家先了解下android studio开发ndk的环境配置,下一篇我们一起学习JNI语法,喜欢的点赞收藏,感谢!