文章目录

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

  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. 在项目中使用

      配置完成后,在项目需要使用的地方,通过如下代码加载动态库后即可使用

更多阅读

  • 《NDK 入门指南》

  • 《JNI NDK入门详解》

  • 《NDK开发入门教程》

Android NDK—CMake配置及使用相关推荐

  1. Windows环境使用CLion进行Android NDK开发配置

    主要思路 CLion开发NDK,思路就是在代码开发编译的时候必须使用ndk提供的依赖环境.代码编译完成后,然后将二进制包发送到目标机器上,然后进行远程调试. 下载软件与系统相关配置 下载安装CLion ...

  2. Android NDK开发配置NDK

    在Android的官网下载android NDK 地址点击下载 下载之后解压到自己的目录下,我的是/home/zhycheng/ 然后在终端执行 chmod 777 android-ndk-r8 这条 ...

  3. windows 下 Android NDK开发配置(window + cygwin + NDK )

    cygwin 下载地址: http://www.cygwin.com/ NDK下载地址 : http://yueguc.javaeye.com/blog/494016 具体安装 过程 参考 http: ...

  4. android ndk交叉编译pcl 1.9.1

    目录 android ndk交叉编译pcl 1.9.1 依赖库 android ndk 下载 使用cmake交叉编译lib库 编译pcl 完整的android studio cmake配置代码 and ...

  5. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  6. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  7. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  8. 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )

    文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI ...

  9. android ndk怎样加载o文件_JNI初探之NDK 开发环境配置

    安装 CMake.LLDB与NDK 开发工具包 CMake 简介 CMake 是一款比make更强大的编译自动配置工具,它可以根据不同平台.不同的编译器,并通过CMakeLists.txt文件中简单的 ...

最新文章

  1. Google在中国打败百度的方法其实很简单.只要需改变5点.
  2. 2.6 datetime 模块
  3. 关于CAShapeLayer的一些实用案例和技巧
  4. android 当中taskAffinity属性与launchMode相关
  5. WIKIOI 1519 过路费
  6. 前端学习(3265):js中undefine中3相关属性
  7. 电脑连接电视方法详解_笔记本连接电视方法有哪些?分享两种笔记本连接电视方法...
  8. android浏览SD卡的文件,简单实现浏览Android SD卡中的文件
  9. RCP:如何移除Toolbar中的Quick Access
  10. 计算机视觉中的图像扭曲
  11. MIPS单周期CPU
  12. Deep learning-based method coupled with small sample learning for solving partial differential equat
  13. 通过JavaScript中基于属性的TDD的钻石方块
  14. bpduguard使用在接着虚拟机的服务器上,避免网络环路:STP和VMware vSwitch
  15. mysql-8.0.12_MySQL 8.0.12-winx64 安装
  16. 撩妹奇招——修改Excel单元格默认格式
  17. 移动端网页直接拨打电话
  18. java+jsp基于ssm的智慧医疗系统医院挂号就诊系统-计算机毕业设计
  19. Unity Shader 之 简单实现物体被黑洞吸收吞噬(或者从黑洞中出来)的效果
  20. 【无人驾驶系列五】GPS及惯性传感器在无人驾驶中的应用

热门文章

  1. OAI NR nr-uesoftmodem解析
  2. 五个会让你追悔的错误VPC 配置
  3. VIP02-RocketMQ开发模型
  4. swoole 启动流程_EasySwoole 服务启动过程以及主体设计流程源码解析
  5. php easyswoole --e,easyswoole实现开机自启
  6. Prometheus中 rate、irate、increase函数的使用场景
  7. 【RS】在线更新RS:How to Retrain Recommendation System (SIGIR‘20)
  8. jQuery 隔行进行添加样式
  9. Android-如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?
  10. 【信号与系统】01 - 线性时不变系统