Android Studio使用CMake构建脚本调用jni
在Android Studio 2.2以后开始支持CMake来配置jni信息,这样的话我们可以直接使用CMake来配置jni信息,不需要在使用android.mk文件
首先下载 NDK 和构建工具(如已安装直接跳过,)
要为您的应用编译和调试原生代码,您需要以下组件:
- NDK:这套工具集允许您为 Android 使用 C 和 C++ 代码,并提供众多平台库,让您可以管理原生 Activity 和访问物理设备组件,例如传感器和触摸输入。
- CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。
- LLDB:一种调试程序,Android Studio 使用它来调试原生代码。
使用SDK Manager安装这些组件:
- 在打开的项目中,从菜单栏选择 Tools > Android > SDK Manager。
- 点击 SDK Tools 标签。
- 选中 LLDB、CMake 和 NDK 旁的复选框,如下图所示
- 点击apply,等待下载完成点击finish即可。
接下来开始编译jni代码
创建一个项目(如果你只想编译项目中已有的jni代码,不需要重新创建项目的话,后面会介绍),步骤和普通创建项目的大致一样,只是在创建项目的时候,勾选上includ C++ Support,如下图所示
勾选了勾选上includ C++ Support你会发现比平常创建项目会多一个界面,就是最后一个界面,如下图所示
- Standard:使用下拉列表选择您希望使用哪种 C++ 标准。选择 Toolchain Default 会使用默认的 CMake 设置。
-
Exceptions Support:如果您希望启用对 C++ 异常处理的支持,请选中此复选框。如果启用此复选框,Android Studio 会将
-fexceptions
标志添加到模块级build.gradle
文件的cppFlags
中,Gradle 会将其传递到 CMake。 -
Runtime Type Information Support:如果您希望支持 RTTI,请选中此复选框。如果启用此复选框,Android Studio 会将
-frtti
标志添加到模块级build.gradle
文件的cppFlags
中,Gradle 会将其传递到 CMake。
点击Finish创建完成后,你会发现多了一个cpp目录和External Build Files模块,并且External Build Files模块下有个CMaskeLists.txt配置文件,如下图所示
cpp目录里面里面专门放c++或者c源文件,项目刚创建好这里面有一个示例c++文件
External Build Files 专门放项目中所有Module的CMake配置文件,名字是固定写法"CMakeLists.txt",需要注意的是
add_library()方法里面传入的so名称最后会自动变成 lib你传的名称.so,但是你在加载so库的时候,还是传你写的名称,这
是CMake的规范
接下来直接点击运行就可以了。如果你想看so库是否编译到你的apk里面,可以使用APK分析器
- 选择 Build > Analyze APK。
- 从
app/build/outputs/apk/
目录中选择 APK 并点击 OK。 - 如图 3 中所示,您会在 APK 分析器窗口的
lib/<ABI>/
下看到lib你的so库名称.so
。
让现有项目使用CMake
1.创建源文件c或c++(如果项目中有,跳过此步骤)
从 Android Studio 的左侧打开 Project 窗格并从下拉菜单中选择 Project 视图,打开你想编写代码的Module,选中mian目录右击创建一个cpp目录,在里面编写你的c或者c++代码
2.创建CMake构建脚本
从 Android Studio 的左侧打开 Project 窗格并从下拉菜单中选择 Project 视图,选中你Module,右键新建文件
输入“CMakeLists.txt”点击ok,配置一下内容
cmake_minimum_required(VERSION 3.4.1) add_library( # Specifies the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/native-lib.cpp )
主要是
cmake_minimum_required(VERSION 3.4.1) 和
add_library(libname SHARED 源文件path)这两个方法。
使用
add_library()
向您的 CMake 构建脚本添加源文件或库时,Android Studio 还会在您同步项目后在 Project 视图下显示关联的标头文件。不过,为了确保
CMake 可以在编译时定位您的标头文件,您需要将 include_directories()
命令添加到
CMake 构建脚本中并指定标头的路径:
# Specifies a path to native header files. include_directories(src/main/cpp/include/)CMake文件编写完成,你需要关联你的gradle,直接在你module中添加
android { ... defaultConfig {...} buildTypes {...} // Encapsulates your external native build configurations. externalNativeBuild { // Encapsulates your CMake build configurations. cmake { // Provides a relative path to your CMake build script. path "CMakeLists.txt" } } }
然后直接运行你的项目就可以了。
更多API信息可以查看android官方文档:https://developer.android.google.cn/ndk/guides/cmake.html#variables (无需*)
有什么问题可以在下方讨论