Android studio中NDK开发(一)——使用CMake构建NDKDemo
编程语言
2018-12-29 17:18:01
阅读次数: 0
一、前言
NDK可以支持使用C/C++来编写Android程序,不但可以接入C/C++中优秀的库资源,而且处理效率高,在音视频方面有着广泛的应用。本篇主要以CMake的方式来构建NDK,主要以最常规的方式创建一个NDKImportDemo,并对自动创建官方例子进行分析构建的过程以及CMakeLists.txt构建文件的配置。
二、准备
1、检查Android studio版本
Android studio 2.2以上才支持CMake构建,我的版本是3.2.1
![](https://img-blog.csdnimg.cn/20181229091956591.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
2、检查是否下载CMake、NDK
![](https://img-blog.csdnimg.cn/20181229092318455.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
NDK:原生开发工具包,可以支持使用C/C++编写Android应用
CMake:跨平台的独立自动化构建工具,辅助构建原生库
LLDB:可以用来调试C/C++代码
3、配置NDK(路径为:“你的SDK”/ndk-bundle)
![](https://img-blog.csdnimg.cn/20181229093348351.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
三、创建
新建NDKImportDemo,记得把“include C++ support”勾选上,选择“Next”下一步
![](https://img-blog.csdnimg.cn/20181229094835143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20181229094941325.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20181229095435295.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20181229095814381.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20181229095936433.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
Exceptions Support(-fexceptions):支持C++的异常处理
Runtime Type Information Support(-frtti):支持运行时到的类型信息显示
四、分析
调到 “Project” 视图,重点关注下图中的四个文件:native-lib.cpp、build.gradle(app)、CMakeLists.txt、MainActivity
![](https://img-blog.csdnimg.cn/20181229110036436.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
1、MainActivity
![](https://img-blog.csdnimg.cn/20181229110539870.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
注意:这里的native方法只是声明,那么实现在哪里呢?看下面的native-lib.cpp文件
2、native-lib.cpp
![](https://img-blog.csdnimg.cn/20181229111120642.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
注意:这个方法名一定是固定的格式,方法里面是具体的native方法的实现,通过C/C++来实现,因为这是cpp文件,所以使用的是C++。
3、CMakeLists.txt
![](https://img-blog.csdnimg.cn/20181229111921279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20181229112630879.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
目前CMake的语法暂时了解这四个,其他的在以后的需要用到的时候再学。
注意:这只是构建好CMakeLists.txt文件,还需要在app的build.gradle中配置CMakeLi.txt的路径
4、buid.gradle
![](https://img-blog.csdnimg.cn/20181229114301679.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
五、生成so库
在以上文件配置好后,Make一下project,进行编译
![](https://img-blog.csdnimg.cn/20181229114532412.png)
编译通过之后就会生成相应的so库,在app/build/intermediates/cmake/debug/obj/${ANDROID_ABI}(相应的架构)目录下就可以看到相应的CPU架构对应的so库了
![](https://img-blog.csdnimg.cn/20181229122236647.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1hpb25namlheW8=,size_16,color_FFFFFF,t_70)
最后,点击“Run”运行,就可以看到自动生成的Demo效果了
六、参考
如有错误,欢迎指正,虚心学习!
转载自blog.csdn.net/Xiongjiayo/article/details/85233834