Android NDK—CMake配置及使用

安装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 值,该值现已弃用。

  1. 打开项目结构 Project Structure—>SDK Location
  • 配置Android NDK路径

新建NDK项目

新建项目,选择Native C++
在这里插入图片描述
选择默认的C++库即可

点击完成,初始化项目,构建结束会在src目录下生成一个cpp目录,内部包含一个c++源文件native-lib.cpp和一个CMake配置文件CMakeLists.txt

build.gradle配置

  • abiFiltes:设置生成的.so库所支持的CPU结构
    在这里插入图片描述

代码实现

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

  • native-lib.cpp

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

    先看下java层声明的Native方法
    在这里插入图片描述

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

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

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

    在这里插入图片描述

  • CMakeLists.txt
    在这里插入图片描述

编译构建

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

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

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

如何使用

自身项目使用

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

在需要调用Native的业务处通过static{System.loadLibrary("name");}加载动态库,然后直接调用Native方法即可
在这里插入图片描述

其他项目使用

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

  • A项目

    1. Java层声明native方法
      在这里插入图片描述

    2. 生成对应c/c++源文件并实现
      在这里插入图片描述

    3. 配置CMakeLists.txt脚本文件并编译生成so动态库

    4. 将生成的so动态度copy给B(其他)项目
      在这里插入图片描述

  • B项目

    1. 将A项目提供的so动态库文件放在项目的jniLibs目录下,或者libs目录下所支持对应的cpu架构目录下(必须在build.gradle中重定向jniLibs.srcDirs=['libs']),并配置应用所支持的CPU架构(需要依据提供方给到所支持的so动态库来配置)
      在这里插入图片描述

    2. 声明native方法(native方法的包名与类名必须与提供方一致,可让提供方连同so动态库一起提供)
      在这里插入图片描述

    3. 在项目中使用

      配置完成后,在项目需要使用的地方,通过如下代码加载动态库后即可使用
      在这里插入图片描述

更多阅读

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值