本文是在mac环境,使用android studio完成ndk开发
ndk安装在这里略过
配置也比较简单
![](https://img.haomeiwen.com/i1712960/0e9b79da2be49945.png)
具体步骤
1.新建一个方法,用native标识
public static native int getIntFromNative(int a, int b);
2.编译一遍项目,目的是为了获得native方法的类的class文件
![](https://img.haomeiwen.com/i1712960/58daab1202c1b091.png)
3.用javah命令生成头文件
这里用android自带的命令行工具即可,先进入class文件所在的目录,然后按执行下面的命令,javah -jni com.xxx.xxx.Xxx(后面是class文件)
![](https://img.haomeiwen.com/i1712960/f563272ce1c7355a.png)
4.命令执行成功后,就会在当前目录下生成一个头文件了
![](https://img.haomeiwen.com/i1712960/e8fb44d259f742c3.png)
5.把这个头文件复制到jni目录下(项目路径/src/main/jni),然后就可以生成c文件了,c++不会,不过应该差不多
![](https://img.haomeiwen.com/i1712960/9c6c3cdbf379a8d2.png)
6.实现native代码
头文件的内容如下
![](https://img.haomeiwen.com/i1712960/09e17cfdaca1640c.png)
c文件的具体实现如下
![](https://img.haomeiwen.com/i1712960/7f7c7108092ebd03.png)
事实上只需要手动添加inclue "com_xxx_xxx_xxx.h"即可,其余的函数实现可以从头文件那复制过来,加上变量名称和代码实现就完成了
7.项目的ndk配置
打开项目的gradle文件,在config下添加ndk配置
![](https://img.haomeiwen.com/i1712960/65a8952ae9ec542b.png)
这里的moduleName是自己指定的,而abiFilters是匹配不同设备环境的,一般就这三个
8.加载库文件
到这里就几本上结束了,在调用native方法之前,记得加载库文件(加载一次就够了,所以一般写在static块中),文件名称就是前面ndk配置中指定的moduleName了
System.loadLibrary("gradle中指定的moduleName");
最后就是直接调用看效果了
![](https://img.haomeiwen.com/i1712960/9ae38c27e358cafb.png)
![](https://img.haomeiwen.com/i1712960/22447e475987bc2c.png)
网友评论