Android NDK开发

来源:互联网 发布:唱吧 上传 网络异常 编辑:程序博客网 时间:2024/06/05 01:53

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开发就介绍到这里,有任何问题请留言!!!

0 0
原创粉丝点击