NDK( Native Development Kit )是Google开发的一套开发和编译工具集, 主要用于Android的JNI开发。那JNI是什么呢?通俗来说JNI是一套编程接口, 用来实现Java代码与本地的C/C++代码进行交互。
NDK开发的优点是
1、运行效率高
2、利于充分发挥软硬件优势
3、利于代码复用,降低成本
而缺点主要就是对开发人员的要求更高,开发和调试难度都加大了。
明确了NDK开发的优缺点可以让我们在项目开发中作出最合理的方案,以达到最高的效益。那NDK如何开发呢?首要是搭建环境。
DNK下载与安装
NDK下载 ,ndk 下载官方网址
根据需要下载对应的版本,下载完成如下所示:
下载完成后进行安装:
Window下双击就可以完成安装了,安装好的文件在相同目录下
目录结构为:
DNK环境变量的配置
将ndk的目录加入到用户变量path末尾 用分号相隔(加入系统变量中也可以,但是不能马上生效,需要重新启动计算机)与java jdk环境配置一样就不在详细描述了。查看是否配置成功运行在cmd中运行 ndk-build
运行结果如下所示的话,则代表成功。
使用NDK开发
1.编写含有关键字native的方法
创建Android工程,创建类HelloNDK,添加方法sayHello,如下所示:
2.利用命令 javah classname 生成.h文件
但是运行结果并不是我们所想的那样,是因为找不到类,解决方法是要先进入src文件夹下面在运行javah命令如下所示
运行成功这时候会发现在src下面多了一个.h文件:
3.生成.so动态链接库(四个文件)
在根目录下下穿件一个jni的文件夹,把之前生成的.h文件放到里面
在jni的目录下创建一个文件,文件名和.h的文件名称一样只是后缀变成是.c文件,创建完成后开始编写.c文件
JNIEXPORT void JNICALL Java_com_weijuan_NDKHelloWorld_NDKHello_sayHello
(JNIEnv *env, jclass clazz);这个函数是在.h文件中直接拷贝过来的,除了这个之外还需要加上参数的变量名称
也就是env,clazz .
在jni的目录下加上Android.mk文件和Application.mk
所添加的这两个文件,可以参考ndk里面提供的,找到ndk目录打开
samples\hello-jni\jni :
在Application.mk中只有一句话,不要做修改就直接可以用了
APP_ABI := all
在Android.mk 文件中如要做一些修改:
需要修改下面两项的内容:
在jni下面成功添加了四个所需的文件后在Terminal中运行ndk-build,成功出现下面的信息:
运行成功后在libs下面多了所需要的.so文件,如下所示:
在生成.so文件的时候也生成了一个叫obj的文件夹,在协同开发的时候请将这个文件夹下面的内容忽略。
4.在HelloNDK中加入静态代码块,
意思就是要求引用libHello.so的库
static {
System.loadLibrary("Hello");
}
这样一个简单的sayHello的应用程序就完成了,但是运行后我们是没办法看到一个明确的结果,为了更好的检验程序是否有正确的执行,下面编写一个返回值得方法。同样的步骤:
1.添加一个使用关键之native修饰的方法
2.生成.h文件
3.编写.c文件,在.c文件中实现方法 返回一个字符串“Hello ndk success”
由于引用了jni.h里面的函数,所以要加上头文件include
4.通过命令ndk-build 重新生成.so文件
5.在MyActivity中加入如下代码:
6.运行结果如下:(成功打印日志)
注意:使用Android studio开发的时候需要在local.properties中加上ndk的路径,如下所示:
一个简单的ndk开发就介绍到这里,有任何问题请留言!!!