Android Studio 2.2 NDK CMake方式入门

简述

期待已久的android studio 2.2正式版本终于发布了,该版本开始开发 NDK 便简单了很多,比起使用 javac、javah 命令才能完成的方式简直是质的提升,就是本文所讲的 CMake 方式了,Android 对 CMake的说明请戳: CMake API

本次关于 CMake 的内容不做讲解,各位看官可以自行学习,CMake官网

新建项目,选中:Include C++ Support,AndroidStudio会为我们创建cpp文件夹、CMake文件、模块的Gradle也会做些相应的配置。

1、新建 Ndk Project

这里写图片描述

Tips: 新建一个支持 “Include C++ Support” 的项目,把 Include C++ Support 前面的选项打上勾,然后一路 Next,直到 Finish 为止。


2、配置 NDK 的支持

这里写图片描述


这里写图片描述

这里写图片描述

Tips: 需要下载好 NDK,然后配置 NDK 所在的路径


2.1下载CMake,LLDB,NDK

直接去AndroidStudio Settings中配置,Appearance&Behavior->System Setings->android SDK,选中SDK Tools标签页,选择CMake,LLDB,NDK进行安装如下图

这里写图片描述

Tips:CMake是AndroidStudio2.2提供的构建C项目的工具,LLDB是用来调试C代码的。


3、编译好的项目一览

这里写图片描述

Tips: 图中红色方框选中的区域为 NDK 的东东

(a). externalNativeBuild —> cmake 编译好的文件, 显示支持的各种硬件等信息

(b). cpp —> C 语言程序的逻辑部分, native-lib.cpp 文件名可自行修改

(c). CMakeLists.txt —> CMake 脚本配置的文件, 具体可查阅 CMake官网的资料


4、Gradle 文件配置 CMake

这里写图片描述

Tips: 只需要配置这两块即可,是不是特简单呢。当然这里还支持配置更多指令 (非常强大),具体可查阅 CMake 官网


5、MainActivity 部分

这里写图片描述

Tips: 红色方框中三块即可实现调用 NDK 来实现功能

(a). 使用 native 来定义 NDK 的方法:public native *

(b). 使用 static 语块来引入 so 文件

(c). 调用时,只需要调用定义的 native 的方法即可


5.1、java自动关联或者自动生成C/C++代码

我们在Activity里创建一个native方法,直接报红,然后Alt+Enter,选第一个

这里写图片描述

接下来神奇的地方出现了,native-lib.cpp里自动帮我们添加了新的方法:

这里写图片描述

给该方法一个正确的返回值,然后在Activity中调用native方法。呵呵崩掉了!

这里写图片描述

项目可以通过编译,但是找不到C++里面的方法,这是因为CMake在编译C++代码的时候把刚才新建的C++函数漏掉了,怎么把他加上呢,注意到C++代码里面有一个extern “C”这句话了吗,这个是CMake的东西,把这句话放到最上面,然后加个大括号,把所有Java需要调用的方法都放里面,调整后的C++代码如下:

这里写图片描述

6、C/C++ 语法部分

这里写图片描述

Tips: 方法名的命名根之前方法一样,java_包名类名方法名


7、CMakeLists.txt 部分

这里写图片描述

Tips: 红色方框部分的名称可以同时更改, 注意两者需要一致, 更改名称后 会在 .externalNativeBuild 目录下生成相应的 so 的名称,Android 部分调用时 static 语块中 引入的 so 文件名也要保持一致


8、手机运行效果

这里写图片描述

以上只是简单的演示了 <如何创建 CMake 方式实现 Android Studio 2.2 版本 的NDK> 的教程,希望本文可以帮到一些人。

Tips: JNI 类可以单独一个类,不是必须在 MainActivity 类中


9、Gradle project 调式

这里写图片描述

Tips:通过Gradele Project 自动生成.so文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值