如何使用CMake做JNI/NDK开发
1 新建工程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5qeS2J4V-1638155002522)(https://user-gold-cdn.xitu.io/2017/10/7/030ba32094de32b2c2dadb7a416c4535?imageView2/0/w/1280/h/960/ignore-error/1)]
选中Include C++ Support,意为引入C++支持。
2 配置C++支持
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UZbCC353-1638155002546)(https://user-gold-cdn.xitu.io/2017/10/7/ea878b247dc3b48b81f88f68bae6b8eb?imageView2/0/w/1280/h/960/ignore-error/1)]
在Customize C++ Support界面默认即可,意为CMake/C++11环境
3 认识CMakeLists.txt
工程创建完毕之后Android Studio会在app
目录下生成CMakeLists.txt文件。CMakeLists.txt是CMake的配置文件,用于表明版本、依赖、等信息,以下为Android Studio生成的CMakeLists(过滤注释)
cmake_minimum_required(VERSION 3.4.1)
add_library(native-lib SHARED src/main/cpp/native-lib.cpp)
find_library(log-lib log)
target_link_libraries(native-lib ${log-lib})
- cmake_minimum_required(VERSION 3.4.1)
CMake最小版本使用的是3.4.1。 - add_library()
配置so库信息(为当前当前脚本文件添加库) - native-lib
这个是声明引用so库的名称,在项目中,如果需要使用这个so文件,引用的名称就是这个。值得注意的是,实际上生成的so文件名称是libnative-lib。 - SHARED
这个参数表示共享so库文件,也就是在Run项目或者build项目时会在目录intermediates\transforms\mergeJniLibs\debug\folders\2000\1f\main
下生成so文件。 - src/main/cpp/native-lib.cpp
构建so库的源文件。 - find_library()
查找一个库文件 - log-lib
这个指定的是在NDK库中每个类型的库会存放一个特定的位置,而log库存放在log-lib中 - log
指定使用log库 - target_link_libraries()
如果你本地的库(native-lib)想要调用log库的方法,那么就需要配置这个属性,意思是把NDK库关联到本地库。 - native-lib
要被关联的库名称 - ** l o g − l i b ∗ ∗ 要