Android NDK—CMake配置及使用

文章目录

      • 安装NDK和CMake
      • 新建NDK项目
      • 代码实现
      • 编译构建
      • 如何使用
        • 自身项目使用
        • 其他项目使用

安装NDK和CMake

  1. 打开AS的Prefrences—>Android SDK—>SDK Tools
  • 选中 NDK (Side by side)CMake 复选框。我这里之前在nkd-bundle中已经安装NDK就没有卸载了

    注意:如果您在 ndk-bundle 文件夹中安装了 NDK,它会显示在标签为 NDK 的列表中。如果您使用的是 Android Gradle 插件 3.5.0 或更高版本,则可以选中或取消选中该复选框。取消选中该复选框会卸载 NDK,释放磁盘空间,并使该复选框从列表中消失。如果您卸载旧版 NDK,请从项目的 local.properties 文件中移除 ndk.dir 值,该值现已弃用。

    Android NDK—CMake配置及使用_第1张图片

  1. 打开项目结构 Project Structure—>SDK Location
  • 配置Android NDK路径
    Android NDK—CMake配置及使用_第2张图片

新建NDK项目

新建项目,选择Native C++
Android NDK—CMake配置及使用_第3张图片
选择默认的C++库即可
Android NDK—CMake配置及使用_第4张图片
点击完成,初始化项目,构建结束会在src目录下生成一个cpp目录,内部包含一个c++源文件native-lib.cpp和一个CMake配置文件CMakeLists.txt
Android NDK—CMake配置及使用_第5张图片
build.gradle配置

  • abiFiltes:设置生成的.so库所支持的CPU结构
    Android NDK—CMake配置及使用_第6张图片

代码实现

接下来逐个看下这两个文件内容

  • native-lib.cpp

    c++源文件,内部实现了Java层声明Native方法

    先看下java层声明的Native方法
    Android NDK—CMake配置及使用_第7张图片

    与其对应的c++实现文件

    其中c++源文件中对应函数命名规则为:Java_应用包名_类名_方法名(JNIEnv *env,jobject thiz)

    注意:包名中的.需要替换为_

    Android NDK—CMake配置及使用_第8张图片

  • CMakeLists.txt
    Android NDK—CMake配置及使用_第9张图片

编译构建

上面代码是我们创建一个NDK项目系统生成的样例,如果我们需要自己实现NDK业务,步骤如下:

  • Java层声明Native方法
  • 生成对应的C++方法并实现业务逻辑
  • 配置CMakeLists.txt构建脚本
  • 编译构建

经过上述步骤,会默认在app->build->intermediates->cmake->debug/release->obj目录下生成所支持的不同CPU架构的的动态库(.so),在我们打包时候会一并打包到APK中。
Android NDK—CMake配置及使用_第10张图片
ps:当然我们也可以指定动态库的生成路径。例如,将构建的so动态库文件存储在应用项目app->jniLibs目录下:在CMakeLists.txt构建脚本中我们指定如下脚本():
在这里插入图片描述

如何使用

自身项目使用

所谓自身项目使用:即在当前项目内通过Java层声明Native方法,并且在当前项目中通过C/C++实现Native方法,然后通过CMake编译生成so动态库后在当前项目内直接使用,如下:

在需要调用Native的业务处通过static{System.loadLibrary("name");}加载动态库,然后直接调用Native方法即可
Android NDK—CMake配置及使用_第11张图片

其他项目使用

相对于自身使用,还有一种方式就是将A项目通过CMake编译后的so动态库文件提供给B(其他)项目使用,具体步骤如下:

  • A项目

    1. Java层声明native方法
      Android NDK—CMake配置及使用_第12张图片

    2. 生成对应c/c++源文件并实现
      Android NDK—CMake配置及使用_第13张图片

    3. 配置CMakeLists.txt脚本文件并编译生成so动态库
      Android NDK—CMake配置及使用_第14张图片

    4. 将生成的so动态度copy给B(其他)项目
      Android NDK—CMake配置及使用_第15张图片

  • B项目

    1. 将A项目提供的so动态库文件放在项目的jniLibs目录下,或者libs目录下所支持对应的cpu架构目录下(必须在build.gradle中重定向jniLibs.srcDirs=['libs']),并配置应用所支持的CPU架构(需要依据提供方给到所支持的so动态库来配置)
      Android NDK—CMake配置及使用_第16张图片

    2. 声明native方法(native方法的包名与类名必须与提供方一致,可让提供方连同so动态库一起提供)
      Android NDK—CMake配置及使用_第17张图片

    3. 在项目中使用

      配置完成后,在项目需要使用的地方,通过如下代码加载动态库后即可使用
      Android NDK—CMake配置及使用_第18张图片

更多阅读

  • 《NDK 入门指南》

  • 《JNI NDK入门详解》

  • 《NDK开发入门教程》

你可能感兴趣的:(android开发总结)