Android NDK—CMake配置及使用
文章目录
- 安装NDK和CMake
- 新建NDK项目
- 代码实现
- 编译构建
- 如何使用
- 自身项目使用
- 其他项目使用
安装NDK和CMake
- 打开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
值,该值现已弃用。
- 打开项目结构
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项目
Java层声明native方法
生成对应c/c++源文件并实现
配置
CMakeLists.txt
脚本文件并编译生成so动态库
将生成的so动态度copy给B(其他)项目
B项目
将A项目提供的so动态库文件放在项目的
jniLibs
目录下,或者libs目录下所支持对应的cpu架构目录下(必须在build.gradle中重定向jniLibs.srcDirs=['libs']
),并配置应用所支持的CPU架构(需要依据提供方给到所支持的so动态库来配置)
声明native方法(native方法的包名与类名必须与提供方一致,可让提供方连同so动态库一起提供)
在项目中使用
配置完成后,在项目需要使用的地方,通过如下代码加载动态库后即可使用
更多阅读
《NDK 入门指南》
《JNI NDK入门详解》
《NDK开发入门教程》
Android NDK—CMake配置及使用相关推荐
- Windows环境使用CLion进行Android NDK开发配置
主要思路 CLion开发NDK,思路就是在代码开发编译的时候必须使用ndk提供的依赖环境.代码编译完成后,然后将二进制包发送到目标机器上,然后进行远程调试. 下载软件与系统相关配置 下载安装CLion ...
- Android NDK开发配置NDK
在Android的官网下载android NDK 地址点击下载 下载之后解压到自己的目录下,我的是/home/zhycheng/ 然后在终端执行 chmod 777 android-ndk-r8 这条 ...
- windows 下 Android NDK开发配置(window + cygwin + NDK )
cygwin 下载地址: http://www.cygwin.com/ NDK下载地址 : http://yueguc.javaeye.com/blog/494016 具体安装 过程 参考 http: ...
- android ndk交叉编译pcl 1.9.1
目录 android ndk交叉编译pcl 1.9.1 依赖库 android ndk 下载 使用cmake交叉编译lib库 编译pcl 完整的android studio cmake配置代码 and ...
- 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )
文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...
- 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )
文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...
- 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )
文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
- 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )
文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI ...
- android ndk怎样加载o文件_JNI初探之NDK 开发环境配置
安装 CMake.LLDB与NDK 开发工具包 CMake 简介 CMake 是一款比make更强大的编译自动配置工具,它可以根据不同平台.不同的编译器,并通过CMakeLists.txt文件中简单的 ...
最新文章
- Google在中国打败百度的方法其实很简单.只要需改变5点.
- 2.6 datetime 模块
- 关于CAShapeLayer的一些实用案例和技巧
- android 当中taskAffinity属性与launchMode相关
- WIKIOI 1519 过路费
- 前端学习(3265):js中undefine中3相关属性
- 电脑连接电视方法详解_笔记本连接电视方法有哪些?分享两种笔记本连接电视方法...
- android浏览SD卡的文件,简单实现浏览Android SD卡中的文件
- RCP:如何移除Toolbar中的Quick Access
- 计算机视觉中的图像扭曲
- MIPS单周期CPU
- Deep learning-based method coupled with small sample learning for solving partial differential equat
- 通过JavaScript中基于属性的TDD的钻石方块
- bpduguard使用在接着虚拟机的服务器上,避免网络环路:STP和VMware vSwitch
- mysql-8.0.12_MySQL 8.0.12-winx64 安装
- 撩妹奇招——修改Excel单元格默认格式
- 移动端网页直接拨打电话
- java+jsp基于ssm的智慧医疗系统医院挂号就诊系统-计算机毕业设计
- Unity Shader 之 简单实现物体被黑洞吸收吞噬(或者从黑洞中出来)的效果
- 【无人驾驶系列五】GPS及惯性传感器在无人驾驶中的应用
热门文章
- OAI NR nr-uesoftmodem解析
- 五个会让你追悔的错误VPC 配置
- VIP02-RocketMQ开发模型
- swoole 启动流程_EasySwoole 服务启动过程以及主体设计流程源码解析
- php easyswoole --e,easyswoole实现开机自启
- Prometheus中 rate、irate、increase函数的使用场景
- 【RS】在线更新RS:How to Retrain Recommendation System (SIGIR‘20)
- jQuery 隔行进行添加样式
- Android-如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?
- 【信号与系统】01 - 线性时不变系统